-
簡介
- 代碼注入:靜態注入、動態注入 動態庫dylib
- 其實是修改MacO文件,展開 Load Commands
- 在Frameworks 里添加一個動態庫,Hook.Frameworks,加入MacO文件中
- yololib庫:注入 MachO 文件,修改了此文件,簽名被破壞了,Xcode 重新簽名整個 App
// 請先看以下兩篇文章
iOS逆向-RSA的使用-證書簽名、代碼簽名(手動簽名、腳本自動簽名 《一》)
iOS逆向-RSA的使用:代碼簽名(手動簽名、腳本自動簽名 《二》)
-
代碼注入的過程
- 準備工作:
1.1新建一個工程;在工程里新建兩個文件夾APP、Temp
1.2. 把 微信-6.6.5(越獄應用).ipa包 --> 解壓(打開方式:用歸檔解壓)。
將微信Payload文件夾放入新建的工程中的APP文件夾里面;
在Build Phases里面添加New Run Script phase,將自動化腳本路徑添加進去;
Shell腳本路徑
/Users/zhangmeng/ZMshell/XcodeApp.sh新建一個Target(Cocoa Touch Framework):hankHookFramework ,在此目錄下新建一個類庫:hankHook
并添加 + (void)load; 方法
@implementation hankHook
+ (void)load {
NSLog(@"????????????");
}
@end
- 將工程target和framework target關聯
添加 New Copy Files Phasa,選擇Frameworks,添加FrameworkLib
- 編譯以下,查看目錄:項目/Products/ZM_自動化簽名.app --> 顯示包內容里的(WeChat MacO文件)
// yololib庫: 作用是將動態庫寫入到MacO文件,代碼注入(代碼在動態庫中)
(使用前,先把此庫放入此路徑:Machintosh HD/bin
或此路徑下: Machintosh HD/usr/local/bin !!以后調用比較方便)
// 使用 yololib 把 動態庫 注入到可執行文件內 (WeChat MacO文件)
$ yololib WeChat Frameworks/hankHookFramework.framework/hankHookFramework
終端命令后:(WeChat MacO文件) 已經改變
- 對Payload文件內的WeChat庫,顯示包內容,使用 改變的(WeChat MacO文件),替換此庫內 WeChat可執行文件
然后對Payload文件重新打包成ipa
$zip -ry WeChat.ipa Payload
結果:會從 圖片1 到 --> 圖片二
- 最后編譯運行,會打印:????????????
//--------------------Dylib注入-----------------
1. 準備工作:
1.1新建一個工程;在工程里新建兩個文件夾APP、Temp
1.2. 把 微信-6.6.5(越獄應用).ipa包 --> 解壓(打開方式:用歸檔解壓)。
將微信Payload文件夾放入新建的工程中的APP文件夾里面;
2. 在Build Phases里面添加New Run Script phase,將自動化腳本路徑添加進去;
Shell腳本路徑: /Users/zhangmeng/ZMshell/XcodeApp.sh
3. 添加Dylib庫:新建一個Target(macOS --> Library):ZMHook ,同時會產生一個類庫:ZMHook
a、這個是在Mac里面使用的動態庫
b、證書也是Mac Developer證書
c、在Debug模式下Build后,Dylib動態庫的路徑和App包放的路徑不一樣,不在Debug-iphoneos下
d、添加代碼
#import "ZMHook.h"
@implementation ZMHook
+ (void)load
{
NSLog(@"????????????!!");
}
@end
4、新建的工程和Dylib庫進行關聯
關聯的意義就是為了后續在工程Build的時候將Dylib庫添加到app里面去。
5、修改Dylib動態庫的路徑
- 5.1方式一:直接把 libZMHook 拷貝到 Debug-iphoneos文件夾內
5.1.1 編譯
- 5.2 方式二:修改Build Setting -> Per - configuration Intermediate Build Files Path
5.2.1 ZM_Dylib注入 工程的路徑
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
5.2.2 ZMHook 動態庫的路徑
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
`// 修改Debug路徑`
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) --> $(BUILD_DIR)/Debug-iphoneos
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) --> $(BUILD_DIR)/Debug
5.2.3 編譯
- 5.3 方式三:
5.3.1 修改Dylib庫的架構配置(Base SDK改成iOS配置即可)
image.png
6、將Dylib注入到MachO文件
編輯自己的腳本文件,Shell腳本:XcodeApp.sh
# ---------------------------------------------------
# 7. 注入我們編寫的動態庫
echo "開始注入"
# 需要注入的動態庫的路徑 這個路徑我就寫死了!
INJECT_FRAMEWORK_RELATIVE_PATH="Frameworks/libHankHook.dylib"
#
## 通過工具實現注入 MachO文件
yololib "$TARGET_APP_PATH/$APP_BINARY" "$INJECT_FRAMEWORK_RELATIVE_PATH"
echo "注入完成"
7、在Dylib中寫注入代碼,并編譯運行
運行成功:打印????????????!!
總結
- 利用動態庫注入(Framework庫、Dylib庫)
- 注入進APP(工程和動態庫有關聯關系)
- 修改MachO文件的Load Commands
- 在注入的動態庫中,寫上自己想要注入的代碼!