天天看點

iOS逆向工程——非越獄調試

本文以破解遊戲夢幻西遊為例,逐漸講解整個調試流程。

完成整個過程需要準備以下幾個必要工具:

5、一台越獄機器,安裝 cycript 及 openssh;

非必要工具:

注:dumpdecrypted 之是以非必要,是因為一般情況下可以從越獄市場下到已經 decrypted 後的app!如果下到的包不是 decrypted 的,請自行百度 decrypted。

首先我們要解決的問題是,在哪裡注入我們的調試入口。這個定位過程必須要有越獄機器的配合。我們會通過在越獄機器(已安裝應用)上運作 cycript 确定應用視圖層級。

在mac指令行運作:

當 cycript 運作後,就可以通過指令行運作objc代碼:

這裡用到了私有方法 recursivedescription ,會傳回整個層級的描述。

到這,我們定位了主view對應的類,現在我們需要寫點代碼hook這個類。

通過 iosopendev 建立一個dylib工程,把主工程檔案由.m 改為.mm,引入頭檔案 captainhook.h,把主工程檔案.mm替換為以下内容:

這裡做了幾件事:

1、申明了cceaglview 類,并hook了方法 -(id)initwithframe:(struct cgrect)arg1 pixelformat:(id)arg2 depthformat:(unsigned int)arg3 preservebackbuffer:(_bool)arg4 sharegroup:(id)arg5 multisampling:(_bool)arg6 numberofsamples:(unsigned int)arg7 方法; 2、在補始化cceaglview 時,為該view添加子view以及pan手勢響應;

後續我們就可以通過手勢,呼出我們注入的頁面了。

這裡有個小技巧,在cycript下,輸入 [[cceaglview alloc] init ,并按兩下 tab 鍵,cycript會為你聯想方法,你可以把方法清單裡的方法全hook了(事實上我就是這麼做的)

編寫完代碼後運作,這裡注意保證生成的dylib的目标架構包含(armv7&arm64)。

在指令行運作:

如果你的應用包含多個架構支援,那麼yololib會分别為你的每一個架構注入dylib。運作後如下:

看到上面的提示就表示注入完成了。注入的位址是 @executable_path/libjdytest.dylib ,是以最終要把dylib放到和app可執行檔案相同的目錄下。

重簽名需要以下三個東西:

1、libjdytest.dylib,這個是我們已經注入到二進制的動态庫; 2、配對的證書和.mobileprovision檔案; 3、entitlements.plist檔案;

1我們已經生成。2的擷取方式如下:

[2]、建立一個新應用工程,在工程 build-setting 中,把 code signing 的profile和證書指定為開發者證書; [3]、運作起新工程,在product裡點app右鍵,找到app的目錄,在app目錄下有.mobileprovision檔案(第三步其實可以不必做,這麼做是為了保險起見);

entitlement.pist 是用于申明應用權限的檔案,會在簽名中使用到,3的擷取方式如下:

2、按如下模闆生成 entitlement.plist;

以上檔案準備好後,運作如下指令:

運作完後,myfinish.ipa就是我們的最終成果,用itools裝到非越獄的iphone上吧。

這裡簽名需要注意以下兩點:

1、簽名的開發者證書,在鑰匙串中的 屬性->信任->使用此證書時 ,必須要選擇<系統預設>否則簽名不成功; 2、apple worldwide developer relations ca - g2證書同上;

驗證是否正确答名成功使用以下指令:

myfinish.ipa 安裝好後,後續重複以上步驟就可以在自己的面闆上開發功能了。當然我們可以把上面的操作寫成腳本,并儲存為 fastpack.sh,友善快速的簽名和打包,代碼如下。

但這樣遠遠不夠,至少無法快速的進行斷點調試。打開我們之前為了擷取.mobileprofile檔案建立的工程,添加新的target,并改為my(和目标可執行檔案名相同即可)。

在my的build phases中添加run script,run script添加如下腳本:

這裡做了個小trick,在xcode為新工程生成完app後,我們用自己簽名過的app替換了它。是以最終被安裝上手機的是被我們cracked的應用。

cmd+r運作工程試試,哈哈,大功告成。ps:遊戲内的原生log也可以看哦。

附圖:

iOS逆向工程——非越獄調試
iOS逆向工程——非越獄調試
iOS逆向工程——非越獄調試

另附上開發工具dylib的git位址,别忘了改run script中的位址資訊哦!

<a href="[email protected]%3azhiqiang.bzq/my_cracked.git">夢幻西遊開發工具:[email protected]:zhiqiang.bzq/my_cracked.git</a>

用以下指令初始化:

如有不正之處,歡迎指正~!^ ^