❝
sgmain 6.4.x
版本的x-mini-wua
参数加密算法研究分析 样本tianmao-8.11.0
❞
本文主要使用 ida + unidbg + frida
动静态分析
之前有位大佬发了篇 x-sign
的加密流程(已经被删),我也是基于此来的灵感,大概的流程是
1、SGSAFETOKEN_IN = READFILE("file/app_SGLib/SG_INNER_DATA")
2、json = AES_DECRYPT(SGSAFETOKEN_IN)
3、sdfsd = BASE64_DECODE(json.getString("sdfsd"))
4、x1 = AESDECRYPT(sdfsd)
5、x2 = XOR(x1)
6、result = "HHnB" + BASE64_ENCODE(AES_ENCRYPT(x2))
本文基于上面的流程,简单说一下,不会扩展到其他的细节上
「Tips:因为 unidbg 跑出来的 x-mini-wua 是短的,所以只能辅助分析大概的算法流程,具体细节博主是使用 frida hook 的方式来验证的」
SG_INNER_DATA
文件在手机目录下就能找到。读取出来获取 SGSAFETOKEN_IN
字段
这个如何定位有两种方法(假设你已经分析过 xsign 参数了,那对 sgmain 的 aes 会有所了解)
-
1、直接去
hook aes decrypt
函数 -
2、通过
traceRead
看看SGSAFETOKEN_IN
在哪里读的
博主这里就直接说答案了,在这里就是 aes cbc decrypt
逻辑,通过 inlinehook
可以直接获取到 data key iv result
等数据
分析到这里,就卡住了,因为 SGSAFETOKEN_IN
解密出来的结果是个 json
有四个字段,但是没有 sdfsd
,可能是这个版本名称不一样
然后经过 n
多次的 trace
也还是没有找到想要的答案,这里各位读者大佬可以自己尝试呀,过程很心酸
最后还是决定从后往前追(当然也是遇到了 n
多个问题,有些问题卡了很久,这个后面在说)
最后的结果是 "HHnB" + BASE64_ENCODE(AES_ENCRYPT(x2))
这里直接进行 base decode
结果可以正常出来,然后就可以进行 unidbg trace
了
-
1、在最后的结果下断点,使用
shr
搜索堆 -
2、搜索到之后就可以使用
traceWrite
了 -
3、不出意外的情况下,
trace
到的地址就是aes encrypt
-
4、然后根据代码接口,就可以判断出这是个
aes cbc
模式的加密,因为密钥编排、iv ^ data 的特征都很明显,还有 pkcs7 的填充标志
以上都是博主亲测出来的流程,只不过以文字的方式描述,而没有加上图片,各位读者大佬如果没有思路可根据以上的思路尝试一下
这一步最复杂,为何复杂,因为博主的 unidbg
没有跑出全的 x-mini-wua
所以使用 unidbg
不好去分析,这一步也是卡了很久
这里就是最后 aes encrypt
加密的数据
博主在进行 trace
的过程,发现这些字节是在 n
多处 write
的
而且 so
还看不到 c
代码,很难根据 arm
分析出数据的计算逻辑,这一步也是卡了很久,具体分析的过程细节就不说了,简单说下思路
-
1、使用
unidbg
进行hook trace
,根据结果,来猜测尝试 -
2、使用
frida hook
完成验证,hook
出一些关键数据,进行计算
这一步就比较简单了,没啥可说的
最后放上一张测试请求成功的图片