天天看點

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

建立Tweak項目

這裡我們以前已經講過,在這不做詳細介紹,可以到我微信公衆号: 樂Coding記錄中檢視。

修改Tweak.xm檔案,然後make package編譯。

%hookWCAccountMainLoginViewController-(void)viewDidLoad{%orig;UIAlertView*alert=[[UIAlertViewalloc] initWithTitle:@"測試"message:@"你成功了"delegate:selfcancelButtonTitle:@"Cancel"otherButtonTitles:@"OK",nil];[alertshow];}%end

編譯成功後在工程的.theos/obj/debug(.theos是個隐藏目錄)目錄下會找到我們需要的動态庫.dylib結尾的檔案

修改動态庫依賴

檢視動态庫依賴項

otool -LWXRedPackage.dylib

結果資訊如下:

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

結果中有一段越獄手機中才會用到的CyduaSubstrate庫。

我們需要用 libsubstrate.dylib替換這個庫。

先檢視Theos安裝目錄/opt/theos/lib中是否有 libsubstrate.dylib檔案,如果沒有可以到https://github.com/kokoabim/iOSOpenDev/blob/master/lib/libsubstrate.dylib 下載下傳。

使用install_name_tool修改動态庫的路徑,指向 app 二進制檔案的同級目錄

install_name_tool -change/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib WXRedPackage.dylib

修改後再次檢視動态了依賴項

otool -LWXRedPackage.dylib

執行結果如下,如果原來庫檔案路徑變成了新的相對路徑說明成功。

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

将動态連結庫注入二進制檔案中

如果電腦中沒有optool可以從https://github.com/alexzielenski/optool下載下傳,因為opool添加了submodule,是以建議使用一下指令clone

gitclone --recursivehttps://github.com/alexzielenski/optool.git

然後用Xcode打開編譯後,把Product目錄下的optool二進制檔案拷貝到/usr/local/bin目錄下。

拷貝libsubstrate.dylib和我們自己編寫并修改過的WXRedPackage.dylib拷貝到WeChat.app目錄下

修改微信二進制檔案加載Load Commands段

optool install -cload -p"@executable_path/WXRedPackage.dylib"-tWeChat.app/WeChat

執行結果如下:

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

沖簽名打包

在開始打包之前,請先将 WeChat.app 裡面的 Watch 目錄删除,這個目錄是跟 Watch 有關的,如果不删除的話,在越獄手機上可以,但是我的iPhone6上安裝不成功。

簽名可以使用codesign -f -s 證書名字 目标檔案指令,打包可以使用xcrun -sdk iphoneos PackageApplication -v WeChat.app -o $(pwd)/WeChat2.ipa指令。下面我們采用一個可視化的工具。

使用iOS App Signer 他是開源的,大家可以在http://dantheman827.github.io/ios-app-signer/ 找到安裝包和github源碼連結。

下載下傳打開軟體後如下圖:

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

Input File: 我們剛剛修改的微信.app檔案 ,下面兩個是證書資訊。

點選Start打包。

ipa打包成功,下面可以用iTools或者PP助手安裝了

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

先檢視Theos安裝目錄/opt/theos/lib中是否有 libsubstrate.dylib檔案,如果沒有可以到https://github.com/kokoabim/iOSOpenDev/blob/master/lib/libsubstrate.dylib 下載下傳。

使用install_name_tool修改動态庫的路徑,指向 app 二進制檔案的同級目錄

install_name_tool -change/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib WXRedPackage.dylib

修改後再次檢視動态了依賴項

otool -LWXRedPackage.dylib

執行結果如下,如果原來庫檔案路徑變成了新的相對路徑說明成功。

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

先檢視Theos安裝目錄/opt/theos/lib中是否有 libsubstrate.dylib檔案,如果沒有可以到https://github.com/kokoabim/iOSOpenDev/blob/master/lib/libsubstrate.dylib 下載下傳。

使用install_name_tool修改動态庫的路徑,指向 app 二進制檔案的同級目錄

install_name_tool -change/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib WXRedPackage.dylib

修改後再次檢視動态了依賴項

otool -LWXRedPackage.dylib

執行結果如下,如果原來庫檔案路徑變成了新的相對路徑說明成功。

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

将動态連結庫注入二進制檔案中

如果電腦中沒有optool可以從https://github.com/alexzielenski/optool下載下傳,因為opool添加了submodule,是以建議使用一下指令clone

gitclone --recursivehttps://github.com/alexzielenski/optool.git

然後用Xcode打開編譯後,把Product目錄下的optool二進制檔案拷貝到/usr/local/bin目錄下。

拷貝libsubstrate.dylib和我們自己編寫并修改過的WXRedPackage.dylib拷貝到WeChat.app目錄下

修改微信二進制檔案加載Load Commands段

optool install -cload -p"@executable_path/WXRedPackage.dylib"-tWeChat.app/WeChat

執行結果如下:

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

拷貝libsubstrate.dylib和我們自己編寫并修改過的WXRedPackage.dylib拷貝到WeChat.app目錄下

修改微信二進制檔案加載Load Commands段

optool install -cload -p"@executable_path/WXRedPackage.dylib"-tWeChat.app/WeChat

執行結果如下:

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

沖簽名打包

在開始打包之前,請先将 WeChat.app 裡面的 Watch 目錄删除,這個目錄是跟 Watch 有關的,如果不删除的話,在越獄手機上可以,但是我的iPhone6上安裝不成功。

簽名可以使用codesign -f -s 證書名字 目标檔案指令,打包可以使用xcrun -sdk iphoneos PackageApplication -v WeChat.app -o $(pwd)/WeChat2.ipa指令。下面我們采用一個可視化的工具。

使用iOS App Signer 他是開源的,大家可以在http://dantheman827.github.io/ios-app-signer/ 找到安裝包和github源碼連結。

下載下傳打開軟體後如下圖:

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)

Input File: 我們剛剛修改的微信.app檔案 ,下面兩個是證書資訊。

點選Start打包。

Input File: 我們剛剛修改的微信.app檔案 ,下面兩個是證書資訊。

點選Start打包。

ipa打包成功,下面可以用iTools或者PP助手安裝了

編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)
編寫dylib_iOS逆向第四篇(dylib動态庫注入和重簽名打包)