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函数可疑
- 分析步骤:
- 搜索字符串找到拼接的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和动态加载机制
- 具备耐心和细致的分析能力