前戲
- 越獄手機;
- Cydia 安裝 ssh(用于電腦ssh連接);
- Cydia 安裝 adv-cmds(用于 ps -e 查看進程方便查找目標 App 位置);
- Cydia 安裝 cycript (查看App 的 Documents 路徑);
正題
1. ssh 連接iPhone
ssh root@iphone_ip
然后輸入密碼 默認情況下是: alpine
2. 獲取微信的路徑
a). 首先找到微信的可執(zhí)行文件的具體路徑;
iPhone啟動微信,通過以下命令獲取
ps -e | grep WeChat
/var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/WeChat.app/WeChat
b). 通過 Cycript找出微信的Documents的路徑;(ps:這一步不要鎖屏)
cycript -p WeChat
cy# NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]
/var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/Documents
3. 編譯dumpdecrypted
Github上下載最新的 dumpdecrypted 源碼;
進入下載的文件目錄執(zhí)行 make 編譯獲得 dumpdecrypted.dylib 文件
拷貝dumpdecrypted.dylib到iPhone上
scp dumpdecrypted.dylib root@10.8.182.11:/var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/Documents
獲取微信頭文件
砸殼
其實這一步可以略過,直接從第三方市場下載已經(jīng)砸殼的ipa解壓即可,當本身就是為了學習來的,就順便學習下砸殼的方法。
執(zhí)行以下代碼
DYLD_INSERT_LIBRARIES=/var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/Documents/dumpdecrypted.dylib /var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/WeChat.app/WeChat

看到這樣的圖就砸殼成功了!
拷貝砸殼生成的文件WeChat.decrypted文件到電腦上
dump 微信的可執(zhí)行文件
class-dump --arch armv7 hello.decrypted -H -o ./heads
注意:當砸殼完畢后,使用 class-dump 仍然只導(dǎo)出 CDStructures.h 一個文件,則可能架構(gòu)選擇錯誤;因為 dumpdecrypted 只會砸你手機處理器對應(yīng)的那個殼,fat binary 的其它部分仍然是有殼的,而 class-dump 的默認目標又不是被砸殼的那個部分,因此很有可能就會報錯。解決辦法:--arch 指定cpu架構(gòu)

干些羞羞的事
好不容易搞到了 WeChat 的頭文件,就這么算了也太沒勁了??傄泓c見不得人的事。
搶個紅包
好像之前看到過一個教程。嗯那咋也搞搞看。
其實這里主要是通過創(chuàng)建動態(tài)庫的方式 HOOK 微信中的兩個方法
- CMessageMgr.h 中的 - (void)AsyncOnAddMsg:(id)arg1 MsgWrap:(id)arg2;
- WCRedEnvelopesLogicMgr.h 中的- (void)OpenRedEnvelopesRequest:(id)arg1;
利其器
-
工具安裝
首先要安裝iOSOpenDev
Xcode7可以參考文章《在xcode7下安裝iOSOpendev,并使用iOSOpendev模板編譯iOS9鉤子》當然你可能還是會有以下問題

解決方法(安裝those):
- 下載MacPorts并安裝(耐心等這一步有點慢)
更新一下
sudo port -v selfupdate
-
安裝dpkg(用于打包.deb文件)
sudo port -f install dpkg -
安裝those
export THEOS=/opt/theos sudo git clone -b stableversion https://github.com/haorenqq/theos/ $THEOS -
安裝iOSOpenDev
什么?還是安裝失???請繼續(xù)。
進入系統(tǒng)根目錄的opt文件夾會發(fā)現(xiàn)一個iOSOpenDevSetup文件,cd /opt/iOSOpenDevSetup/bin sudo ./iod-setup base sudo ./iod-setup sdk -sdk iphoneos
驗證:
查看 /Users/taizi/library/developer/xcode/ 路徑下是否有
Templates/iOSOpenDev
或者執(zhí)行
```
cat ~/.bash_profile
```
查看輸出是否包含
> export iOSOpenDevPath=/opt/iOSOpenDev
> export iOSOpenDevDevice=
> export PATH=/opt/iOSOpenDev/bin:$PATH

善其事
創(chuàng)建 dylib 工程
編寫HOOK代碼
GitHub上也有現(xiàn)成的 https://github.com/east520/AutoGetRedEnv使用yololib 將 dylib 注入到 WeChat.decrypted
先把之前保存的 WeChat.decrypted 重命名為 WeChat 用 yololib 注入
./yololib WeChat libAutoRedEnvelopesGet.dylib

- 生成Entitlements.plist文件

重簽名
把生成的dylib、
剛剛注入dylib的WeChat、
以及embedded.mobileprovision文件(就是你自己打包的provision文件,在之前打包過的App也中能找到)
拷貝到WeChat.app(可以通過iTunes下載解壓得到)中
分別用codesign命令來為微信中的相關(guān)文件簽名
codesign -f -s 證書名字 目標文件
codesign -f -s "iPhone Distribution: xxx" WeChat.app/libAutoRedEnvelopesGet.dylib
codesign -f -s "iPhone Distribution: Hangzhou Ouer Technology Co., Ltd" WeChat.app/Watch/WeChatWatchNative.app
codesign -f -s "iPhone Distribution: xxx" WeChat.app/PlugIns/WeChatShareExtensionNew.appex
codesign -f -s "iPhone Distribution: xxx" WeChat.app/Watch/WeChatWatchNative.app/PlugIns/WeChatWatchNativeExtension.appex
codesign -f -s "iPhone Distribution: xxx" --entitlements Entitlements.plist WeChat.app
codesign -f -s "iPhone Distribution: Hangzhou Ouer Technology Co., Ltd" --entitlements Entitlements.plist WeChat.app/Watch/WeChatWatchNative.app
最后打包
xcrun -sdk iphoneos PackageApplication -v WeChat.app -o ~/Desktop/WeChat.ipa
小編用上面的方法試了簽名成功但是一直安裝失敗, 上網(wǎng)找了半天也沒解決,最后在GitHub上搞了一個重簽名工具 ( https://github.com/DanTheMan827/ios-app-signer ) 重新簽名后在越獄手機上安裝成功,但自己的iPhone6上還是安裝失?。ㄔ覛さ墨@取cpu指令集不同)。
最后直接從PP助手上下載一個已砸殼的應(yīng)用注入重簽名就可以了。
用AppResign重簽名
./AppResign WeChat.app WeChat.ipa
事后一根煙
雖然前輩有很多經(jīng)驗可以參考,但是自己實際操作中間還是走了很多坑,最后成功安裝不crash還是蠻興奮的。
附上一些參考文章
http://www.itdecent.cn/p/189afbe3b429
http://www.itdecent.cn/p/844ae6180ed7
http://iosre.com/t/topic/2966