app sign so 加密算法分析还原|so sub_126AC 函数算法还原

android 逆向 18 / 37

仅供学习研究 。请勿用于非法用途,本人将不承担任何法律责任。

const 龙哥 = Function() {}

const a = 全能的傻宝,每天都会换一种姿势来分享各种骚操作,10月份开始分享密码学;
const b = 点击加入星球;
return "无敌的龙哥";

推荐阅读

unidbg hook inline hook 使用
unidbg console debugger 使用
so 分析过程在验阶段会使用 unidbg debugger hook 功能,不熟悉的可以阅读以上文章
JD app sign so 加密算法分析还原|简单分析
JD app sign so 加密算法分析还原|so 算法分析

前言

上一篇分析了 so 的加密逻辑,其中核心逻辑是 sub_126AC 函数,这篇文就来看看 sub_126AC 函数的加密逻辑

0x1

简单静态分析,看下 sub_126AC 函数的逻辑

上面一段代码看不出来是啥,猜测是 copy 一些数据,主要是下面的 switch,经过调试发现走的是 case 2 分支

这里面调用了三个函数

sub_12FF0

这函数的大概逻辑,看起来应该是计算生成数据 类似于 md5 的盐值,大小是 64 个字节,没看到啥随机数,返回值应该也是固定的

sub_12ECC

这个函数看起来,应该就是核心逻辑了

sub_130D0

这个函数是释内存,下面主要分析 sub_12ECC 函数

0x2 sub_12ECC 函数分析

这个函数有两个大逻辑,因为对 c语言 不太熟悉,就自己对照着汇编代码,写了一些注释,当然都是我个人的理解,小伙伴们可以适当的参考一下

0x3 unidbg debugger 动态调试

0x10DF6 地址下个断点

成功断下来,查看 r0 的数据,看不出来是个啥,输入 n 指令,单步执行

再查看 r0 的数据,发现多了 8个字节 具体是啥,有啥用咱也不知道先不管了

使用 b 指令在这里下个断点 c 跳转

这里的话 unidbg 帮我们自动计算出了 0x40210040 地址,复制查看数据

不知道是啥,但发现大小是 64字节 猜测可能是 sub_12FF0 函数返回的,先保存下来

这个代码块就是计算然后把结果存到 v27 里,咱们就不分析了,直接看下面的逻辑

这里下个断点 c 执行跳转

查看 r0 看不来是啥,在 0x12F7A 下断点 c 执行

这里是 r2 的地址 - 20 = 0xbffff4ac 在取出第一个字节 = 0x37,看下 0xbffff4ac 地址的数据

正是 37r2 = 0x37,继续执

来到这里查看 0xbffff580

80306f4370b39fd5630ad0529f77adb6 是啥?,如果仔细分析 so 就会发现在字符串窗口里是有这个字符串的

字符串窗口里搜索一下,是有的,所以这个值在还原算法的时候是可以写的

继续往下,这时候就开始进行异或了,后面的逻辑都差不多

0x12F9C 下断点,c 执行,这里的 r2 = 0xaf 也就是最终异或计算的结果

0x4 python 还原

这是使用 python 还原后的运行结果,第一次循环的结果正好是 0xaf 最后会把所有循环计算的结果拼接到一起

最终的 md5 结果是 669355a2e119a4ad76d1c8d06fe18fd3

然后 unidbg 删除所有断点 c 执行,查看最终结果也是 669355a2e119a4ad76d1c8d06fe18fd3

0x5 python 测试

随便找个接口测试一下,请求成功

最后

某东 app 到此结束,我也没有去啊不还原,有些内容数据都是写死的,还原的代码也非常少,最后放出我修改好的 so 文件,有需要的自取

4 条评论
本文作者:
本文链接: https://www.qinless.com/?p=588
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 qinless 的博客!
100

4 条评论

逍遥

py源码有吗,可以发一波邮箱不

回复

会爬山的小脑虎

@逍遥 sign 参数 py 已还原,有兴趣的话可以添加 wx: 2027762055 一起讨论

回复

逍遥

app识别口令得接口也支持得把,小老弟儿

回复

会爬山的小脑虎

@逍遥 这个接口没看过,如果有 sign 参数的话,没啥大问题

回复

发表评论

返回顶部