首先抓包看下参数情况
可以看到这里 未知的 参数有4个
P2 t1 t2 和key
我们先hook一下有没有java层通用的加密算法
可以看到在登录调用的过程中触发了一些加密算法
我们搜索一下登录包的未知参数
看到我们有没有想要的
定位到了key参数,发现是MD5加密
参数为:
3116LnT6xpN3khm36zse0QzvmgTZ3waWdRSA104901648962363521
接着我们连续调用几次
3116LnT6xpN3khm36zse0QzvmgTZ3waWdRSA104901648956720446
可以发现前面的参数是不变的 只有后面的一段数字是变化的
在登录包我们可以发现 这一段是clienttime_ms
即时间戳
剩下的p2 t1 t2 没有hook到对应生成的地方,这里猜测可能是native层实现的加密
通过主动打印调用栈,找到登录包生成的地方
打开jadx反编译APK 找到对应的类对应的a方法:
跟踪进去:
可以看到我们已经定位到了 登录包参数构造的地方
我们先按照登录包参数的顺序依次分析,p2参数来自这里
传入了一个hashmap 参数有两个
clienttime_ms跟pwd
跟进生成pwd的a方法中
可以看到传入了一个字符串,然后进行md5加密,这里就是传入的密码进行md5加密
然后我们跟进.getEncryptText方法中
看到setRSAkey方法 猜测这个过程可能跟RSA加密有关
继续跟进
i方法里面传入 j方法生成的对象
j方法传入hashmap 遍历生成 arrayList
再次跟进去可以发现 _i是native 方法
我们用objection hook一下这个方法看看返回值是不是p2
可以发现生成是参数是一致的,至此_i方法为p2参数生成的地方
_i方法是非静态函数,我们找到他的对应的so可以采用hook RegisterNatives找到函数注册的地方
找到对应的so为libj.so 偏移地址为0x371c5
打开IDA进入该地址0x371c5
可以看到最终返回值v5是从v4来的 而v4是从上面来的 但是上面没有看到对应参数赋值的地方。
构造pair类 ,因为Java中没有Android的pair
构造需要返回的list对象给native函数调用
开始补环境
继续调用
Unidbg模拟算法复现成功
首先是H2函数,进到里面查看
里面估计是构造json对象
再进到f10里面
看到字符串append 估计是对json字符串的构造
进入f1
进入f13
进入f1
发现已经定位到RSA加密的地方了,验证了我们的猜想。
HOOK对应的函数:
PUBKEY:
加密参数:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2022-4-6 10:05
被_Miracles_编辑
,原因: