準備工作
- 已去殼ipa,重簽運行,可參照iOS逆向之砸殼與重簽
- 下載yololib,往MachO文件的Load_Commonds中注入一個
LC_LOAD_DYLIB - 下載class-dump,并編譯,將編譯好的二進制文件放到電腦
/usr/bin,若沒有權限,放置其他目錄請配置~/.base_profile環(huán)境,如放置目錄/Users/somebody/mybin中,那么profile中添加
export PATH=/Users/somebody/mybin:$PATH
或定義一個別名
alias class-dump=/Users/somebody/mybin
代碼注入一:使用Framework
- 在工程TARGETS點擊
+添加一個Framework,命名隨意,如CPYHook -
build會自動將生成的framework存放在app文件的Frameworks文件夾中

因為在xcode中,會自動添加配置,如下圖所示

雖然現(xiàn)在將framework放入到app包內,但是運行時并沒有加載它,我們知道app在啟動后會根據(jù)Load Commonds中的命令執(zhí)行,所有動態(tài)庫的加載都在這里,接下來就是通過yololib將我們自己創(chuàng)建的這個framework在Load Commonds中插入一條LC_LOAD_DYLD,使用方式為在RunScript腳本最后添加命令
yololib "$BUILT_PRODUCTS_DIR/D_WeChat.app/WeChat" "Frameworks/CPYHook.framework/CPYHook"
請注意我的app包名與里面的可執(zhí)行文件不一致,是替換過的,千萬不要寫錯了,執(zhí)行完之后查看WeChat可執(zhí)行文件,可以使用MatchOView,或者直接使用終端命令otool。

好了,下面可以試一試,在Framework中隨便添加一個分類+(void)load,運行

假如想繼續(xù)玩,可以通過MethodSwizzle對它原來的方法進行hook做一些事情,在debug分析過程中需要先將它的頭文件導出來,使用class-dump,終端命令
class-dump -H MachO文件路徑 -o 導出的頭文件存放目錄
代碼注入二:使用dylib
這種方式其實原理和framework是一樣的,只是需要手動修改一些配置,這里只說幾個需要注意的地方,具體可參數(shù)后面的截圖
1.dylib是mac使用的,創(chuàng)建之后需要將dylib的
build Settings里面的Base SDK改為iOS
2.Signing改為iOS
3.手動添加Copy Files選項,這個xcode不會自動生成



常見錯誤
在將framework/dylib挎貝到app/Frameworks目錄過程中經(jīng)常會發(fā)生沒有成功的現(xiàn)象,運行完提示image not found,可以多試幾次,另外也可以直接在腳本中執(zhí)行挎貝,更加有效
修改腳本示例:

PS:再次申明,本人只是出于學習和研究,請不要使用于它途~