最近有一个需求涉及到逆向相关的知识,于是进一步了解下相关,同时笔记记录下,其中核心流程是:应用砸壳 -> 静态/动态分析 -> 代码注入 -> 打包重签名,最核心的是静态分析和动态调试的咯。
一、获取已经去壳的可执行文件
1-1、通过越狱手机获取到的 iPA 砸壳
1-2、或是直接获取到已经去壳的,可通过 PP 助手之类的(不过我最近下的 Mac 版本一直闪退)
- 可通过
otool -l 可执行文件 | grep crypt
中的结果,cryptid 判断(有壳为1,无壳为0) - PS: 可执行文件,可以通过解压 ipa 文件,然后通过显示包内容看到的。
二、静态分析
- class-dump: 导出所有类的头文件,可以在其中看到类名、公有属性
- IDA: 反编译工具,可以把机器代码反编译成汇编代码
三、动态调试
- Reveal: UI 层级解析工具,可以像Xcode一样,解析展示APP的UI层级结构
- Cycript: 强大的动态调试工具,可以在APP运行的时候,对APP执行查看、改动操作
- LLDB: 苹果自己提供的动态调试工具, 方便调试
四、代码注入
- Hook 方法的使用
- Framework 或者 dylib 的注入
可具体参考李斌同学的文章,真的很详细:
五、 重签名
-
iOS-App-Signer
这个工具我一直在使用,确实很方便的
六、 逆向反思
6-1、反逆向相关
- 编写阶段:对一些功能采用C语言、汇编语言等静态语言编写
- 编译阶段混淆:代码混淆、硬编码混淆、资源文件混淆、汇编混淆等
- 运行阶段逆向检测:越狱环境检测、重签多开检测等
- 运行阶段功能限制:代码开关、封号、封手机等
6-2、学习点
- 畏惧心态
- 底层知识的了解
七、End
类型如下字眼
- dumpdecrypted
- class-dump
- IDA
- Reveal
- theos
- insert_dylib
- yololib
本篇记录主要是了解和眼熟些工具, 在真正操作的时候可以得心应手的,目前个人只实战了一个小功能。