| iPhone手機越獄 | 逆向砸殼 | 代碼注入 |
|---|---|---|
|
|
|
一、iPhone手機越獄
1. 工具下載
目前13以上系統還沒有完美越獄的方案,可以臨時使用checkra1n方案對手機進行越獄:
下載地址: 點我下載
直接安裝即可

2. 操作越獄
打開checkra1n

點擊start按引導設置手機進入恢復模式


仔細看下步驟說明,再點start設置手機進入DFU模式

開始自動越獄進程

越獄成功后,手機上會多出checkra1n和Cydia兩個app

注意: 非完美越獄手機重啟后會失效,如果手機重啟了需要重新越獄一次
二、逆向砸殼
1. 安裝待逆向應用(app)
把待逆向的app安裝到手機上(例如: 小愛同學), 並打開應用(需保持應用在前台開啟狀態)
2. 使用OpenSSH連接手機
在Cydia中下載安裝OpenSSH

查看手機ip地址: xxx.xxx.xxx.xxx
打開終端,使用ssh命令連接手機:
ssh root@xxx.xxx.xxx.xxx(ip)
默認密碼是: alpine
示例:
3. 找到應用二進制文件地址
在ssh連接中使用指令查詢應用二進制文件地址:
ps -e | grep XiaoAiLite
運行示例:

記錄下應用二進制文件地址,后面會用到
4. 找到應用document沙盒地址
在ssh連接中使用cycript注入目標進程:
cycript -p XiaoAiLite
示例:

如果提示找不到cycript指令,到cydia搜索安裝一下
ssh連接中使用OC代碼查詢沙盒地址:
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]
示例:

記錄下應用document沙盒地址,后面會用到
5. 拷貝砸殼工具(dumpdecrypt.dylib)到document目錄
下載dumpdecrypted源碼: https://github.com/stefanesser/dumpdecrypted
打開一個新的終端進入dumpdecrypted源碼路徑,使用make指令進行編譯

檢查有生成: dumpdecrypted.dylib文件
對生成的dylib文件簽名
打開電腦上的鑰匙串,找到自己的開發者證書, 復制證書名稱(一般證書名稱格式: "Mac Developer: 你的開發者郵箱")

在終端中使用codesign指令對dumpdecrypted.dylib文件進行簽名:
codesign -f -s "證書名稱(一般證書名稱格式: "Mac Developer: 你的開發者郵箱")" dumpdecrypted.dylib
在終端中使用scp指令將簽名后的dumpdecrypted.dylib文件拷貝到應用沙盒目錄
scp dumpdecrypted.dylib root@10.224.202.59://var/mobile/Containers/Data/Application/DB5D7297-CCE6-4275-866F-4EC04F4A55FC/Documents
示例:

6. 砸殼
(如果還在cycript交互環境,用ctrl+z退出到root連接)
在ssh連接中使用以下指令進行砸殼
DYLD_INSERT_LIBRARIES=應用documents沙盒路徑/dumpdecrypted.dylib 應用二進制路徑
例如:
DYLD_INSERT_LIBRARIES=/var/mobile/Containers/Data/Application/323F1DF8-E8E8-48DC-911B-56DDBEAD25A0/Documents/dumpdecrypted.dylib /var/containers/Bundle/Application/35DE68F0-52C1-47B9-8D19-0C711BB78AB9/XiaoAiLite.app/XiaoAiLite
示例:

砸殼成功后root路徑下會生成一個xxx.decrypted文件(這里我們生成的是: XiaoAiLite.decrypted)
可以在ssh連接中使用ls指令檢查是否有生成:

使用scp將生成的XiaoAiLite.decrypted拷貝到電腦上
scp root@10.224.202.59:/var/root/XiaoAiLite.decrypted /Users/zhouxi/Documents/Xiaomi/Code/utils/dumpdecrypted
示例:

7. 使用class-dump導出頭文件
安裝class-dump
下載class-dump.dmg文件, 下載地址: http://stevenygard.com/projects/class-dump/
打開class-dump.dmg,將的class-dump文件拷貝到電腦的/usr/local/bin目錄下
在終端輸入class-dump檢查可以顯示class-dump幫助信息

在之前拷貝的XiaoAiLite.decrypted文件統計目錄創建一個Headers文件夾
在終端中使用class-dump指令導出頭文件:
class-dump -H XiaoAiLite.decrypted -o Headers
示例:

在Headers文件夾中查看導出的頭文件

三、代碼注入
1. Theos安裝與配置
安裝Theos之前需要安裝dpkg、fakerroot、ldid三個依賴庫, 安裝指令如下
brew install ldid
brew install fakeroot
brew install dpkg
打開終端進入/opt路徑, 如果根目錄沒有opt目錄就新建一個
cd /opt
在opt目錄clone Theos源碼
sudo git clone --recursive https://github.com/theos/theos.git
修改權限
sudo chown -R $(id -u):$(id -g) theos
終端中修改環境變量
vi ~/.bash_profile
添加一下兩行
export THEOS=/opt/theos
export PATH=/opt/theos/bin/:$PATH
啟用配置文件
source ~/.bash_profile
2. 創建tweak逆向工程
打開終端進入要存放工程的目錄,執行Theos創建項目指令:
nic.pl
示例:

選擇iPhone/tweak, 輸入: 15
然后依次輸入ProjectName/PackageName/AuthorName/目標BundleID/目標二進制文件名

3. Tweak工程配置
Tweak工程包含HookXiaoai.plist、Makefile、Tweak.x、control四個文件

control文件記錄基本信息,可以按需要修改或者添加,比如加上公司主頁或者博客地址

HookXiaoai.plist文件記錄Hook目標應用的bundleID

Makefile是編譯腳本

使用指令查詢mac上iOS SDK版本:
xcodebuild -showsdks
示例:

添加SDKVERSION信息
SDKVERSION = 12.1
查看設備ip, 添加THEOS_DEVICE_IP信息
THEOS_DEVICE_IP = 10.224.202.59
修改后的makefile文件內容

備注: 如果需要自己配置指令集可以按需要添加指令集信息:
ARCHS = armv7 armv7s arm64
Tweak.x文件是編寫注入代碼用
4. 編寫注入代碼
代碼注入的方式是從導出的頭文件中找到需要Hook的方法,修改或者注入自己的邏輯
代碼的寫法可以看下Tweak.x文件里面的說明

這里以Hook AppDelegate中的
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
為例子,我們加一個彈窗, 以下是代碼
%hook AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { BOOL awesome = %orig; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"你的程序被篡改啦!!!" delegate:nil cancelButtonTitle:@"好" otherButtonTitles:nil]; [alert show]; return awesome; } %end
執行編譯指令: make

執行打包指令: make package

執行安裝指令: make install

安裝過程中需要輸入密碼, 默認是alpine
如果一切正常,打開app后會出現一個彈窗

