最近比較閑于是研究了一下app逆向,就拿大家都玩壞了的微信來(lái)開刀,上網(wǎng)隨便找了個(gè)搶紅包的動(dòng)態(tài)庫(kù),去pp助手下了個(gè)越獄版本的微信ipa,然后通過(guò)yololib將動(dòng)態(tài)庫(kù)注入到微信ipa解壓出來(lái)的可執(zhí)行文件里面再打包,接著用 iOS App Signer進(jìn)行重簽名,接著用xcode安裝重簽名后的ipa文件,接著興奮地打開微信,然后Oh, no,完美閃退,網(wǎng)上各種搜索都沒(méi)找到合適的解決方案,不過(guò)還是找到了解決問(wèn)題的線索,現(xiàn)在記錄下這次重簽名的過(guò)程踩過(guò)的坑防止以后又忘記了,如果可以幫到其他卡住的朋友們就再好不過(guò)了(本篇文章主要講述的是重簽名過(guò)程,具體砸殼和hook過(guò)程不涉及,想了解的朋友可以在文章末尾查看我列出的參考博文).
首先,假設(shè)你已經(jīng)寫好了一個(gè)dylib,然后通過(guò)yololib進(jìn)行注入,具體的使用方法是先下載yololib的源碼,編譯生成一個(gè)yololib的二進(jìn)制文件,然后在終端輸入yololib二進(jìn)制文件的地址 可執(zhí)行文件的地址 dylib文件的地址
,敲回車,打印注入成功的信息,這里就是我碰到的第一個(gè)坑,yololib注入的時(shí)候其實(shí)并沒(méi)有處理好可執(zhí)行文件引用dylib的地址問(wèn)題(直接就拿你終端輸入的dylib文件的地址,坑!),這樣注入的結(jié)果就是可執(zhí)行文件運(yùn)行的時(shí)候加載注入的dylib因?yàn)榈刂分赶虻氖莇ylib在你電腦上面的地址,當(dāng)然加載失敗然后閃退.
至于我是怎么發(fā)現(xiàn)這個(gè)問(wèn)題的呢?首先你要有一臺(tái)越獄手機(jī)(這樣才能通過(guò)scp命令將手機(jī)上面的文件拷貝到電腦上),下載并安裝好libimobiledevice-macosx這個(gè)工具,通過(guò)這個(gè)工具可以在終端實(shí)時(shí)看到手機(jī)的log信息,然后打開注入了dylib的app,閃退,發(fā)現(xiàn)log信息上面打印了這個(gè)app發(fā)生了crash,相關(guān)的崩潰信息已經(jīng)xxxx路徑,接著你將那個(gè)路徑指向的文件拷貝到電腦上面就可以看到崩潰的原因了.
解決方法就是先將你要注入的dylib放到和可執(zhí)行文件同一個(gè)文件夾下面,然后讓你的終端指向這個(gè)文件夾的地址,接著上面的命令就可以改成yololib二進(jìn)制文件的地址 可執(zhí)行文件的文件名 dylib文件的文件名
.OK這個(gè)坑填完之后再次興奮地重簽名,安裝,還是閃退!
通過(guò)上面提到的方法繼續(xù)看崩潰日志,發(fā)現(xiàn)是由于微信除了本身的WeChat可執(zhí)行文件之外,還有watch和plugins里面的可執(zhí)行文件,于是將它們刪除掉,繼續(xù),還是閃退!!不過(guò)不怕,有了辦法查看崩潰的原因,還害怕沒(méi)辦法解決嗎?這次的崩潰信息顯示的是我的dylib包版本是0.0.0,但是可執(zhí)行文件要求的版本至少是1.0.0,由于我要注入的dylib是通過(guò)THEOS生成的,所以在Makefile文件里面加上這兩行改變一下版本
_THEOS_TARGET_LDFLAGS += -compatibility_version 1.0```
就OK了,如果是用iOSOpenDev寫的話,就在Buildsetting那里修改version,接著再次安裝,終于成功了!!
參考文章:
[theos的一些額外配置、解決版本號(hào)不對(duì)的錯(cuò)誤](http://www.dllhook.com/post/114.html)
[專注于非越獄環(huán)境下iOS應(yīng)用逆向研究,從dylib注入态秧,應(yīng)用重簽名到App Hook](https://github.com/Urinx/iOSAppHook)
[免越獄版 iOS 搶紅包插件](http://www.swiftyper.com/2016/12/26/wechat-redenvelop-tweak-for-non-jailbroken-iphone/)
[越獄開發(fā)2-Tweak入門](http://luoxianming.cn/2016/11/13/yueyutweak1/)