指一种插件或补丁。其作用是在不修改系统或 App 源码的前提下,通过 Hook、注入等方式修改、增强或者定制原有 App 或系统功能的一个小型程序组件。

逆向流程

graph LR
  应用脱壳 --> 去除保护
  去除保护 --> 运行时分析
  运行时分析 --> 静态分析
  静态分析 --> 动态调试
  动态调试 --> Hook测试

<aside> 🌟

静态分析与动态调试相结合、跟踪和分析目标程序的核心代码、理解其设计思路等,从而还原出相似代码

</aside>

步骤 描述
应用脱壳 iOS端App在上线之前会由苹果商店进行FairPlay DRM数字版权加密保护(加壳),因此,要对应用进行分析,就必须先得到解密(脱壳)后的二进制文件。
当然也有一些不在苹果商店上架(如重签名)的App是没有进行加壳的,可以跳过这一步。
去除保护 现在越来越多的App开发人员为了维护自己的关键技术不被侵犯,采用了各式各样的保护技术,如反调试越狱检测混淆等。要想对这类App进行逆向,首先要判断并详细分析其保护代码,在掌握它的运行机制后将其去除。
运行时分析 利用Cycript等工具向目标App中注入代码,从表面现象入手来获取当前的界面布局及控制器,从而定位可疑方法或函数,然后进行各种调用测试,最终定位被逆向功能的入口。
静态分析 可以采用class-dump/Hopper Disassembler先导出头文件来大致扫描一下感兴趣的类名、函数名等。找到感兴趣的函数名后,用Hopper DisassemblerIDA Pro等强大的工具查看其实现方式、交叉引用等。
动态调试 当静态分析无法得到想要的结果(如某函数经过混淆)的时候,就要使用动态调试技术来查看其调用栈,分析其逻辑等。
Hook测试 通过Hook快速梳理类与类之间的调用顺序,修改函数参数、返回值等测试效果,从而找到突破口。

逆向工具

工具名称 用途
Hopper Disassembler 静态分析
IDA Pro 静态分析
Cycript 动态调试脚本语言
LLDB 动态调试脚本语言
Frida 插桩工具包
Theos 插件开发
MonkeyDev 越狱/非越狱开发套件
JBDev 巨魔/插件开发调试套件

应用砸壳

提取头文件

  1. ✅ class-dump
  2. ✅ 使用 Hopper Disassembler 工具 Export Objective-C Header File

UI调试

网络数据包-抓包

加密过程

逆向开发套件

特点/工具 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

Theos

MonkeyDev

JBDev