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看具体值~

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
电子图书资源服务系统是一款基于 Java Swing 的 C-S 应用,旨在提供电子图书资源一站式服务,可从系统提供的图书资源中直接检索资源并进行下载。.zip优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人系统开发经验充足,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(若有),项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注计算机领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能 【无积分此资源可联系获取】 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。积分/付费仅作为资源整理辛苦费用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九月镇灵将

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值