iOS逆向009--代碼注入、Dylib注入

  • 簡介
    • 代碼注入:靜態注入、動態注入 動態庫dylib
    • 其實是修改MacO文件,展開 Load Commands
    • 在Frameworks 里添加一個動態庫,Hook.Frameworks,加入MacO文件中
    • yololib庫:注入 MachO 文件,修改了此文件,簽名被破壞了,Xcode 重新簽名整個 App


// 請先看以下兩篇文章
iOS逆向-RSA的使用-證書簽名、代碼簽名(手動簽名、腳本自動簽名 《一》)

iOS逆向-RSA的使用:代碼簽名(手動簽名、腳本自動簽名 《二》)


  • 代碼注入的過程

  1. 準備工作:
    1.1新建一個工程;在工程里新建兩個文件夾APP、Temp
image.png

1.2. 把 微信-6.6.5(越獄應用).ipa包 --> 解壓(打開方式:用歸檔解壓)。
將微信Payload文件夾放入新建的工程中的APP文件夾里面;

  1. 在Build Phases里面添加New Run Script phase,將自動化腳本路徑添加進去;
    Shell腳本路徑
    /Users/zhangmeng/ZMshell/XcodeApp.sh

  2. 新建一個Target(Cocoa Touch Framework):hankHookFramework ,在此目錄下新建一個類庫:hankHook

image.png
image.png

并添加 + (void)load; 方法

@implementation hankHook

+ (void)load {
    NSLog(@"????????????");
}
@end
  1. 將工程target和framework target關聯
    添加 New Copy Files Phasa,選擇Frameworks,添加FrameworkLib
0010自動化簽名-代碼注入-4_2.png
  1. 編譯以下,查看目錄:項目/Products/ZM_自動化簽名.app --> 顯示包內容里的(WeChat MacO文件)
image.png

// yololib庫: 作用是將動態庫寫入到MacO文件,代碼注入(代碼在動態庫中)
(使用前,先把此庫放入此路徑:Machintosh HD/bin
或此路徑下: Machintosh HD/usr/local/bin !!以后調用比較方便)

// 使用 yololib 把 動態庫 注入到可執行文件內 (WeChat MacO文件)

$ yololib WeChat Frameworks/hankHookFramework.framework/hankHookFramework

終端命令后:(WeChat MacO文件) 已經改變

  1. 對Payload文件內的WeChat庫,顯示包內容,使用 改變的(WeChat MacO文件),替換此庫內 WeChat可執行文件
    然后對Payload文件重新打包成ipa
$zip -ry WeChat.ipa Payload

結果:會從 圖片1 到 --> 圖片二


打包前
打包后
  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
Dylib注入-1.png
Dylib注入-2.png
Dylib注入-3.png
a、這個是在Mac里面使用的動態庫
image.png
b、證書也是Mac Developer證書
image.png
c、在Debug模式下Build后,Dylib動態庫的路徑和App包放的路徑不一樣,不在Debug-iphoneos下
image.png
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)
image.png

5.2.2 ZMHook 動態庫的路徑

$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)                 
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)  
image.png
`// 修改Debug路徑`
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)         -->  $(BUILD_DIR)/Debug-iphoneos
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)  -->  $(BUILD_DIR)/Debug 
image.png

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
  • 在注入的動態庫中,寫上自己想要注入的代碼!
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。