搭建iOS逆向开发环境 (下) - 越狱设备与高级工具配置
在上一篇文章中,我们介绍了iOS逆向工程的基础环境搭建和核心工具链的安装。正如预告的那样,本篇将继续深入探讨环境搭建的更高级部分,包括越狱设备的配置、远程连接工具、网络分析环境以及如何将这些工具整合成一个完整的工作流程。
为什么需要越狱设备?
在开始正式配置之前,让我们先理解为什么越狱设备在iOS逆向工程中如此重要:
- 文件系统完整访问:越狱后可以访问iOS的整个文件系统,包括应用沙盒和系统文件
- 代码注入能力:允许向运行中的应用注入代码,实现功能修改和动态分析
- 系统API无限制:绕过iOS的API限制,使用私有API和系统功能
- 特权工具运行:运行需要root权限的分析工具和调试器
- 绕过系统安全机制:暂时解除代码签名、沙盒等安全限制
虽然部分逆向分析工作可以在非越狱设备上完成,但越狱设备提供了无与伦比的灵活性和分析深度。
选择合适的设备和iOS版本
并非所有iOS设备和版本都适合用于逆向工程,以下是选择合适设备的建议:
1. 设备型号选择
设备类型 | 推荐型号 | 优势 | 劣势 |
---|---|---|---|
iPhone | iPhone 8/X/XR系列 | 性能足够,且有稳定越狱方案 | 较新设备功能多但越狱选择少 |
iPad | iPad (第6/7代) | 屏幕大,方便操作和查看代码 | 部分工具不完全兼容 |
iPod Touch | 第7代 | 体积小,价格相对较低 | 性能较弱,屏幕小 |
建议:优先选择iPhone 8或iPhone X,它们既有足够的性能,又有相对稳定的越狱解决方案。
2. iOS版本选择
选择iOS版本时,需要在"新功能支持"和"越狱稳定性"之间取得平衡:
iOS版本范围 | 越狱工具 | 稳定性 | 特点 |
---|---|---|---|
iOS 14.0 - 14.3 | unc0ver, Taurine | 极高 | 功能丰富,工具支持好 |
iOS 14.4 - 14.8 | checkra1n (A11及以下) | 高 | 部分设备支持,需要计算机 |
iOS 15.0 - 15.1.1 | unc0ver, Taurine | 中 | 部分功能受限 |
iOS 15.4+ | 有限支持 | 低 | 不建议用于逆向学习 |
最佳选择:iOS 14.3是目前逆向工程的最佳选择,既有良好的工具支持,又有稳定的越狱方案。
注意:iOS版本与越狱工具的兼容性经常变化,请在进行越狱前检查最新信息。
设备越狱步骤详解
下面我们将详细介绍如何对iOS设备进行越狱。以iOS 14.3上的iPhone X为例,使用unc0ver越狱工具:
1. 准备工作
备份设备:
- 连接设备到电脑
- 打开Finder(macOS Catalina及以上)或iTunes(较早版本)
- 选择完整备份,并勾选"加密本地备份"选项
- 等待备份完成
其他准备:
- 确保设备电量在50%以上
- 关闭"查找我的iPhone"
- 关闭密码锁定
2. 安装unc0ver
方法一:AltStore安装(推荐)
- 在Mac上下载并安装AltServer:https://altstore.io/
- 启动AltServer(它会出现在菜单栏中)
- 将iPhone连接到Mac,并在iTunes/Finder中信任该设备
- 在AltServer菜单中选择"Install AltStore",然后选择你的设备
- 输入Apple ID和密码(建议使用非主力账号)
- 等待AltStore安装完成
- 在iOS设备上,前往设置 -> 通用 -> 设备管理,信任开发者证书
- 从unc0ver官网(https://unc0ver.dev/)下载最新版本的unc0ver IPA
- 使用AltStore打开unc0ver IPA文件进行安装
方法二:Xcode和开发者账号(备选)
- 下载unc0ver IPA
- 使用工具如iOS App Signer重新签名IPA
- 通过Xcode安装到设备上
3. 执行越狱
- 在设备上打开unc0ver应用
- 点击"设置"按钮,确保以下选项已启用:
- Load Tweaks
- Disable Auto Updates
- Disable Revokes
- 点击"完成"返回主界面
- 点击"越狱"按钮
- 等待越狱过程完成,设备会自动重启
- 重启后,你会看到Cydia应用安装在桌面上
4. 基础设置
安装基础软件源:
- 打开Cydia
- 点击"软件源" -> “编辑” -> “添加”
- 添加以下常用源:
https://build.frida.re // Frida官方源 https://repo.chariz.io // 常用插件 https://repo.packix.com // 实用工具 https://apt.bingner.com // 系统工具
安装必备工具:
- 搜索并安装OpenSSH(用于远程连接)
- 安装Filza File Manager(文件管理器)
- 安装NewTerm(终端)
修改默认密码:
- 打开NewTerm或通过SSH连接设备
- 输入命令:
passwd
(修改root用户密码) - 输入命令:
passwd mobile
(修改mobile用户密码)
默认情况下,iOS设备的root和mobile用户密码都是"alpine",出于安全考虑,必须修改。
设备连接与远程访问
设置远程访问是进行高效逆向工程的关键步骤,它允许我们从电脑直接操作iOS设备:
1. USB连接设置
USB是最稳定的连接方式,特别适合大文件传输和调试:
安装usbmuxd:
brew install usbmuxd
通过USB使用SSH连接:
# 端口转发,将设备的22端口映射到本地2222端口
iproxy 2222 22# 在新终端中连接
ssh root@localhost -p 2222
# 默认密码是alpine,如果已修改则使用新密码
传输文件:
# 从设备复制到电脑
scp -P 2222 root@localhost:/path/on/device/file.txt /path/on/mac/# 从电脑复制到设备
scp -P 2222 /path/on/mac/file.txt root@localhost:/path/on/device/
2. 无线连接设置
无线连接提供了更大的灵活性,但可能受网络环境影响:
设置Wi-Fi连接:
- 确保设备和电脑在同一网络
- 在设备上查看IP地址:设置 -> Wi-Fi -> 点击网络名称旁的(i)图标
- 通过SSH连接:
ssh root@<设备IP地址>
保持SSH连接稳定:
# 在~/.ssh/config中添加以下配置
Host ios-deviceHostName <设备IP地址>User rootServerAliveInterval 30ServerAliveCountMax 3
3. USB与Wi-Fi互转
有时你可能需要在USB和Wi-Fi连接间切换:
从USB切换到Wi-Fi:
- 通过USB连接设备并SSH登录
- 启动SSH服务:
launchctl load /Library/LaunchDaemons/com.openssh.sshd.plist
- 断开USB,通过Wi-Fi连接
从Wi-Fi切换到USB:
直接使用iproxy和USB连接即可
高级分析工具安装与配置
除了基础工具外,以下高级工具能大幅提升逆向分析效率:
1. Cydia Substrate/Substitute
Cydia Substrate或Substitute是iOS上的代码注入框架,是开发Tweak的基础:
安装方法:
- 在大多数越狱工具中已预装
- 如需手动安装,在Cydia中搜索"Cydia Substrate"或"Substitute"
基础配置:
- Substrate默认已配置完成,无需额外设置
- 安装PreferenceLoader以支持插件设置功能
2. Filza文件管理器
Filza是iOS上最强大的文件管理器,支持查看和编辑大多数文件类型:
增强配置:
- 在Filza设置中启用"显示隐藏文件"
- 启用"应用程序管理器"功能
- 设置文本编辑器语法高亮
使用技巧:
- 长按应用图标->点击"i"按钮查看应用信息和目录
- 进入
/var/containers/Bundle/Application/
查看应用包 - 进入
/var/mobile/Containers/Data/Application/
查看应用数据
3. Cycript
Cycript是一个允许在运行时探索和修改Objective-C应用的工具:
安装方法:
# 在Cydia中搜索并安装Cycript
# 或通过命令行安装
apt-get update
apt-get install cycript
基本用法:
# 附加到进程
cycript -p <进程名或PID># 查看应用中的视图层次结构
cy# UIApp.keyWindow.recursiveDescription().toString()# 查看类的所有方法
cy# Object.keys(SomeClass.prototype)# 调用方法
cy# [SomeObject someMethod:argument]
实用脚本:创建~/.cycript/
目录,添加自定义脚本:
// 文件:~/.cycript/common.cy
function printMethods(className) {var count = 0;var methods = [];for(var member in eval(className).prototype) {methods.push(member);count++;}methods.sort();for(var i = 0; i < methods.length; i++) {console.log(methods[i]);}return count + " methods";
}// 在cycript中加载
cy# @import common
4. Reveal
Reveal是一个可视化调试工具,能够实时查看iOS应用的视图层次:
安装步骤:
- 在Mac上下载并安装Reveal:https://revealapp.com/
- 在Cydia中搜索并安装"Reveal Loader"
- 在设置中启用目标应用的Reveal支持
- 在Mac上启动Reveal并连接到设备
使用方法:
- 在Reveal中,点击"File" -> “Connect to…”
- 选择你的设备和应用
- 成功连接后,可以浏览应用的完整视图层次结构
- 选择任意元素查看详细属性
- 可实时修改视图属性并观察效果
5. 网络分析工具
网络分析工具对于理解应用的通信机制非常重要:
5.1 Charles Proxy
Charles是一款功能强大的HTTP代理,可以监控和修改网络请求:
安装步骤:
- 在Mac上下载并安装Charles:https://www.charlesproxy.com/
- 启动Charles,允许它自动配置网络设置
- 在设备上设置代理:
a. 设置 -> Wi-Fi -> 点击连接的网络
b. 滚动到底部,点击"配置代理"
c. 选择"手动",输入Mac的IP地址和Charles的端口(默认8888) - 在设备访问任何网站时,Charles会弹出提示,点击"Allow"
HTTPS解密配置:
- 在Charles中,选择"Help" -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device”
- 按照提示在设备上访问chls.pro/ssl安装证书
- 在设备上,前往设置 -> 通用 -> 关于本机 -> 证书信任设置,启用Charles证书
- 在Charles中,选择"Proxy" -> “SSL Proxying Settings”,添加以下配置:
- Host: *
- Port: 443
5.2 SSL Kill Switch
某些应用使用SSL Pinning技术防止HTTPS流量被解密。SSL Kill Switch可以绕过这一机制:
安装方法:
- 在Cydia中搜索并安装"SSL Kill Switch 2"
- 重启设备或重启目标应用
- 现在Charles应该能够解密之前无法解密的流量
5.3 HTTP Toolkit (替代方案)
如果你需要更现代的替代方案,可以考虑HTTP Toolkit:
配置步骤:
- 在Mac上安装HTTP Toolkit:https://httptoolkit.tech/
- 按照应用内的指南设置设备代理
- 与Charles类似,安装并信任证书
6. BundleIDs查看工具
应用的Bundle ID是逆向工程中的重要标识,以下是查看方式:
从越狱设备查看:
# 列出所有已安装应用的Bundle ID
find /var/containers/Bundle/Application -name Info.plist -exec plutil -p {} \; | grep CFBundleIdentifier
使用AppList:
在Cydia中安装AppList,然后从设置中查看所有应用的Bundle ID。
7. Theos - Tweak开发框架
Theos是最流行的iOS Tweak开发框架,支持直接在设备上或在电脑上开发:
在Mac上安装Theos:
# 安装依赖
brew install dpkg ldid# 克隆Theos仓库
git clone --recursive https://github.com/theos/theos.git $THEOS# 设置环境变量(添加到~/.zshrc或~/.bash_profile)
echo 'export THEOS=~/theos' >> ~/.zshrc
echo 'export PATH=$THEOS/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
创建第一个Tweak项目:
# 创建新项目
nic.pl # 选择iphone/tweak# 编辑Tweak.x文件
# 编辑control文件和Makefile# 编译
make# 安装到设备
make package install THEOS_DEVICE_IP=<设备IP地址>
我们会在后续专门的Tweak开发章节详细介绍Theos的使用方法。
应用获取与分析准备
要进行逆向分析,我们首先需要从设备上提取应用:
1. 应用下载与安装
从App Store安装:
直接在设备上从App Store下载并安装应用。
使用App Store++降级应用(可选):
- 在Cydia中搜索并安装"App Store++"
- 在App Store中长按应用的"获取"或"更新"按钮
- 选择"升级/降级",然后选择需要的版本
2. 应用解密(砸壳)
App Store的应用都经过加密,需要解密后才能分析:
iosdump_391">2.1 使用frida-ios-dump
安装frida-ios-dump:
# 确保已安装Frida
pip3 install frida-tools# 克隆frida-ios-dump
git clone https://github.com/AloneMonkey/frida-ios-dump.git
cd frida-ios-dump
pip3 install -r requirements.txt
在设备上安装Frida:
- 在Cydia中添加源:https://build.frida.re
- 安装Frida
使用frida-ios-dump解密应用:
# 列出设备上的应用
python3 dump.py -l# 解密特定应用
python3 dump.py <应用名称或Bundle ID>
2.2 使用bfdecrypt(替代方法)
如果frida-ios-dump不适用,可以尝试bfdecrypt:
- 在Cydia中搜索并安装"bfdecrypt"
- 在设置中启用目标应用的bfdecrypt
- 打开应用,等待几秒后退出
- 解密后的IPA文件会保存在
/var/mobile/Containers/Data/Application/[UUID]/Documents/
3. 应用传输到Mac
将解密后的应用传到Mac进行分析:
# 通过SCP传输文件
scp -P 2222 root@localhost:/path/to/decrypted.ipa ~/iOSRE/dumps/# 或使用Filza分享功能,通过AirDrop发送
4. 应用分析准备
-
解压IPA文件:
unzip decrypted.ipa -d app_analysis
-
提取头文件:
class-dump -H app_analysis/Payload/App.app/App -o app_analysis/headers
-
查看二进制文件:
otool -L app_analysis/Payload/App.app/App # 查看依赖库 otool -h app_analysis/Payload/App.app/App # 查看Mach-O头信息
-
导入到IDA/Hopper/Ghidra:
将解密的二进制文件导入你选择的反汇编工具。
完整工作流程示例
下面通过一个完整示例,展示iOS逆向工程的基本工作流程:
示例:分析一个简单的计算器应用
-
获取和解密应用:
# 使用frida-ios-dump解密 python3 dump.py "Calculator"
-
解压并提取头文件:
unzip Calculator.ipa -d calculator_analysis class-dump -H calculator_analysis/Payload/Calculator.app/Calculator -o calculator_analysis/headers
-
查找关键类和方法:
# 搜索可能的计算相关类 grep -r "calculate" calculator_analysis/headers grep -r "result" calculator_analysis/headers
-
使用Hopper分析二进制:
加载解密的二进制文件,搜索关键字符串和函数。 -
使用Frida进行动态分析:
创建以下Frida脚本(calculator_hook.js):// 假设CalculationManager是处理计算的类 Interceptor.attach(ObjC.classes.CalculationManager["- calculateResult:withOperator:"].implementation, {onEnter: function(args) {var firstNumber = new ObjC.Object(args[2]).doubleValue();var operator = new ObjC.Object(args[3]).toString();console.log("[+] 计算: " + firstNumber + " " + operator + " ...");this.firstNumber = firstNumber;this.operator = operator;},onLeave: function(retval) {var result = new ObjC.Object(retval).doubleValue();console.log("[+] 结果: " + this.firstNumber + " " + this.operator + " ... = " + result);// 修改结果(例如,总是加1)if (result != 42) {var modifiedResult = result + 1;console.log("[*] 修改结果为: " + modifiedResult);retval.replace(ObjC.classes.NSNumber.numberWithDouble_(modifiedResult));}} });
-
注入并测试:
frida -U -l calculator_hook.js Calculator
-
创建Tweak(可选):
使用Theos创建永久修改:nic.pl # 创建新的Tweak项目
编辑Tweak.x:
%hook CalculationManager - (id)calculateResult:(id)arg1 withOperator:(id)arg2 {id originalResult = %orig;double value = [originalResult doubleValue];return [NSNumber numberWithDouble:(value + 1)]; } %end
-
安装Tweak:
make package install
这个完整流程涵盖了从应用获取、静态分析、动态修改到创建永久Tweak的整个过程。
环境维护与更新
维护一个稳定且最新的逆向工程环境是长期工作的关键:
1. 定期更新工具
# 更新Homebrew和工具
brew update
brew upgrade# 更新Python包
pip3 list --outdated
pip3 install --upgrade frida frida-tools# 更新Theos
cd $THEOS
git pull --rebase
2. 越狱稳定性维护
- 避免安装不兼容或不稳定的插件
- 定期重启设备保持系统稳定
- 谨慎对待越狱工具更新,通常等待社区反馈后再更新
3. 创建环境快照
对于虚拟机环境,建议定期创建快照,以便在出现问题时快速恢复:
# 对于VMware或VirtualBox环境
# 在稳定配置后创建快照
对于物理机器,可以考虑使用Time Machine备份。
4. 文档和笔记管理
建立一个系统化的笔记系统记录:
- 工具安装和配置细节
- 常用命令和参数
- 问题解决方案
- 项目分析记录
推荐使用工具如Notion、Obsidian或简单的Markdown文件管理这些知识。
提高工作效率的脚本和工具
以下是一些提高逆向工程效率的自定义脚本和工具:
1. 应用快速解密脚本
#!/bin/bash
# 文件名: dumper.sh
# 使用方法: ./dumper.sh <应用名称或Bundle ID>if [ -z "$1" ]; thenecho "请提供应用名称或Bundle ID"exit 1
fiecho "正在解密应用: $1"
cd ~/iOSRE/tools/frida-ios-dump
python3 dump.py "$1"echo "正在解压IPA..."
mkdir -p ~/iOSRE/dumps/"$1"
unzip -o *.ipa -d ~/iOSRE/dumps/"$1"echo "正在提取头文件..."
class-dump -H ~/iOSRE/dumps/"$1"/Payload/*.app/* -o ~/iOSRE/dumps/"$1"/headersecho "完成! 文件保存在: ~/iOSRE/dumps/$1"
2. 快速查找特定API使用
#!/bin/bash
# 文件名: find_api.sh
# 使用方法: ./find_api.sh <API名称> <应用目录>if [ -z "$1" ] || [ -z "$2" ]; thenecho "使用方法: $0 <API名称> <应用目录>"exit 1
fiecho "搜索API: $1 在 $2"
echo "头文件中的引用:"
grep -r "$1" "$2/headers" --include="*.h"echo "二进制字符串中的引用:"
strings "$2/Payload/"*.app/* | grep "$1"
3. 批量更新所有工具
#!/bin/bash
# 文件名: update_tools.shecho "===== 更新环境工具 ====="echo "1. 更新Homebrew..."
brew update
brew upgradeecho "2. 更新Python包..."
pip3 list --outdated | tail -n +3 | awk '{print $1}' | xargs -n1 pip3 install --upgradeecho "3. 更新Theos..."
cd $THEOS
git pull --rebaseecho "4. 更新自定义工具..."
cd ~/iOSRE/tools/frida-ios-dump
git pullecho "===== 更新完成 ====="
排错与常见问题解决
在环境搭建和使用过程中,可能会遇到各种问题,这里提供一些常见问题的解决方法:
1. 设备连接问题
问题:无法通过SSH连接到设备
解决方案:
- 确认设备和电脑在同一网络
- 检查设备IP地址是否正确
- 确认OpenSSH已安装并启动
- 尝试重启设备
- 如使用USB连接,检查iproxy是否正确运行
2. 应用解密问题
问题:frida-ios-dump失败或崩溃
解决方案:
- 确保Frida在设备上运行:
frida-ps -U
应能列出进程 - 检查设备和电脑上Frida版本是否匹配
- 尝试使用bfdecrypt作为替代
- 对于特定应用可能需要修改脚本绕过保护
3. 工具兼容性问题
问题:某些工具报错或无法正常工作
解决方案:
- 检查工具是否支持当前macOS版本
- 尝试安装旧版本工具:
brew install --version=X.Y tool_name
- 搜索社区提供的补丁或替代方案
- 考虑使用虚拟机安装特定版本的macOS
4. 越狱稳定性问题
问题:设备频繁崩溃或重启
解决方案:
- 卸载可能不兼容的插件
- 在越狱应用中禁用部分功能
- 在无法解决的情况下,考虑恢复设备并降级到更稳定的iOS版本
总结与下一步
通过本文的详细介绍,我们已经完成了iOS逆向开发环境的全面搭建,包括:
- 越狱设备的选择与配置
- 远程连接工具的安装与使用
- 高级分析工具的配置与调试
- 应用获取与解密的完整流程
- 实际工作流程演示和脚本工具
至此,我们已经拥有了一个完整、强大的iOS逆向工程环境,为后续的实际分析和修改工作打下了坚实基础。记住,工具只是手段,关键是掌握使用这些工具的方法和原理。
一个好的逆向工程师不仅需要了解各种工具的使用,还需要对iOS系统有深入理解,这样才能在分析过程中知道该查找什么,该如何修改。我们在前两篇文章中介绍的iOS系统架构知识,与本文和上一篇介绍的工具环境相结合,已经为你提供了开始iOS逆向工程所需的基本条件。
在下一篇文章中,我们将开始介绍iOS基础开发知识速览,包括Objective-C/Swift基础回顾、iOS应用生命周期以及UI与系统API调用机制等内容。这些基础知识将帮助我们更好地理解iOS应用的工作原理,为后续的逆向分析奠定基础。
如果你在环境搭建过程中遇到任何问题,或者对特定工具有更深入的疑问,欢迎在评论区留言交流!
作者:自学不成才
本文为iOS逆向工程专栏的第4篇文章,版权所有,未经许可请勿转载。