app shield so 加密算法分析破解还原|so 算法简单分析

app shield 算法分析 7 / 13

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

前言

这一篇文章开始分析某红书 appso,前面已经使用 undibg 成功跑起来了,先来简单分析下大概的加密逻辑

so 分析

使用 unidbg 获取 shield 需要调用三个函数,分别是 initializeNative, initialize, intercept,前两个是初始化函数
最后一个是生成函数,下面就来逐个看一下

initializeNative

第一个初始化函数:address = 0x94289

前面是一些 java 层函数反射

再往下是初始化一些全局变量,这个初始化函数逻辑还是比较简单的没啥看头,下面来看第二个

initialize

第二个初始化函数:address = 0x937b1

该函数需要一个参数,字符串 main

这里是拼接一些字符串,但不知道具体有啥用,下面是读取 s.xml 文件获取 hmac 字段

这里就是第一个算法处,用的是 aes 解密,暂时静态看不出是啥,猜测是解密 hmac

intercept

第三个函数,获取加密参数:address = 0x939d9

这个函数的整体逻辑比较复杂,前面是调用一些函数

前面的逻辑比较多,但是都不是很重要,就不去纠结具体作用了,直接看这一段核心逻辑,已经使框起来了

主要用到的算法有 xyMd5, xyData, xyBase64,具体的后面在分析,最后 base64 过后就是拼接 XY 获取最终结果

unidbg 动态调试

aes

先来看看前面说到的 aes 输入是啥,在 sub_117A0 函数执行前下个断点

成功断下来,该函数有三个参数,分别对应 r0, r1, r2

查看 r0 的数据,传进来的是个 JNIEnv

r1 很明显不是一个内存地址,所以报错了,目前不知道是啥

r2 是传进来的字符串 main

sub_117A0 v18

这里参数二报错了,不知道回头看看,是咋生成的

v18CallObjectMethodV 的返回值,参数有 JNIEnv, v11, v13, v14v11 猜测是读取 s.xml 文件的对象

v13 = dword_B5008,这个可以查看交叉引用,在 initializeNative 函数里,初始化了这变量,值的 getString 函数

目前还有 v14 不清楚,那我们就在这里下个断点

断下来,查看 r1 的数据,发现是 main_hmac,现在也就清楚了,这的逻辑是获取 s.xml 文件的 main_hmac 字段

最后

这篇文章就简单分析下一到这里,目前已知使用的是 xyaes, xymd5, xydata, xybase64 算法,其中的 aes, md5 算法都是魔改的,xydata 是某红书的一个数据处理算法
具体怎么分析发现使用的是这些算法的逻辑就不说了,过程也还是比较心酸的,有兴趣的小伙伴可以自己尝试一下
后面开始分析具体的算法的实现了,例如 aesinit,key_expansion,decrypt 等函数,md5init,update,transfrom 函数

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

4 条评论

于与禹

大佬,这个是怎么确定是AES,md5这些算法的,有什么特征吗

回复

会爬山的小脑虎

@于与禹 有特征的,有兴趣可以看看我分享的密码学学习记录系列文章

回复

路过蜻蜓

请教一下,为什么我里面的函数名全是sub_xxx,而大佬你的是有具体函数名的

回复

会爬山的小脑虎

@路过蜻蜓 我在分析的过程改了名字,so 文件放到了 “小红书 app shield so 加密算法分析破解还原|前言” 这篇文章里

回复

发表评论

返回顶部