app逆向实战:某新闻7.38.0版本加固脱壳和参数分析

本篇博客旨在记录学习过程,不可用于商用等其它途径

入口

这次研究的是头条数据接口,每次向下滑动即可刷新请求
在这里插入图片描述

抓包

根据抓包结果得知动态参数是stsn,大胆猜测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文件

  1. 将apk文件改名为rar文件
  2. 将脱壳得到的所有dex文件全部放进rar文件中,最好保留rar文件中原有的dex文件
  3. 重新将rar文件改名为apk文件

参数源码定位

使用jadx打开处理后的apk,现在已经能看到非常多的 class 文件了, 证明已经完成脱壳

先搜索"sn",搜出来的结果虽然不多,但是全看了一遍都没有符合期望的
在这里插入图片描述

搜索sn=,观察搜索结果,根据引用代码大概确定红框是具体位置所在
在这里插入图片描述

参数生成分析

这个位置包含了全部请求参数,我们主要看stsn
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看具体值~

posted @   七夜魔手  阅读(27)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示