最近對 iOS 逆向很感興趣,想學(xué)習(xí)下如何通過逆向app、分析源碼、注入動態(tài)庫的方式來給別人的軟件增加些酷炫的功能。決定拿微信練手。
先上幾個教程:
移動App入侵與逆向破解技術(shù)-iOS篇
給微信加 hook 嘗試記錄
一步一步實現(xiàn)iOS微信自動搶紅包(非越獄)
然而,真正開始學(xué)習(xí)后,發(fā)現(xiàn)做逆向的人本來就不多,而且由于法律法規(guī)問題,導(dǎo)致很多教程都含糊其辭、較為淺顯。而隨著 iOS 系統(tǒng)的更新,安全性也越來越強(qiáng),以往教程中的不少逆向工具,都失效或者改變了使用方法。
教程中已有的步驟,本文不再累述;僅記錄我踩過的一些坑。
#【第一個瓶頸】ios9.3 后,cycript 由于權(quán)限問題無法 hook 進(jìn)程
*** _syscall(connect(socket, reinterpret_cast<sockaddr *>(&address), sizeof(address))):../Handler.cpp(169):CYHandleSocket [errno=1]
*** _assert(system(inject.str().c_str()) == 0):../Inject.cpp(119):InjectLibrary
解決 --》 使用一部 iOS 8.1.1 的 iPod 來 hook
# bundle
mobile 4021 0.9 9.8 722448 50360 ?? Ss 12:50PM 0:11.31 /var/mobile/Containers/Bundle/Application/EF82C83B-6CCA-4274-8313-AA15C8B8D042/WeChat.app/WeChat
# Data
@"/var/mobile/Containers/Data/Application/0E291049-58E9-41E8-B38F-B01C7C5B6645/Documents"
# dylid_insert 指令,執(zhí)行完后,在本目錄下得到 WeChat.decrypted 文件。
DYLD_INSERT_LIBRARIES=/var/mobile/Containers/Data/Application/0E291049-58E9-41E8-B38F-B01C7C5B6645/Documents/dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/EF82C83B-6CCA-4274-8313-AA15C8B8D042/WeChat.app/WeChat
# 將 WeChat.decrypted 文件復(fù)制到本地。但后來發(fā)現(xiàn),mac端的 class-dump 是64位的,和iPod不適配,故無法成功將頭文件dump出來。于是決定在iPod上進(jìn)行 class-dump。
scp WeChat.decrypted liqiyu@172.18.67.185:~/Desktop
# 使用 class -dump 把頭文件暴露出來
class-dump -s -S -H ./WeChat.decrypted -o ./header6.3-arm64
# 將 ipod 上的頭文件復(fù)制到電腦本地(電腦需要先開啟遠(yuǎn)程登錄)
scp -r header6.3-arm64 liqiyu@172.18.67.185:~/Desktop/wechat
# 安裝 iosOpenDev
參考:《在xcode7下安裝iOSOpendev,并使用iOSOpendev模板編譯iOS9鉤子》( http://bbs./t/xcode7-iosopendev-iosopendev-ios9/1963 )、《iOSOpenDev安裝》( http://www.jianshu.com/p/29580725707a )
安裝 iOSOpenDev 時,我根據(jù)教程先裝了 MacPort, 裝完后 還不能直接執(zhí)行 sudo port -v selfupdate 指令更新 MacPort,而要先配置環(huán)境變量。詳見此處第2.5條 ( https://guide./#installing.shell )。
安裝 Xcode Command Line Tools
# 查看指定頁面 ui 層級結(jié)構(gòu)
UIApp.keyWindow.recursiveDescription().toString()
# make package install 坑
動態(tài)庫寫完后,需要進(jìn)行package install。運行發(fā)現(xiàn)報錯。
wxopenredbag make package install
==> Error: The vendor/include and/or vendor/lib directories are missing. Please run `git submodule update --init --recursive` in your Theos directory. More information: https://github.com/theos/theos/wiki/Installation.
make: *** [before-all] Error 1
(按說明,到 theos 目錄運行 git submodule update --init --recursive 指令就好)
wxopenredbag make package install
> Making all for tweak WXOpenRedBag…
==> Preprocessing Tweak.xm…
Tweak.xm:2: error: %orig does not make sense outside a method
make[3]: *** [/Users/liqiyu/Work/Hackor/myCode/WeChat/wxopenredbag/.theos/obj/debug/armV7/Tweak.xm.b8bea91d.o] Error 22
make[2]: *** [/Users/liqiyu/Work/Hackor/myCode/WeChat/wxopenredbag/.theos/obj/debug/armV7/WXOpenRedBag.dylib] Error 2
make[1]: *** [internal-library-all_] Error 2
make: *** [WXOpenRedBag.all.tweak.variables] Error 2
(文件中,有倆方法是自動生成的,如:
- (void).cxx_destruct { %log; %orig; }
該方法方法名以"."開頭,顯然有問題。把"."刪除后即可成功 install)
# 連接xcode打開越獄機(jī)器控制臺,查看 logify 輸出
打開Xcode->Window->Device→你的設(shè)備,下面有Log顯示,但未找到微信logify輸出
# 反匯編工具 hooper 查看偏移量
用 hooper 打開之前砸殼后獲得的 WeChat.decrypted 文件,并在左側(cè)框搜索 addMessageNode 方法
注意:
1、要把 WeChat 文件拖入 hooker 中來打開,若使用 hooker 的 File -> open 來打開則會打開失??!
2、打開時會讓你選擇armv7或者arm64,這需要根據(jù)你越獄手機(jī)的cpu類型來選,一定要和你的手機(jī)一致!
# 通過lldb遠(yuǎn)程調(diào)試iOS App
參考:
http://www.cnblogs.com/csutanyu/p/3653252.html
./debugserver *:微信的pid -a WeChat
另開一個終端,輸入3條指令:
lldb
platform select remote-ios
process connect connect://192.168.2.101:微信的pid
然后輸入指令獲取進(jìn)程基地址:
image list -o -f
輸入:
br s -a '0x000c5000+0x01657fb4'
|