ios 微信逆向部分
一、砸殼方法(轉載註明出處)
準備工作:
- 越獄的手機(必須的)
- class-dump (匯出砸殼後的二進位制包的標頭檔案)
- Cycript(Cydia)(在越獄手機的越獄市場下載,安裝)
- adv-cmds(Cydia)(在越獄手機的越獄市場下載,安裝)
- OpenSSH(Cydia) (在越獄手機的越獄市場下載,安裝)
具體實現步驟
首先在APPStore中下載正版的應用
以QQ為例
首先確保手機連線和電腦連線的是同一個網段
用ssh命令連線上手機,密碼預設是 alpine
ssh root@10.2.200.186
- 關閉所有的後臺APP,僅保持QQ後臺活躍
ps -e | grep QQ
(如果這裡是其他APP,不清楚具體名字,那麼執行這個命令,我這裡是知道我破殼的應用叫QQ,所以,直接執行 ps -e | grep QQ)
ps -e
![螢幕快照 2018-07-06 上午11.39.27](images/螢幕快照 2018-07-06 上午11.39.27.png)
- 使用cycript命令,找到目標app的Document路徑,使用如下命令
cycript -p QQ
![螢幕快照 2018-07-06 上午11.42.59](images/螢幕快照 2018-07-06 上午11.42.59.png)
鍵入一下命令
[[NSFileManager defaultManager ] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
拿到地址並且記錄下來,後面要用到
![螢幕快照 2018-07-06 上午11.45.50](images/螢幕快照 2018-07-06 上午11.45.50.png)
control + z
退出cy模式
- 這裡一定要注意,將我們下載好的 dumpdecrypted 編譯一下,生成動態庫dylib,編譯方法是,進入到我們下載好的
dumpdecypted
目錄下
直接執行make命令
![螢幕快照 2018-07-06 上午11.53.16](images/螢幕快照 2018-07-06 上午11.53.16.png)
這樣會編譯一遍dumpdecrypted,生成dylib
- 將生成的將dumpdecrypted.dylib拷貝到Documents目錄下,執行該命令
sudo scp dumpdecrypted.dylib root@10.2.200.186:/var/mobile/Containers/Data/Application/531B07B4-3048-4EEF-BB76-25F6F83D1EEC/Documents/
![螢幕快照 2018-07-06 上午11.58.25](images/螢幕快照 2018-07-06 上午11.58.25.png)
- 開始砸殼,使用以下命令,會在當前目錄下生成QQ.decrypted砸殼後的檔案。
DYLD_INSERT_LIBRARIES=/var/mobile/Containers/Data/Application/531B07B4-3048-4EEF-BB76-25F6F83D1EEC/Documents/dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/20E39925-5231-4BE3-B483-9D6481BCC715/QQ.app/QQ
成功後有如下結果
![螢幕快照 2018-07-06 下午12.16.06](images/螢幕快照 2018-07-06 下午12.16.06.png)
- 將砸殼後的QQ.decrypted檔案拷貝到電腦上。
sudo cp root@10.2.200.186 /var/root/QQ.decrypted
![螢幕快照 2018-07-06 下午12.34.17](images/螢幕快照 2018-07-06 下午12.34.17.png)
(我在這裡是拷貝到當前資料夾下,所以後面沒有帶路徑),如拷貝到指定資料夾,後面需要帶路徑
你會看到這個檔案![螢幕快照 2018-07-06 下午12.37.33](images/螢幕快照 2018-07-06 下午12.37.33.png)
到此,砸殼完成,接下來,操作一下,如何提取標頭檔案
class-dump最新安裝方法
當Mac升級了OSX 10.11後,配置class-dump的時候,會發現逆向書上推薦的class-dump存放目錄/usr/bin,class-dump存放不進去,嘗試過用sudo 還是不被允許。
首先開啟Terminal,輸入mkdir ~/bin,在當前使用者根目錄下建立一個bin目錄
把下載下來的 dmg 開啟,複製檔案裡面的class-dump到建立的bin目錄下。賦予其可執行許可權 chmod +x ~/bin/class-dump
- 開啟bash_profile檔案配置環境變數: vim ~/.bash_profile 按下 i 鍵進入編輯狀態,在最下方加一行 export PATH=PATH 按下esc鍵,再按shift+: 輸入 wq進行儲存退出編輯
**在Terminal中執行**source ~/.bash_profile
具體可參見
執行該命令
class-dump -H QQ.decrypted -o output/
緊接著,你就會發現,
![螢幕快照 2018-07-06 下午12.50.20](images/螢幕快照 2018-07-06 下午12.50.20.png)
二、重簽名
準備工作:砸殼完成的二進位制檔案、IPA包、指令碼檔案、證書、描述檔案
1.解壓ipa包
unzip WeChat.ipa -d WeChat_unzip
2.替換二進位制檔案
- 微信砸殼會得到一個WeChat.decrypted檔案, 重新命名為WeChat,在終端,輸入 chmod 777 ,然後把 WeChat拖到終端上按回車 修改下許可權。
sudo chmod 777 WeChat
- 替換砸殼了的WeChat二進位制檔案
用WeChat替換Payload/WeChat包內容裡的二進位制檔案
3.修改Bundle identifier
找到WeChat_unzip/Payload/WeChat包內容的info.plist 檔案,修改 Bundle identifier,需要與使用的額證書和描述檔案相一致
4.重簽名
開啟終端,cd 進入 檔案所在目錄,執行
sh ios_resign_from_app_to_ipa WeChat_unzip "iPhone Distribution: Beijing 1000 Oaks Hu Lian Technology Development (UECH3VPJ68)" embedded.mobileprovision WeChat_resig.ipa
5.簽名成功,得到ipa檔案
三、防撤回+步數統計
1.獲取砸殼後的標頭檔案,如圖
2.用編輯器開啟搜尋關鍵詞message、revoke等,最終鎖定CMessageMgr.h檔案
經過嘗試找到如下方法
- (void)onRevokeMsg:(id)arg1;
- (void)DelMsg:(id)arg1 MsgList:(id)arg2 DelAll:(_Bool)arg3;
onRevokeMsg為收到一條撤回通知(此時微信裡顯示“對方已撤回”)
DelMsg為刪除本地訊息,所以我們hook該方法即可換成自己的方法
ps:注意,只有當收到revoke通知刪除本地消失時才替換成自己的方法,其它情況呼叫父類方法
微信步數實現步驟
1.獲取步數
- 通過脫殼後的微信ipa包,獲取到工程中的所有標頭檔案,找到其中管理微信運動步數的類為WCDeviceStepObject。
- 通過幾次實驗(以及對函式名的猜測)得到了獲取步數的函式為m7StepCount。
- 通過開源的CaptainHook類,利用ObjC的runtime機制,對m7StepCount函式進行method swizzling,也就是用我們自己的實現來替換微信的實現。為了避免改得太假被微信發現,如果修改的不是當天或者改的步數比微信自己計算的還少,就直接呼叫微信原有的方法。
2.在設定中加入修改入口
- 微信的設定頁比較好找,在NewSettingViewController類中。
- 通過Reveal軟體能看到微信設定介面的結構,在MMTableViewSectionInfo中增加一行輸入步數的MMTableViewCellInfo,並最後加到MMTableViewInfo中。
- 重新重新整理tableView,就能看到新加的入口了。