抓包分析
手机登录处抓包
发现有个sign参数
用不同的手机号点击发送验证码,抓包发现每次sign都不同,于是猜这个sign肯定是在本地加密的,开始逆出它的算法。
脱壳
把apk解压出来,发现它只有一个dex文件,猜它是加了壳,用工具查壳
该app用了360加固,加固的方式有加密apk文件与脱壳程序放到一起组合成一个dex文件,然后再动态解密和加载,还有指令抽取和最新的vmp加固
我这里脱壳用的是FDex2工具,其原理是利用xposed的hook框架,动态地把dex给dump下来,发现有10个dex,其中有一个是加壳的程序,于是用jadx打开每个dex,全局查找字符串接口user/vip/sendcode
找到了类com.deu.bang.interactor.GetValidateCodeApi
发现该sign是通过a.b()加密的,于是进一步查看
这里是获取时间和一段哈希值加上mobile和version的值转换成数组,用u.a()函数进一步加密
查看u.a()
这里是用MD5加密后再进行一系列的异或、与运算和移位操作,这样就逆出了sign的加密算法
用frida工具直接hook改手机号码
先hook com.eduu.bang.util.u的a函数查看它的参数,然后再hook改参数,这里也可以用xposed的hook框架,但是由于frida比较轻便,所以这里就选择了frida,这里直接改byte数组,手机号码改为13712345678,具体的脚本如下
1 | import frida, sys |
由于这里是用frida工具把sign直接改了,所以抓包的时候我们只要改mobile为13712345678就行了