ios逆向整理
字数 1453 2025-08-29 22:41:24

iOS逆向分析技术详解

一、基础逆向流程

1. 文件处理

  • 将ipa文件后缀改为zip
  • 解压后进入Payload目录
  • 找到.app文件夹中的二进制文件
  • 使用IDA等工具分析二进制文件

2. 分析方法

  • 直接搜索字符串并交叉引用找到关键函数
  • 分析main函数通常用处不大
  • 重点关注可疑函数(如revealFlag等)

二、Swift逆向特点

Swift逆向分析时需要注意:

  • Swift代码风格类似C++
  • 常见关键调用:
    • obfuscatedFlag.unsafeMutableAddressor():从obfuscatedFlag获取flag密文
    • Collection.map<A>(_:)(closure #1 in revealFlag(if:), ...):对String类型调用map,对每个加密字符应用解密函数
    • Character.asciiValue.getter():获取字符的ASCII值
    • UnsigedInteger<>.init<A>(_:)(&v15, ...):可能涉及内存操作,如字符ASCII值减1

三、典型题目分析

1. 2025数字中国app赛道IOSApp

  • 题目描述:安全审计发现revealFlag函数可疑
  • 分析步骤:
    1. 搜索字符串找到拼接的base64
    2. 分析revealFlag函数
    3. 发现每个字符ASCII值减1的解密方式

2. 2024ByteCTF极限逃脱

  • 分析步骤:
    1. 使用010 Editor查看格式,修改后缀解压
    2. 搜索字符串发现flag格式
    3. 发现UUID格式字符串但直接提交不对
    4. 字符串交叉引用找到关键函数
    5. 分析发现:
    • 从内存加载self
    • 输入直接是最终flag
    • 使用SHA256加密后取子串
    • 各段替换后组成flag
    1. 最终flag格式:ByteCTF{c9838b3c-6810-8a3d-8a3c-8a3c6810bdb2}

3. 2017iOS CTF

  • 分析步骤:
    1. 根据string两次交叉引用找到关键函数
    2. 输入密码与self->plain比较,要求:
    • 长度32
    • 相等且self->fg为0则missed
    1. self->plain从secret.txt读取并base64解密
    2. 输入需与pd前16位相等
    3. 分析generate方法:
    • 被deb里的lib文件hook
    • 无环境时直接分析程序
    • 获取并加载图片
    • 取前32字节中奇数下标字节
    • 前16字符替换成混淆后的v10
    • 后16位相互异或+5等于密文key
    • 密文只有14位,猜测重复部分
    • 超出部分用flag包裹
    1. 最终flag:flag{by_7he0s_ho0k_ls_3asy_23333333:)}

四、工具使用

  • IDA:主要逆向分析工具
  • Hopper:专门针对iOS逆向的工具
  • 010 Editor:文件格式分析
  • 动态分析
    • 将dylib拷贝到/Library/MobileSubstrate/DynamicLibraries/目录下
    • 让程序运行时加载

五、常见技巧

  1. 字符串分析:直接搜索字符串并交叉引用
  2. 加密分析
    • 常见ASCII值加减操作
    • 异或操作
    • SHA256等哈希算法
  3. Hook检测:注意被hook的方法
  4. 内存操作:关注内存中数据的加载和处理
  5. 文件读取:注意从文件(如secret.txt)读取关键数据

六、总结

iOS逆向分析需要:

  1. 熟悉文件结构和处理流程
  2. 掌握Swift逆向特点
  3. 熟练使用逆向工具
  4. 理解常见加密和混淆方式
  5. 能够分析hook和动态加载机制
  6. 具备耐心和细致的分析能力
iOS逆向分析技术详解 一、基础逆向流程 1. 文件处理 将ipa文件后缀改为zip 解压后进入Payload目录 找到.app文件夹中的二进制文件 使用IDA等工具分析二进制文件 2. 分析方法 直接搜索字符串并交叉引用找到关键函数 分析main函数通常用处不大 重点关注可疑函数(如revealFlag等) 二、Swift逆向特点 Swift逆向分析时需要注意: Swift代码风格类似C++ 常见关键调用: obfuscatedFlag.unsafeMutableAddressor() :从obfuscatedFlag获取flag密文 Collection.map<A>(_:)(closure #1 in revealFlag(if:), ...) :对String类型调用map,对每个加密字符应用解密函数 Character.asciiValue.getter() :获取字符的ASCII值 UnsigedInteger<>.init<A>(_:)(&v15, ...) :可能涉及内存操作,如字符ASCII值减1 三、典型题目分析 1. 2025数字中国app赛道IOSApp 题目描述:安全审计发现revealFlag函数可疑 分析步骤: 搜索字符串找到拼接的base64 分析revealFlag函数 发现每个字符ASCII值减1的解密方式 2. 2024ByteCTF极限逃脱 分析步骤: 使用010 Editor查看格式,修改后缀解压 搜索字符串发现flag格式 发现UUID格式字符串但直接提交不对 字符串交叉引用找到关键函数 分析发现: 从内存加载self 输入直接是最终flag 使用SHA256加密后取子串 各段替换后组成flag 最终flag格式: ByteCTF{c9838b3c-6810-8a3d-8a3c-8a3c6810bdb2} 3. 2017iOS CTF 分析步骤: 根据string两次交叉引用找到关键函数 输入密码与self->plain比较,要求: 长度32 相等且self->fg为0则missed self->plain从secret.txt读取并base64解密 输入需与pd前16位相等 分析generate方法: 被deb里的lib文件hook 无环境时直接分析程序 获取并加载图片 取前32字节中奇数下标字节 前16字符替换成混淆后的v10 后16位相互异或+5等于密文key 密文只有14位,猜测重复部分 超出部分用flag包裹 最终flag: flag{by_7he0s_ho0k_ls_3asy_23333333:)} 四、工具使用 IDA :主要逆向分析工具 Hopper :专门针对iOS逆向的工具 010 Editor :文件格式分析 动态分析 : 将dylib拷贝到/Library/MobileSubstrate/DynamicLibraries/目录下 让程序运行时加载 五、常见技巧 字符串分析 :直接搜索字符串并交叉引用 加密分析 : 常见ASCII值加减操作 异或操作 SHA256等哈希算法 Hook检测 :注意被hook的方法 内存操作 :关注内存中数据的加载和处理 文件读取 :注意从文件(如secret.txt)读取关键数据 六、总结 iOS逆向分析需要: 熟悉文件结构和处理流程 掌握Swift逆向特点 熟练使用逆向工具 理解常见加密和混淆方式 能够分析hook和动态加载机制 具备耐心和细致的分析能力