iOS逆向之代碼注入

準備工作

  • 已去殼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文件夾中
image.png

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

image.png

雖然現在將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,運行

image.png

假如想繼續玩,可以通過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不會自動生成

image.png

image.png

image.png

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

image.png

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容