最近在学习APP逆向相关的知识,刚好拿到了一个APP目标,该APP登录过程存在加密,所以记录下逆向破解的过程。
流程
先介绍下拿到该APP后续所做的一些工作流程
- 选择相应版本安装到测试机当中
- 进行抓包,查看数据包
- 分析登录请求包,找到需要进行逆向的字段
- 反编译APP,得到java代码
- 寻找关键字,进行hook验证
- 还原算法
逆向破解
安装目标APP#启动adb服务 adb start-server #安装目标APP adb install 目标app.apk
- 抓包
- 配置代理
确保手机和电脑处于同一个网络中
电脑端:配置BP代理端口
手机端:代理设置
打开APP,进行登录抓包,发现请求包中存在加密的字段 反编译APP
将APP拖入jadx进行反编译
- 逆向密码加密
- 因为请求的是登录的数据包,所以我们搜索login/login.ashx关键字
双击进入,可以看到是在UserModel接口下绑定了一个常量
查找用例,双击进入,定位到代码位置,我们可以看到密码加密的位置就是SecurityUtil.encodeMD5(str3)点击encodeMD5(str3)跳进声明进行查看,查看代码发现是典型的MD5加密
-
如果此时不确定是否是MD5加密时,可以利用Python代码进行确认,对123456进行加密
import hashlib md5 = hashlib.md5() md5.update(b"123456") print(md5.hexdigest())
手机端应用也使用123456进行登录,查看数据包,发现两个值相同,可以确认时MD5加密
- 如果还想更确认,还可以通过hook确认加密位置
-
- 手机端启动frida
adb shell su cd /data/local/tmp/ ls ./frida-server-16.1.7-an
-
- 进行端口转发
import subprocess subprocess.getoutput("adb forward tcp:27042 tcp:27042") subprocess.getoutput("adb forward tcp:27043 tcp:27043")
-
- 下面就是进行hook代码的编写,首先找到encodeMD5(str3)的包名
接着寻找类名
运行hook代码,手机端输入账号密码进行登录,可以看到和我们抓包的结果是一样的