c++ 中文 base64加密_这次有点骚了,破解安卓某 APP 低层加密
今天给大家分享一下如何逆向分析 Native 层的加密,整个过程的思路值得借鉴,接下来由小帅b的朋友 Houser 给大家进行演示,搞起:
所需设备和环境
设备:
安卓手机(获取root权限)
抓包:
fiddler + xposed + JustTrustMe
反编译:
jadx-gui,ida
抓包
按照惯例,这里隐去 app 的名称,开启 fiddler 抓包后 app 提示连接不到网络,判断是证书验证,开启 xposed 框架,再次请求,成功抓到包,连续请求两次来对比参数变化:
可以看到 x-app-token 这个参数不一样,其他参数都是固定的,先简单看一下 x-app-token 的构成:
这样做了一下换行,有没有发现什么规律?
我一眼就看出来第二行是手机的 deviceID,因为爬虫写多了,这个字符串经常出现,第一行是 32 位,应该就是个 md5, 第三行是个 16 进制数,知道了这些,接下来就来反编译,搜索这个关键字。
反编译
反编译之前先使用 ApkScan-PKID 查一下是否有壳,养成好习惯,这个 app 没有加壳,直接用 jadx 打开,全局搜索 “x-app-token”,只有一处,应该就在这里了:
从框中代码发现 x-app-token 的值就是 as,而 as 是函数 getAS 生成的,按住鼠标左键,点击 getAS 进去看看详情:
它把函数过程写到 native 层中去了,那只好去分析这个名为native-lib 的 so 文件了,解压目标 apk 获取到了如下图这些文件:
so文件就在这个lib文件夹里:
ida中打开这个文件,切换到 Export 导出函数选项卡,先来直接搜索getAS:
没有搜到getAS,倒是搜到了 getAuthString,名字很像,打开看看吧,按 F5 可以把汇编代码转换为伪 c 代码,下拉分析一波,看到了 md5 关键字:
代码有点难懂,连懵带猜 v61 应该是 MD5 加密后的结果,然后 append 似乎是在拼接字符串,看到了“0x”,根据抓包的结果已经知道 x_app_token 的第三行是个 16 进制数,那应该是这里的v86了,向上看看它具体是什么:
v86存的是 v40 的值,而 v40 就是当前的时间戳,那 x-app-token 第三行应该就是时间戳的 16 进制数。接下来看看 md5 的入参为v58,v52,v53,重点来看v52,往上追朔看到其和 v51 是相等的,而 v51 是一个未知字符串经过 base64 编码得到的,先来hook这两个函数,写段脚本:
第1处和2处分别是目标函数的地址,鼠标点到目标函数处,ida左下角会显示,加1是为何,只记得大学时候学过汇编语言讲到段地址,偏移地址,物理地址这些,猜测和这些知识有关,还需研究,这里先这样用,第3处的写法是当这个参数为字符串时的写法,运行一波,看看打印输出:
同时也来抓包:
把v52的值放到在线MD5网站中加密看看:
和抓包得到的结果是一样的,那就证明hook点找对了,那么v49就是base64编码之前的值,v49是什么呢,仔细一看,里面也有deviceID,再来分割一下:
第一行通过两次hook,发现他是固定不变的,第二行是改变的,32位,看起来又是个md5,第六行是包名,返回伪c代码,再来分析看看,在前面又看到了MD5加密的地方:
那来hook这个函数,看看入参:
打印的入参数据为:
S是一个时间戳,拿到MD5加密网站上验证一下,正好和v49中包含的字符串相同:
至此,逆向就完成了,来总结一下x-app-token的获取过程,先是带有把时间戳进行md5,按下图顺序拼接:
然后把拼好的字符串进行base64编码,最后把编码结果进行MD5,得到x-app-token的开头部分,组成如下:
接下来写个脚本来请求数据
请求
代码如下:
运行,成功拿到数据:
总结
今天主要介绍了 native 层 hook 的方法,虽然 so 文件中的伪c代码要有一定的基础才能看懂,但是先不要怕,分析的过程中可以先大胆假设,有 frida 非常强大的 hook 功能,就能一步步验证之前的假设。这两次都是静态分析方法,下次我们再来介绍一下动态调试的方法。
最后,以上内容仅供学习交流,希望对你有帮助,那么我们下回见,peace!
关注公众号:学习 Python 没烦恼
c++ 中文 base64加密_这次有点骚了,破解安卓某 APP 低层加密相关推荐
- 看我骚操作‘破解’某查查app的sign以及某眼查的Authorization!
看我骚操作'破解'某查查app的sign以及某眼查的Authorization!!! 这里要用到的工具/开发语言: 1.Python(2或者3) 2.App爬虫神器mitmproxy 3.按键精灵 4 ...
- mysql主从同步加密_教你构建MySQL主从结构,实现基于SSL加密的主从同步机制
实验环境RHEL6.4 admin1.tuchao.com 192.168.1.201 主服务器 admin2.tuchao.com 192.168.1.202 从服务器 先在 ...
- 【iOS app加密】iOS app之游戏加密防破解
[iOS app加密]iOS app之游戏加密防破解.iOS app游戏类应用有一个很泛滥但被视为鸡肋的问题,那就是iOS app被破解的问题.因为国内大多数游戏靠内购和广告盈利,游戏安装包也只是在早 ...
- maven项目密码md5加密_加密Spring Boot中的application.properties
1 概述 什么?都2020年了还在Spring Boot的配置文件中写明文密码? (虽然是小项目,明文也没人看.) (明文简单快捷方便啊!!! ) (你看直接用户名root密码123456多么简单!! ...
- 数据库身份证号加密密码加密_使用密码加密数据
数据库身份证号加密密码加密 介绍 (Introduction) When we're encrypting data, typically we will create a random key th ...
- 猿人学题库十六题——js加密_表情包+sojson6.0——满天坑
猿人学题库十六题--js加密_表情包+sojson6.0 1. 首先 进入 浏览器的开发者工具, 进去后首先还是 无线debug ,找到 debugg 对应的行数,右击选择 never pause ...
- 0宽字符加密_前端AES加密方式分析,及其python实现
在前端常见的加密方式中AES很少使用,因为相对于非对称的RSA安全性很低,AES是典型的对称加密,密钥就在前端源码里. 案列网站是http://ewt360.com,一个并不复杂的网站,首先抓个包看看 ...
- 配置加密_数据库密码配置项都不加密?心也太大了!
先看一份典型的配置文件 ... 省略 ... ## 配置MySQL数据库连接spring.datasource.driver-class-name=com.mysql.jdbc.Driversprin ...
- svgaps绘制时不能用中文命名吗_设计师需要了解的切图命名规范
2020年8月21日下午4点50分 黄河公园 通常我们在界面设计完成之后要切图给到前端开发.初做UI设计时,把重点都放在设计效果图上,对之后的切图命名规范没有很注重.当时我会有一些疑惑,切图命名的原则 ...
最新文章
- Android中修改弹出dialog背景无色透明,弹出时有遮罩
- 癌症治疗新曙光:AI助力科学家更好地观察人类活体细胞
- Non-interger Area 分类讨论 奇偶 取模 牛客练习赛95
- 分享31个非常有用的 HTML5 教程
- 快速构建Windows 8风格应用22-MessageDialog
- 自定义验证规则ValidationAttribute的使用
- JS基础_break和continue
- 黑苹果 选择语言 点不了_什么是天然的“黑钻”?—科普贴
- 7-1 两个有序链表序列的合并 (15 分)
- 三次给你讲清楚Redis之Redis是个啥
- 心跳监测器 IHeartBeatChecker
- pytorch使用说明2
- 1月3日 接触ROS
- redhat7linux防火墙开放端口,Redhat7 firewall(防火墙)
- 基于javaweb+springboot的企业员工绩效工资管理系统(java+SpringBoot+FreeMarker+Mysql)
- P10(1R)单红V706模组32X16 LED显示屏的二十项小实验
- 史玉柱的“圈钱”神话3
- Hibernate的缓存机制
- 考研数据结构填空题整合_做题版
- [转载]Shell十三问(入门与提高)
热门文章
- javaSE----学习路线
- Linux CentOS7 下安装 TeamViewer
- ppt给图片增加高斯模糊_【毕业答辩】PPT美化:如何设计毕业答辩的封面
- python写一些小代码_#python#自己写的一段小代码
- python更新版本会丢失库吗_Python小技巧:如何批量更新已安装的库?
- Java判断文件夹是否存在,不存在则新建
- SpringBoot 注入的@service为空,运行时报空指针
- ActiveMQ运行失败 not running
- 社交之后又是资讯,支付宝要用内容吸引流量
- Ansible8:Playbook循环【转】