实战目标:参数寻找动态调试基础算法解析HOOK步骤。
-
砸壳
2.解包解析
取出二进制,在ida/hopper中进行解析。
class-dump下二进制得到类头文件方便逆向过程使用
打开软件后进行抓包,这里为了快捷展示效果,随意取一参数,只进行参数分析取证,不做实用。
找到header一参数dt-header-info为加密参数,直接进入二进制中进行最直接的字符串寻找。
检索到结果
进入其中阅读代码
直观阅读后发现直接算法为aes的cbc模式,key与iv为包名的md5,加密内容为传入后序列化。
无法确定是否为标准aes与md5,同时需要确认传入内容进行验证,以此为目的,进行动态调试验证。
3.动态调试
取进程名。
打开xcode进行调试。
进入调试后暂停准备打断点。
LLDB的动态调试命令。
1.im li -o -f 打印基址
2.br s -a 基址+静态地址 进行动态地址下断点
为了验证第三步中的内容取证,md5验证与aes验证,需要三处下断。
于第一处断点发现传入加密前内容为。
于第二处断点发现md5加密后内容为。
与标准md5对比一致,于第三处断点处打印参数以及结果。
对第三个断点处函数点进去进行详细分析。
发现其核心步骤是aes128CBC后转16进制字符串后进行小写。
进一步观察之后发现类名为NSString也就是说这个方法是NSString的分类,这是OC中的一种方法添加规则,通过分类的方式可以为已存在的类添加新的方法,类似于一种拓展。
那么进行到这里就可以很明确的进行验证了,我们直接调起cycript直接随机输入参数进行调用此方法与标准算法进行验证发现结果一致,一次简单的算法还原随即结束。
4.最后写hook
建立一个tweak
更改plist中Bundles为目标应用的bid
写好基本的启动防反Log便于出现问题寻找,写一段对刚刚函数的简单输出hook。
编译会报错【Showing Recent Messages An empty identity is not valid when signing a binary for the product type ‘】提示我们缺少完整的配置那么,在Building Setting中添加系列配置。
后重新编译即可编译成dylib动态进行注入加载,等待手机重启后打开应用与Log面板。
这就构成了一次完整的简单应用算法逆向过程,当然实际中我们在每个环节肯定都会遇到不同的问题,比如classdump发现失败,因为被抹去了符号表;抓包时失败;动态调试时失败;hook过程失败等等。
在这里我们出了一套非常完整0基础的ios逆向视频教程,欢迎大家的关注。
本次实战直播回放地址:
https://www.bilibili.com/video/BV1pG411M7t6/
可以加作者微信报名进微信学习交流群。
其它学习教程。
原文始发于微信公众号(安全狗的自我修养):ios逆向协议分析实战+直播视频回放