準備工作
- 已去殼ipa,重簽運行,可參照iOS逆向之砸殼與重簽
- 下載yololib,往MachO文件的Load_Commonds中注入一個
LC_LOAD_DYLIB
- 下載class-dump,并編譯,將編譯好的二進制文件放到電腦
/usr/bin
,若沒有權限,放置其他目錄請配置~/.base_profile
環境,如放置目錄/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中,會自動添加配置,如下圖所示
雖然現在將framework放入到app包內,但是運行時并沒有加載它,我們知道app在啟動后會根據Load Commonds中的命令執行,所有動態庫的加載都在這里,接下來就是通過yololib
將我們自己創建的這個framework在Load Commonds中插入一條LC_LOAD_DYLD
,使用方式為在RunScript腳本最后添加命令
yololib "$BUILT_PRODUCTS_DIR/D_WeChat.app/WeChat" "Frameworks/CPYHook.framework/CPYHook"
請注意我的app包名與里面的可執行文件不一致,是替換過的,千萬不要寫錯了,執行完之后查看WeChat可執行文件,可以使用MatchOView,或者直接使用終端命令otool。
好了,下面可以試一試,在Framework中隨便添加一個分類+(void)load
,運行
假如想繼續玩,可以通過MethodSwizzle對它原來的方法進行hook做一些事情,在debug分析過程中需要先將它的頭文件導出來,使用class-dump
,終端命令
class-dump -H MachO文件路徑 -o 導出的頭文件存放目錄
代碼注入二:使用dylib
這種方式其實原理和framework
是一樣的,只是需要手動修改一些配置,這里只說幾個需要注意的地方,具體可參數后面的截圖
1.dylib是mac使用的,創建之后需要將dylib的
build Settings
里面的Base SDK改為iOS
2.Signing改為iOS
3.手動添加Copy Files選項,這個xcode不會自動生成
常見錯誤
在將framework/dylib挎貝到app/Frameworks目錄過程中經常會發生沒有成功的現象,運行完提示image not found
,可以多試幾次,另外也可以直接在腳本中執行挎貝,更加有效
修改腳本示例:
PS:再次申明,本人只是出于學習和研究,請不要使用于它途~