iOS 逆向工程学习计划(共 6 周)
适合人群:熟悉 iOS 开发(OC/Swift)但未接触过逆向工程的开发者
学习频率:每天 1 小时
第 1 周:IPA 与 Mach-O 基础
目标: 理解 IPA 结构与 Mach-O 文件,掌握 class-dump 的使用
周一:IPA 与签名机制
- 解包 IPA(
.ipa
实际是 zip 格式):unzip YourApp.ipa -d output
- 查看 Info.plist、Payload 目录结构
- 查看签名信息:
codesign -dvv YourApp.app/YourApp
- 📘 推荐文章
周二:Mach-O 文件结构
- 使用 otool 命令查看结构:
otool -hV YourApp otool -L YourApp otool -l YourApp
- 查看段和节:
__TEXT
,__DATA
,LC_LOAD_DYLIB
- 📘 推荐文章
周三:安装与使用 class-dump
- 安装:
brew install class-dump
- 使用:
class-dump -H YourApp -o headers
- 观察生成的头文件结构,找出主 ViewController 类
周四:深入理解 Mach-O
- 使用 MachOView 分析文件结构(GUI 工具)
- 查看 symbol table、imports、exports
周五:iOS App 沙盒结构
- 在模拟器中查找沙盒路径:
~/Library/Developer/CoreSimulator/Devices/
下对应 App - 分析 Documents、Library、tmp 文件夹
周六:综合练习
- 结合 class-dump 和 otool 判断是否加壳,分析主控器类结构
周日:复习总结
- 汇总关键词:IPA、Mach-O、class-dump、沙盒、签名
第 2 周:Hopper 初识与汇编基础
目标: 掌握 Hopper 使用,理解常见 ARM64 汇编指令
周一:安装与界面介绍
- 下载 Hopper Disassembler(官网试用版 https://www.hopperapp.com/)
- 熟悉视图:Hex Dump、CFG、Pseudocode、Symbols
周二:加载 Mach-O 文件并初步分析
- 打开脱壳后的 App,定位
main
函数 - 观察入口点调用流程(
UIApplicationMain
)
周三:汇编语法入门(ARM64)
- 常见指令:
mov
,bl
,adr
,ldr
,str
,ret
- 📘 推荐文章
周四:函数调用与返回机制
- 分析寄存器 X0-X7(传参)、LR(返回地址)
- 用 Hopper 跟踪
-[ViewController viewDidLoad]
函数执行逻辑
周五:伪代码辅助理解
- 将函数切换为伪代码视图
- 对照 class-dump 头文件还原方法实现逻辑
周六:多个函数路径跟踪练习
- 模拟按钮点击流程、delegate 调用链追踪
周日:复习总结
- 汇总关键词:bl, x0-x7, sp, lr, Hopper, Pseudocode
第 3 周:脱壳基础与 dump 工具
目标: 掌握查壳与脱壳流程,使用工具 dump 可执行文件
周一:加壳识别与分析
- 使用 otool 判断壳:
otool -l YourApp | grep cryptid
-
cryptid 1
代表加壳,0
为无壳 - 常见壳:壳云、LINGX、VMProtect
周二:脱壳思路介绍
- 越狱设备或模拟器中运行时 dump
- 推荐工具:frida-ios-dump、dumpdecrypted
周三:Frida 安装与连接设备
- 安装:
pip install frida-tools git clone https://github.com/AloneMonkey/frida-ios-dump
- 连接设备(USB 或 WiFi):
frida-ps -Uai
周四:使用 frida-ios-dump
- 脚本示例:
python dump.py com.target.app
- 生成完整解密的 App 包
周五:Dumpdecrypted 使用方法
- lldb 注入方式:
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib ./YourApp
周六:分析 dump 文件结构
- 使用 class-dump 分析脱壳后的文件头
周日:复习总结
- 汇总关键词:frida, dumpdecrypted, otool, dump
第 4 周:动态调试与函数 HOOK
目标: 掌握通过 Frida 进行函数 Hook 与运行时调试
周一:Frida API 语法
-
Interceptor.attach
基本结构 - 示例:
Interceptor.attach(Module.findExportByName(null, 'open'), { onEnter(args) { console.log('open called with: ' + Memory.readUtf8String(args[0])) } });
周二:Hook Objective-C 方法
- Hook 示例:
ObjC.classes.NSString['stringWithFormat:'].implementation = function(fmt) { console.log('Format: ' + fmt); return this.stringWithFormat_(fmt); }
周三:Hook 加密或网络函数
- 如 AFNetworking 的
AFHTTPRequestSerializer
方法
周四:iOS runtime 核心原理
-
objc_msgSend
、SEL、IMP 概念 - 使用 Frida hook
objc_msgSend
打印调用堆栈
周五:Objection 快速注入调试
- 使用命令:
objection -g AppName explore
- 使用
ios hooking watch class
自动追踪类方法
周六:进阶调试技巧
- 使用
Memory.readUtf8String
、NativeFunction
自定义函数调用
周日:复习总结
- 汇总关键词:hook, Interceptor, objc_msgSend, Frida
第 5 周:协议逆向与反反调试
目标: 掌握 App 协议分析流程,识别反调试行为并绕过
周一:抓包工具配置
- Charles 或 mitmproxy
- iOS 安装证书 & 设为可信
- 官网:
周二:网络协议分析
- 观察请求 URL、header、body、加密字段
- 重点分析签名(如 sign、token)
周三:常见反调试方式识别
-
ptrace
,sysctl
,isatty
,getppid
- 使用 Frida Hook 绕过:
var ptrace = Module.findExportByName(null, "ptrace"); Interceptor.replace(ptrace, new NativeCallback(function() { return 0; }, 'int', ['int', 'pointer', 'int', 'pointer']));
周四:自动化脚本替换参数测试
- 结合 curl/postman 重放接口
周五:分析加密参数构造逻辑
- 追踪参数来源与加密函数
周六:综合练习
- 分析抖音极速版或其他热门 App 的网络协议与防护手段
周日:复习总结
- 汇总关键词:mitmproxy、签名字段、ptrace、反调试
第 6 周:完整案例实战与总结
目标: 综合运用 5 周知识,完成一个逆向分析项目
周一:选定 App
- 推荐案例:抖音极速版、豆瓣开源客户端
周二:class-dump 与 Hopper 分析
- 还原架构,识别控制器入口,分析功能点
周三:Frida Hook 用户操作逻辑
- Hook 登录按钮点击、参数打印
周四:抓包分析登录逻辑
- 抓取登录接口、观察参数加密
周五:构造登录请求
- 使用 Postman 模拟完整登录流程
周六:撰写逆向报告
- 模板:App 结构、调用链、加解密流程、Hook 点
周日:全面回顾
- 记录已掌握/未掌握点,制定进阶目标
配套资源推荐
1. 视频课程推荐
- Bilibili: 搜索“iOS逆向入门与进阶”系列
- 极客时间:《iOS安全与逆向工程》付费课程
- 慕课网 / 腾讯课堂等平台搜索“iOS逆向”相关课程
2. GitHub 逆向相关项目
- frida-ios-dump — iOS Dump 工具,实操脱壳必备
- frida — 动态注入工具官方仓库
- objection — 逆向调试辅助工具
- class-dump — 头文件导出工具