App逆向百例|15|某特惠App参数分析
2023-2-8 14:22:49 Author: 逆向lin狗(查看原文) 阅读量:14 收藏

观前提示:
本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除
样本:aHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMWpMMEs3TGZTb3hEOUZURW1SOFhmakE/cHdkPWxpbm4=

直接抓包 找到本次受害参数api_signedata

直接搜索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编码

那接下来的目标就很明确了 找KEYIV

根据拼接内容往回找 最终v59确定为IV 继续找IV的来源

往上看即可看到 就是随机生成的

而第二次拼接的v48为AES结果

根据代码可以看到KEY的来源

懒得看了 直接hook看KEY是否固定值

算法名:AES|Hex密钥:cdd17ab29b84b32552ddcfbb4abf0225
算法名:AES|Hex密钥:cdd17ab29b84b32552ddcfbb4abf0225

根据hook直接拿到结果简简单单

验证结果

base64解码 能看到解码后的结果前16位为拼接的IV

然后AES解密

成功解密

感谢各位大佬观看
感谢大佬们的文章分享
 如有错误 还请海涵
共同进步 带带弟弟

点赞 在看 分享是你对我最大的支持
逆向lin狗

文章来源: http://mp.weixin.qq.com/s?__biz=MzUxMjU3ODc1MA==&mid=2247485777&idx=1&sn=45e810f7fdb0e6b8c60f5a1407dad53a&chksm=f9630c80ce1485964d7633a94d9128a06fac38226b2099ef6b42472aa55736d3db9e69abfb13#rd
如有侵权请联系:admin#unsafe.sh