延伸
做過游戲外掛的人都知道,代碼注入通常是通過這工具去注入的進行測試的【當然還有劫持注入等等其他注入方式】
image.png
通常這種測試注入的方式有兩種
- 一種是直接注入匯編代碼 【這種方式只能用在簡單測試。在iPhone中,我們可以通過LLDB、Cycript直接注入OC原生語言進行測試,這種方式更加簡單粗暴。其實我們平時調試多多少少都會用過LLDB,或許你已經會了不少】
- 一種是注入一個.dll的動態庫【這種是windows系統的動態庫。在iphone中,動態庫是Framework與dylib】
所以我們iOS逆向開發的時候,就是通過注入動態庫,來實現代碼的注入的
動態庫的注入【Framework】
第一步 【把之前重簽名的項目整理,優化一下】
- 創建一個新的項目【05_Framework_Inject】
- 創建APP文件夾,把目標APP【wechat】放進去
image.png
- 創建一個編譯腳本
image.png
- 把之前【iOS逆向之旅(進階篇) — 重簽名APP(二)】里面的腳本,寫到文件
AssignApp.sh
,并放到項目中 - 接著在運行腳本的指令中,把
AssignApp.sh
的路徑寫上,運行的時候Xcode就會自動幫我們重簽名
image.png
第二步 【創建一個Framework】
- 新建一個Framework,名PFFramework
image.png
- 把Framework添加到工程中
image.png
image.png
這樣就把Framework注入到項目中了
- 添加注入代碼
image.png
- 運行,查看結果
image.png
然而發現并沒注入成功,原因是由于微信中沒有用到我們的Framework,所以動態庫不會被加載。
第三步 【修改Macho文件屬性】
這時我們需要去修改macho的文件屬性,讓微信會去加載我們的Framework
- 修改wechat可執行文件的macho文件屬性
我們會使用到一個新的工具:yololib
這個工具的使用十分簡單
進入.app,查看我們PFFrameWork的位置
image.png
進入命令行模式,使用該工具,修改其Macho文件屬性
yololib WeChat Frameworks/PFFrameWork.framework/PFFrameWork
然后再重新打包這個APP
- 顯然這么做太麻煩了,我們可以利用跟簡單的方式【利用腳本的方式去使用該工具】
在原先腳本的末尾添加上
yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/PFFramework.framework/PFFramework"
這樣我們的代碼就可以成功注入進去了
- 看看結果
image.png
注:我發現項目中,有時會出現奔潰的現象。
原因是:
項目有時候PFFramework.framework
時有時無,導致了項目偶爾奔潰的現象
image.png
神奇的是項目clean后build肯定能成功,但我還是花了不少時間把問題定位出來
原來第二次編譯的時候,編譯器有時候會先把PFFramework.framework
放到.app中,然后我們執行腳本rm -rf "$TARGET_APP_PATH"
,自然而然就把這個庫給刪了。
所以我把rm -rf "$TARGET_APP_PATH"
替換成一下這個函數
function rmFilterFramework(){
for element in `ls $1`
do
if test "$element" == "Frameworks" || test "$element" == "*.framewrok"; then
echo $element
else
rm -rf $1"/"$element
fi
done
}
修改后,就再也不會出現BUG了
動態庫的注入【dylib】
第一步 【把原理重簽名的項目整理,優化一下】
與動態庫的注入【Framework】的第一步一致,這里我就不重復闡述了
第二步 【創建一個dylib】
- 新建一個dylib,名PFLibrary
image.png
- 修改他的平臺信息,并把mac修改成iOS
image.png
- 修改簽名認證把mac developer修改成iOS developer
image.png
- 把dylib添加到工程中
image.png
image.png
- 添加注入代碼
image.png
第三步 【修改Macho文件屬性】
與動態庫的注入【Framework】的第三步大致相同,唯一不同的就是寫入 腳本的yololib不一樣,只要改成以下指令即可
yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libPFLibrary.dylib"
查看結果
image.png
成功了 嘿嘿~~~
代碼晚點我會上傳到百度云,嘿嘿~