样本:aHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMWpMMEs3TGZTb3hEOUZURW1SOFhmakE/cHdkPWxpbm4=
直接抓包 找到本次受害参数api_sign
和edata
直接搜索api_sign
随便选一个都行
跳转过来后根据代码逻辑找具体生成位置
一直进一直进 最终到达可以看到这里为调用了gs
方法 却点不进去了 观察方法流程 可以看到有初始化方法
进到初始化方法
点进去keyInfo
可以看到这里加载了libkeyinfo.so
往下看 看到gs
方法 最终调用的native方法为gsNav
打开大姐姐 进到so文件 导出区域搜索JAVA_
可以看到是静态注册
进到gsNav
根据内容大致可分为
进到j_Functions_gs
直接看伪代码逻辑
前面部分为对map的操作 大概就是取key和value拼接成字符串的操作
继续往下看 看到后面出现了j_getByteHash
进来一看发现是SHA1算法
所以 大概流程可能就是map取key和value拼接 然后sha1
具体几次sha1加密 有无加盐 拼接的字符串长啥样 还得看hook 静态分析到这 该动态分析了
直接hookj_getByteHash
方法一把梭
0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
aeb47cc0 61 65 65 34 63 34 32 35 64 62 62 32 32 38 38 62 aee4c425dbb2288b
aeb47cd0 38 30 63 37 31 33 34 37 63 63 33 37 64 30 34 62 80c71347cc37d04b
aeb47ce0 61 70 69 5f 6b 65 79 3d 32 33 65 37 66 32 38 30 api_key=23e7f280
aeb47cf0 31 39 65 38 34 30 37 62 39 38 62 38 34 63 64 30 19e8407b98b84cd0
aeb47d00 35 62 35 61 65 66 32 63 26 6c 6f 67 73 3d 70 3a 5b5aef2c&logs=p:
aeb47d10 61 63 74 69 76 69 74 79 5f 69 64 25 33 44 37 35 activity_id%3D75
aeb47d20 30 30 30 34 25 32 36 61 63 74 69 76 69 74 79 5f 0004%26activity_
aeb47d30 70 61 72 61 6d 25 33 44 25 32 35 37 42 25 32 35 param%3D%257B%25
aeb47d40 32 32 63 6f 6d 6d 6f 6e 5f 73 65 74 25 32 35 32 22common_set%252
aeb47d50 32 25 32 35 33 41 25 32 35 37 42 25 32 35 32 32 2%253A%257B%2522
aeb47d60 68 6f 6c 65 25 32 35 32 32 25 32 35 33 41 25 32 hole%2522%253A%2
aeb47d70 35 32 32 31 25 32 35 32 32 25 32 35 32 43 25 32 5221%2522%252C%2
aeb47d80 35 32 32 73 74 5f 63 74 78 25 32 35 32 32 25 32 522st_ctx%2522%2
aeb47d90 35 33 41 25 32 35 32 32 2d 39 39 25 32 35 32 32 53A%2522-99%2522 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
bb5f7608 61 65 65 34 63 34 32 35 64 62 62 32 32 38 38 62 aee4c425dbb2288b
bb5f7618 38 30 63 37 31 33 34 37 63 63 33 37 64 30 34 62 80c71347cc37d04b
bb5f7628 33 37 37 63 33 32 37 36 37 32 32 34 61 36 66 39 377c32767224a6f9
bb5f7638 37 65 66 30 31 65 61 63 62 32 34 32 36 30 31 39 7ef01eacb2426019
bb5f7648 64 61 37 35 61 65 33 66 da75ae3f
通过hook可知 俩次的头部都出现aee4c425dbb2288b80c71347cc37d04b
这个固定字符串 可能是一段salt
每次计算都调用三次j_getByteHash根据代码分析可知
第一次为取包信息进行sha1
后面俩次就为api_sign的计算操作
验证第一次sha1 将salt+拼接的字符串进行一次sha1
然后sha1结果拼接salt再进行一次sha1
结果正确
跟前面api_sign一样 最后跟到libkeyinfo.so
这里edata
走的是esNav
方法
大姐姐跳转过来和前面分析的一样
直接进到j_Functions_es
往下随便一翻就看到调用了AES
标准算法 模式为AES/CBC/PKCS5Padding
而后结果经过拼接进行base64
编码
那接下来的目标就很明确了 找KEY
和IV
根据拼接内容往回找 最终v59
确定为IV
继续找IV
的来源
往上看即可看到 就是随机生成的
而第二次拼接的v48
为AES结果
根据代码可以看到KEY
的来源
懒得看了 直接hook看KEY
是否固定值
算法名:AES|Hex密钥:cdd17ab29b84b32552ddcfbb4abf0225
算法名:AES|Hex密钥:cdd17ab29b84b32552ddcfbb4abf0225
根据hook直接拿到结果简简单单
验证结果
先base64
解码 能看到解码后的结果前16位为拼接的IV
然后AES解密
成功解密