搭建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:
bash
复制代码
brew install usbmuxd
通过USB使用SSH连接:
bash
复制代码
# 端口转发,将设备的22端口映射到本地2222端口
iproxy 2222 22
# 在新终端中连接
ssh root@localhost -p 2222
# 默认密码是alpine,如果已修改则使用新密码
传输文件:
bash
复制代码
# 从设备复制到电脑
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连接:
bash
复制代码
ssh root@<设备IP地址>
保持SSH连接稳定:
bash
复制代码
# 在~/.ssh/config中添加以下配置
Host ios-device
HostName <设备IP地址>
User root
ServerAliveInterval 30
ServerAliveCountMax 3
3. USB与Wi-Fi互转
有时你可能需要在USB和Wi-Fi连接间切换:
从USB切换到Wi-Fi:
通过USB连接设备并SSH登录
启动SSH服务:
bash
复制代码
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应用的工具:
安装方法:
bash
复制代码
# 在Cydia中搜索并安装Cycript
# 或通过命令行安装
apt-get update
apt-get install cycript
基本用法:
bash
复制代码
# 附加到进程
cycript -p <进程名或PID>
# 查看应用中的视图层次结构
cy# UIApp.keyWindow.recursiveDescription().toString()
# 查看类的所有方法
cy# Object.keys(SomeClass.prototype)
# 调用方法
cy# [SomeObject someMethod:argument]
实用脚本 :创建~/.cycript/目录,添加自定义脚本:
javascript
复制代码
// 文件:~/.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是逆向工程中的重要标识,以下是查看方式:
从越狱设备查看:
bash
复制代码
# 列出所有已安装应用的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:
bash
复制代码
# 安装依赖
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项目:
bash
复制代码
# 创建新项目
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的应用都经过加密,需要解密后才能分析:
2.1 使用frida-ios-dump
安装frida-ios-dump:
bash
复制代码
# 确保已安装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解密应用:
bash
复制代码
# 列出设备上的应用
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进行分析:
bash
复制代码
# 通过SCP传输文件
scp -P 2222 root@localhost:/path/to/decrypted.ipa ~/iOSRE/dumps/
# 或使用Filza分享功能,通过AirDrop发送
4. 应用分析准备
解压IPA文件:
bash
复制代码
unzip decrypted.ipa -d app_analysis
提取头文件:
bash
复制代码
class-dump -H app_analysis/Payload/App.app/App -o app_analysis/headers
查看二进制文件:
bash
复制代码
otool -L app_analysis/Payload/App.app/App # 查看依赖库
otool -h app_analysis/Payload/App.app/App # 查看Mach-O头信息
导入到IDA/Hopper/Ghidra :
将解密的二进制文件导入你选择的反汇编工具。
完整工作流程示例
下面通过一个完整示例,展示iOS逆向工程的基本工作流程:
示例:分析一个简单的计算器应用
获取和解密应用:
bash
复制代码
# 使用frida-ios-dump解密
python3 dump.py "Calculator"
解压并提取头文件:
bash
复制代码
unzip Calculator.ipa -d calculator_analysis
class-dump -H calculator_analysis/Payload/Calculator.app/Calculator -o calculator_analysis/headers
查找关键类和方法:
bash
复制代码
# 搜索可能的计算相关类
grep -r "calculate" calculator_analysis/headers
grep -r "result" calculator_analysis/headers
使用Hopper分析二进制 :
加载解密的二进制文件,搜索关键字符串和函数。
使用Frida进行动态分析 :
创建以下Frida脚本(calculator_hook.js):
javascript
复制代码
// 假设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));
}
}
});
注入并测试:
bash
复制代码
frida -U -l calculator_hook.js Calculator
创建Tweak(可选) :
使用Theos创建永久修改:
bash
复制代码
nic.pl # 创建新的Tweak项目
编辑Tweak.x:
objective-c
复制代码
%hook CalculationManager
- (id)calculateResult:(id)arg1 withOperator:(id)arg2 {
id originalResult = %orig;
double value = [originalResult doubleValue];
return [NSNumber numberWithDouble:(value + 1)];
}
%end
安装Tweak:
bash
复制代码
make package install
这个完整流程涵盖了从应用获取、静态分析、动态修改到创建永久Tweak的整个过程。
环境维护与更新
维护一个稳定且最新的逆向工程环境是长期工作的关键:
1. 定期更新工具
bash
复制代码
# 更新Homebrew和工具
brew update
brew upgrade
# 更新Python包
pip3 list --outdated
pip3 install --upgrade frida frida-tools
# 更新Theos
cd $THEOS
git pull --rebase
2. 越狱稳定性维护
避免安装不兼容或不稳定的插件
定期重启设备保持系统稳定
谨慎对待越狱工具更新,通常等待社区反馈后再更新
3. 创建环境快照
对于虚拟机环境,建议定期创建快照,以便在出现问题时快速恢复:
bash
复制代码
# 对于VMware或VirtualBox环境
# 在稳定配置后创建快照
对于物理机器,可以考虑使用Time Machine备份。
4. 文档和笔记管理
建立一个系统化的笔记系统记录:
工具安装和配置细节
常用命令和参数
问题解决方案
项目分析记录
推荐使用工具如Notion、Obsidian或简单的Markdown文件管理这些知识。
提高工作效率的脚本和工具
以下是一些提高逆向工程效率的自定义脚本和工具:
1. 应用快速解密脚本
bash
复制代码
#!/bin/bash
# 文件名: dumper.sh
# 使用方法: ./dumper.sh <应用名称或Bundle ID>
if [ -z "$1" ]; then
echo "请提供应用名称或Bundle ID"
exit 1
fi
echo "正在解密应用: $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"/headers
echo "完成! 文件保存在: ~/iOSRE/dumps/$1"
2. 快速查找特定API使用
bash
复制代码
#!/bin/bash
# 文件名: find_api.sh
# 使用方法: ./find_api.sh
if [ -z "$1" ] || [ -z "$2" ]; then
echo "使用方法: $0
exit 1
fi
echo "搜索API: $1 在 $2"
echo "头文件中的引用:"
grep -r "$1" "$2/headers" --include="*.h"
echo "二进制字符串中的引用:"
strings "$2/Payload/"*.app/* | grep "$1"
3. 批量更新所有工具
bash
复制代码
#!/bin/bash
# 文件名: update_tools.sh
echo "===== 更新环境工具 ====="
echo "1. 更新Homebrew..."
brew update
brew upgrade
echo "2. 更新Python包..."
pip3 list --outdated | tail -n +3 | awk '{print $1}' | xargs -n1 pip3 install --upgrade
echo "3. 更新Theos..."
cd $THEOS
git pull --rebase
echo "4. 更新自定义工具..."
cd ~/iOSRE/tools/frida-ios-dump
git pull
echo "===== 更新完成 ====="
排错与常见问题解决
在环境搭建和使用过程中,可能会遇到各种问题,这里提供一些常见问题的解决方法:
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篇文章,版权所有,未经许可请勿转载。