app逆向实战:某新闻7.38.0版本加固脱壳和参数分析
本篇博客旨在记录学习过程,不可用于商用等其它途径
入口
这次研究的是头条数据接口,每次向下滑动即可刷新请求

抓包
根据抓包结果得知动态参数是st和sn,大胆猜测sn的生成跟st有关,其它参数是固定的,后面看生成具体逻辑。

查壳
使用查壳工具发现app有腾讯加固,使用jadx反编译拿不到有用的代码文件


反射大师脱壳(只支持andriod 8以下)
apk下载:反射大师
下载好apk后通过adb install安装到andriod手机,注意事项:反射大师是Xposed插件,需要提前安装好Xposed

安装好后,双击进去开启模块,同时选择要控制的app,接下来最好是断掉网络再脱壳

打开选中的app,进去首页就能看到六星图案,这就说明反射大师控制成功了

点击这个六星图案然后选择当前ACTIVITY

搜索关键词sn,然后点击写出DEX按钮

好尴尬,到这里才发现反射大师只支持andriod 8一下的版本,服了!!!
frida-dexdump脱壳
运行frida和运行要脱壳的app,然后执行frida-dexdump -FU,需要先安装好frida-dexdump包

现在需要合并脱壳到的dex文件
- 将apk文件改名为rar文件
- 将脱壳得到的所有dex文件全部放进rar文件中,最好保留rar文件中原有的dex文件
- 重新将rar文件改名为apk文件
参数源码定位
使用jadx打开处理后的apk,现在已经能看到非常多的 class 文件了, 证明已经完成脱壳
先搜索"sn",搜出来的结果虽然不多,但是全看了一遍都没有符合期望的

搜索sn=,观察搜索结果,根据引用代码大概确定红框是具体位置所在

参数生成分析
这个位置包含了全部请求参数,我们主要看st和sn,
st的值是通过String.valueOf(valueOf) + ((int) ((Math.random() * 8999.0d) + 1000.0d));得到,这个其实就是对时间戳和随机值的处理

接下来跟踪sn,双击a(str, z),进入下面的代码,可以看到str2是对多个值进行拼接

然后进入ces.b(str2),可以到使用的是原生的md5

以上是关键参数的生成逻辑,通过跟踪代码,我们确定除了NativeSecureparam.readMD5Key、&st=、&sn=的值不确定外,其它参数都是固定值并可以通过frida hook提取,而&st=很明显是时间戳,&sn=需要依赖&st=和NativeSecureparam.readMD5Key经过md5生成,所以接下来我们要确定NativeSecureparam.readMD5Key的生成逻辑。
一般来说,我们大可以直接frida hook打印NativeSecureparam.readMD5Key的值,因为理论上它会是固定值,不过这里我们还是使用IDA打开ifeng_secure.so文件看一下代码吧。

注意:如果IDA打开so文件报Oops! internal error 40343 occured. ,是因为你的安装路径或者文件路径有中文,改成英文就可以了
so 文件分析
这是打开后的界面

选择search Text模式及,输入readMD5Key搜索

命中后会把代码高亮,双击进去

按下快捷键F5查看 C 语言伪代码

再次通过鼠标右键, 单击Hide casts, 把代码转成方便阅读的格式,这段代码大体只是把一些参数和字符串拼到了一起, 返回一个新的字符串,由于涉及到系统寄存器和特定内存地址,没法直接得出结果,需要进一步动态调试才行。

Frida Hook
前面我们已经知道sn的只是在ces.b(str2)生成的,这里就hook看看啥情况。不过这里看代码我们只知道代码所在类是ces,但是包名不明确,这里需要遍历app所有调用类来确定固定的包名

过了一遍,这里就确定完整的类是ces了,搞它!

hook代码

运行结果

这里直接sn encrypt arg跟请求参数对比,就能确定它的值怎么来的了
直接说结论:其实变化的就st的值,其它在同一台手机是一致的
加密文本:
- 7.38.0:
gv - ifengnews:
proid - 2899:
publishid - v001lN2NzEWMiFjNilDNhhjZ40gNgfr3r340gf:
deviceid - 1722448681:
st - 2546:
四位随机值, - acF%#*{_b1mQt@…ifvy:
NativeSecureparam.readMD5Key
加密结果: 原生md5加密结果
算法生成

补充
对于ltoken的值,下面是它的大致流程



后续代码看不懂就直接hook看具体值~
本文来自博客园,作者:七夜魔手,转载请注明原文链接:https://www.cnblogs.com/ranbox/p/18461033

浙公网安备 33010602011771号