題外話:此教程是一篇嚴肅的學(xué)術(shù)探討類文章,僅僅用于學(xué)習(xí)研究,也請讀者不要用于商業(yè)或其他非法途徑上,筆者一概不負責(zé)喲~~
準(zhǔn)備工作
- 非越獄的iPhone手機
- 用PP助手下載: 微信6.6.5(越獄應(yīng)用)
- MachOView
MachOView下載地址:http://sourceforge.net/projects/machoview/
MachOView源碼地址:https://github.com/gdbinit/MachOView
- yololib
yololib下載地址https://github.com/KJCracks/yololib?spm=a2c4e.11153940.blogcont63256.9.5126420eAJpqBD
代碼注入思路:
DYLD會動態(tài)加載Frameworks中所有的動態(tài)庫,那么在Frameworks中加一個自己的動態(tài)庫,然后在自己動態(tài)庫中hook和注入代碼
動態(tài)庫存放的位置:Frameworks

找到可執(zhí)行文件WeChat

用MachOView打開可執(zhí)行文件WeChat,在Load Commands里可以查看到動態(tài)庫



步驟:
1、根據(jù)iOS逆向之自動化重簽名先編譯運行微信,然后新建Framework
TARGETS添加:


2、新建一個WJHook類

3、想實現(xiàn)剛加載就要運行,代碼就要寫在load方法里

4、為工程添加依賴關(guān)系
-
在代碼注入targets的Build Phases中添加Copy Files
image.png -
在Copy Files中選擇Frameworks
image.png -
添加WJHookFrameWork
image.png
5、編譯一下,在app包的位置查看

顯示包內(nèi)容,在Frameworks中查看

由上可知,WJHookFrameWork已經(jīng)加入成功
6、運行,并沒有成功,沒有執(zhí)行l(wèi)oad里的代碼
原因:用MachOView打開可執(zhí)行文件WeChat,在Load Commands找不到WJHookFrameWork
7、將WJHookFrameWork寫入MachO文件
需要用到工具:yololib
因為經(jīng)常會用到這個工具,建議將它放到 /usr/local/bin

- 顯示隱藏文件,可以使用
$defaults write com.apple.finder AppleShowAllFiles -bool true
$KillAll Finder
這條命令來顯示。同時,將 true 改成 false, 就可恢復(fù)隱藏狀態(tài)。- 或者使用快捷鍵 ? + ?? + . 來實現(xiàn)
-
解壓微信越獄包
image.png - 將WeChat.app顯示包內(nèi)容,找到WeChat可執(zhí)行文件
增加執(zhí)行權(quán)限:chmod +x WeChat
- 寫入WeChat可執(zhí)行文件:
yololib WeChat Frameworks/WJHookFrameWork.framework/WJHookFrameWork
"Frameworks/WJHookFrameWork.framework/WJHookFrameWork"路徑是指WJHookFrameWork可執(zhí)行文件的路徑
image.png
-
檢查MachO文件的Load Commands里是否有WJHookFrameWork
image.png
如圖,加入成功。
- 刪除原來的微信-6.6.5(越獄應(yīng)用).ipa,打包Payload
zip -ry WeChat.ipa Payload
將WeChat.ipa放入APP目錄,刪除其他文件夾
image.png
8、運行,成功!

代碼和工具已上傳:https://gitee.com/winjayq/ios_reverse_code_injection






