文章目录[隐藏]
app shield 算法分析 7 / 13
- app shield 参数加密破解|unidbg
- shield 参数加密破解 - python 执行 c++
- app sessionid searchid|算法分析
- app sessionid searchid|算法还原
- pc timestamp2 加密参数分析破解
- app shield so 加密算法分析破解还原|前言
- app shield so 加密算法分析破解还原|so 算法简单分析
- app shield so 加密算法分析破解还原|aes 算法分析破解
- app shield so 加密算法分析破解还原|md5 算法分析破解
- app shield so 加密算法分析破解还原|xydata 算法分析破解
- app shield so 加密算法分析破解还原|总结
- app hmac 参数分析
- 7261 版 shield 算法分析破解
仅供学习研究 。请勿用于非法用途,本人将不承担任何法律责任。
前言
这一篇文章开始分析某红书
app
的so
,前面已经使用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
这里参数二报错了,不知道回头看看,是咋生成的
v18
是 CallObjectMethodV
的返回值,参数有 JNIEnv, v11, v13, v14
,v11
猜测是读取 s.xml
文件的对象
v13 = dword_B5008
,这个可以查看交叉引用,在 initializeNative
函数里,初始化了这变量,值的 getString
函数
目前还有 v14
不清楚,那我们就在这里下个断点
断下来,查看 r1
的数据,发现是 main_hmac
,现在也就清楚了,这的逻辑是获取 s.xml
文件的 main_hmac
字段
最后
这篇文章就简单分析下一到这里,目前已知使用的是
xyaes, xymd5, xydata, xybase64
算法,其中的aes, md5
算法都是魔改的,xydata
是某红书的一个数据处理算法
具体怎么分析发现使用的是这些算法的逻辑就不说了,过程也还是比较心酸的,有兴趣的小伙伴可以自己尝试一下
后面开始分析具体的算法的实现了,例如aes
的init,key_expansion,decrypt
等函数,md5
的init,update,transfrom
函数
于与禹
2022-01-02大佬,这个是怎么确定是AES,md5这些算法的,有什么特征吗
会爬山的小脑虎
2022-01-02@于与禹 有特征的,有兴趣可以看看我分享的密码学学习记录系列文章
路过蜻蜓
2021-11-11请教一下,为什么我里面的函数名全是sub_xxx,而大佬你的是有具体函数名的
会爬山的小脑虎
2021-11-11@路过蜻蜓 我在分析的过程改了名字,so 文件放到了 “小红书 app shield so 加密算法分析破解还原|前言” 这篇文章里