指一种插件或补丁。其作用是在不修改系统或 App 源码的前提下,通过 Hook、注入等方式修改、增强或者定制原有 App 或系统功能的一个小型程序组件。
graph LR
应用脱壳 --> 去除保护
去除保护 --> 运行时分析
运行时分析 --> 静态分析
静态分析 --> 动态调试
动态调试 --> Hook测试
<aside> 🌟
静态分析与动态调试相结合、跟踪和分析目标程序的核心代码、理解其设计思路等,从而还原出相似代码
</aside>
| 步骤 | 描述 |
|---|---|
| 应用脱壳 | iOS端App在上线之前会由苹果商店进行FairPlay DRM数字版权加密保护(加壳),因此,要对应用进行分析,就必须先得到解密(脱壳)后的二进制文件。 |
| 当然也有一些不在苹果商店上架(如重签名)的App是没有进行加壳的,可以跳过这一步。 | |
| 去除保护 | 现在越来越多的App开发人员为了维护自己的关键技术不被侵犯,采用了各式各样的保护技术,如反调试、越狱检测、混淆等。要想对这类App进行逆向,首先要判断并详细分析其保护代码,在掌握它的运行机制后将其去除。 |
| 运行时分析 | 利用Cycript等工具向目标App中注入代码,从表面现象入手来获取当前的界面布局及控制器,从而定位可疑方法或函数,然后进行各种调用测试,最终定位被逆向功能的入口。 |
| 静态分析 | 可以采用class-dump/Hopper Disassembler先导出头文件来大致扫描一下感兴趣的类名、函数名等。找到感兴趣的函数名后,用Hopper Disassembler、IDA Pro等强大的工具查看其实现方式、交叉引用等。 |
| 动态调试 | 当静态分析无法得到想要的结果(如某函数经过混淆)的时候,就要使用动态调试技术来查看其调用栈,分析其逻辑等。 |
| Hook测试 | 通过Hook快速梳理类与类之间的调用顺序,修改函数参数、返回值等测试效果,从而找到突破口。 |
| 工具名称 | 用途 |
|---|---|
| Hopper Disassembler | 静态分析 |
| IDA Pro | 静态分析 |
| Cycript | 动态调试脚本语言 |
| LLDB | 动态调试脚本语言 |
| Frida | 插桩工具包 |
| Theos | 插件开发 |
| MonkeyDev | 越狱/非越狱开发套件 |
| JBDev | 巨魔/插件开发调试套件 |
class-dumpHopper Disassembler 工具 Export Objective-C Header File| 特点/工具 | Theos | MonkeyDev | JBDev |
|---|---|---|---|
| 用途 | iOS 越狱插件(Tweak)、工具的开发 | 支持非越狱 iOS 应用逆向与开发 | iOS 越狱插件和应用开发 |
| 适用对象 | 主要针对越狱环境 | 支持越狱和非越狱,两者兼容 | 主要针对越狱环境 |
| 开发语言 | Objective-C, Logos, C/C++ | Objective-C, C, Logos | Objective-C, Logos, C |
| 工程结构 | 命令行创建工程,结构较简单 | 基于 Xcode 工程模板,结构和 UI 友好 | 命令行,但集成更多自动化脚本,结构灵活 |
| 集成环境 | 命令行 | Xcode 图形化 | 命令行 |
| 自动化/易用性 | 手动配置,部分自动化 | 高度自动化,集成脚本方便打包和安装 | 自动化脚本,易于批量集成 |
| 代码注入方式 | Logos 语法 | 支持 Logos 语法,支持 Fishhook、动态库注入等多种类型 | Logos 语法 |
| 调试能力 | 借助 LLDB/GDB 调试,较为原始 | 支持 Xcode Debug、模拟器调试,并可便捷打包 | 支持 Xcode Debug、模拟器调试。 |
| 主要用于什么 | Tweak(插件)、Dylib | 逆向 APP、Hook 操作演示、自动安装签名等 | 插件开发,同时也适合自动化批量 Tweak 开发 |
| 适用人群 | 越狱开发者 | 初学者、逆向研究者、插件开发者 | 越狱开发者、批量插件制作者 |
| 活跃度/社区 | 最老牌社区,资料丰富 | 后起之秀,活跃且社区快速发展 | 新兴但实用,脚本化能力强 |
| 平台支持 | macOS, Linux | macOS | macOS, Linux |