1.空工程安裝
目的:讓設(shè)備接收你安裝工程的描述文件,為了重簽名應(yīng)用能夠成功.
2.將砸殼后微信的ipa包放入工程根目錄APP文件夾下

3.將腳本文件放入工程根目錄下

腳本執(zhí)行操作內(nèi)容已注釋,如下圖所示:

4.進(jìn)?入?工程,在BuildPhases內(nèi)添加腳本

4.1在?工程內(nèi)設(shè)置腳本路路徑

然后運行應(yīng)用,微信就讓我們重簽名了
5.代碼注入思路:
應(yīng)用加載到iPhone的流程是DYLD將可執(zhí)行文件(MachO)加載到內(nèi)存中,DYLD會動態(tài)加載Frameworks中所有的動態(tài)庫,那么在Frameworks中加一個自己的動態(tài)庫,然后在自己動態(tài)庫中hook和注入代碼
5.1 動態(tài)庫存放的位置:Frameworks
顯示app的包內(nèi)容

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

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

5.4 自己創(chuàng)建一個Framework:TARGETS添加:

5.5 新建一個InjectCode類

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

編譯運行一下在包內(nèi)容中的Frameworks庫中就有了我們新建的Framework
5.7 運行,并沒有成功,沒有執(zhí)行l(wèi)oad里的代碼
原因:用MachOView打開可執(zhí)行文件WeChat,在Load Commands找不到HankHook.FrameWork
5.8 將HankHook.FrameWork寫入MachO文件
需要用到工具:yololib
yololib同樣把yololib文件放入根目錄,然后用腳本執(zhí)行即可


5.9 檢查MachO文件的Load Commands里是否有HankHook.FrameWork

如圖,注入成功!
5.10 將根目錄APP文件夾下砸殼的ipa包解壓縮, 將WeChat.app顯示包內(nèi)容,找到WeChat可執(zhí)行文件,將注入成功的MachO文件進(jìn)行替換,然后刪除原來的砸殼后的微信-7.0.8.ipa,打包Payload
zip -ry WeChat.ipa Payload
將生成WeChat.ipa放入APP目錄,刪除其他文件夾
6. 運行,成功!
控制臺就會將load方法中的
NSLog(@"\n\n\n注入成功!\n\n\n??????????????????????????????????\n\n\n");
打印出來,說明我們已經(jīng)代碼注入成功了!
ps:因為調(diào)用微信支付時,啟動的是我重簽名的微信,我就把重簽名的微信刪除了,暫時截取不到注入成功后的截圖!
6.1 代碼注入成功了,我們還可不可以有一些更騷的操作呢?
用class-dump解析WeChat的頭文件目錄
6.2 class-dump解析MachO可執(zhí)行文件
將class-dump放入根目錄

用終端定位到當(dāng)前根目錄,執(zhí)行命令:
./class-dump -H WeChat -o ./Heaers
然后根目錄下就會生成一個Heaers文件夾

然后我們可以根據(jù)我們真機(jī)調(diào)試時獲取到的控制器文件及方法,然后從Heaers文件夾找到該控制器的類,就能夠找到相關(guān)的屬性和方法,我們就可以通過頭文件中的屬性獲取到我們想要的信息.
以下是我代碼注入的內(nèi)容:

然后就可以獲取到登錄界面下我們輸入的用戶名和密碼了
后續(xù)的騷操作還需要繼續(xù)研究.
ps:重簽名后的微信盡量不要用大號登錄,微信會檢測到然后被封,錢包里有錢的話可以申請解封,不過有次數(shù)限制.
我剛剛看了下,重簽名微信文件有點大,推了好久還沒推上去,先附上demo地址,推送成功后會自動更新的.GitHub推不上去,我放百度云了,提取碼:uiks
Demo:代碼注入
MachOView: 提取碼: mui7
最后感謝一下邏輯教育Hank老師代碼注入公開課的分享