iOS_逆向工程_6周详细学习计划

iOS 逆向工程学习计划(共 6 周)

适合人群:熟悉 iOS 开发(OC/Swift)但未接触过逆向工程的开发者
学习频率:每天 1 小时


第 1 周:IPA 与 Mach-O 基础

目标: 理解 IPA 结构与 Mach-O 文件,掌握 class-dump 的使用

周一:IPA 与签名机制

周二:Mach-O 文件结构

周三:安装与使用 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 汇编指令

周一:安装与界面介绍

周二:加载 Mach-O 文件并初步分析

  • 打开脱壳后的 App,定位 main 函数
  • 观察入口点调用流程(UIApplicationMain

周三:汇编语法入门(ARM64)

周四:函数调用与返回机制

  • 分析寄存器 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.readUtf8StringNativeFunction 自定义函数调用

周日:复习总结

  • 汇总关键词:hook, Interceptor, objc_msgSend, Frida

第 5 周:协议逆向与反反调试

目标: 掌握 App 协议分析流程,识别反调试行为并绕过

周一:抓包工具配置

周二:网络协议分析

  • 观察请求 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 逆向相关项目


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。