最近對 iOS 逆向很感興趣,想學習下如何通過逆向app、分析源碼、注入動態庫的方式來給別人的軟件增加些酷炫的功能。決定拿微信練手。
先上幾個教程:
移動App入侵與逆向破解技術-iOS篇
給微信加 hook 嘗試記錄
一步一步實現iOS微信自動搶紅包(非越獄)
然而,真正開始學習后,發現做逆向的人本來就不多,而且由于法律法規問題,導致很多教程都含糊其辭、較為淺顯。而隨著 iOS 系統的更新,安全性也越來越強,以往教程中的不少逆向工具,都失效或者改變了使用方法。
教程中已有的步驟,本文不再累述;僅記錄我踩過的一些坑。
#【第一個瓶頸】ios9.3 后,cycript 由于權限問題無法 hook 進程
*** _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
# bundlemobile 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 指令,執行完后,在本目錄下得到 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 文件復制到本地。但后來發現,mac端的 class-dump 是64位的,和iPod不適配,故無法成功將頭文件dump出來。于是決定在iPod上進行 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 上的頭文件復制到電腦本地(電腦需要先開啟遠程登錄)scp -r header6.3-arm64 liqiyu@172.18.67.185:~/Desktop/wechat
# 安裝 iosOpenDev參考:《在xcode7下安裝iOSOpendev,并使用iOSOpendev模板編譯iOS9鉤子》( http://bbs.iosre.com/t/xcode7-iosopendev-iosopendev-ios9/1963 )、《iOSOpenDev安裝》( http://www.jianshu.com/p/29580725707a )安裝 iOSOpenDev 時,我根據教程先裝了 MacPort, 裝完后 還不能直接執行 sudo port -v selfupdate 指令更新 MacPort,而要先配置環境變量。詳見此處第2.5條 ( https://guide.macports.org/#installing.shell )。安裝 Xcode Command Line Tools
# 查看指定頁面 ui 層級結構UIApp.keyWindow.recursiveDescription().toString()
# make package install 坑
動態庫寫完后,需要進行package install。運行發現報錯。? 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 methodmake[3]: *** [/Users/liqiyu/Work/Hackor/myCode/WeChat/wxopenredbag/.theos/obj/debug/armV7/Tweak.xm.b8bea91d.o] Error 22make[2]: *** [/Users/liqiyu/Work/Hackor/myCode/WeChat/wxopenredbag/.theos/obj/debug/armV7/WXOpenRedBag.dylib] Error 2make[1]: *** [internal-library-all_] Error 2make: *** [WXOpenRedBag.all.tweak.variables] Error 2(文件中,有倆方法是自動生成的,如:- (void).cxx_destruct { %log; %orig; }該方法方法名以"."開頭,顯然有問題。把"."刪除后即可成功 install)
# 連接xcode打開越獄機器控制臺,查看 logify 輸出打開Xcode->Window->Device→你的設備,下面有Log顯示,但未找到微信logify輸出
# 反匯編工具 hooper 查看偏移量用 hooper 打開之前砸殼后獲得的 WeChat.decrypted 文件,并在左側框搜索 addMessageNode 方法注意:1、要把 WeChat 文件拖入 hooker 中來打開,若使用 hooker 的 File -> open 來打開則會打開失敗!2、打開時會讓你選擇armv7或者arm64,這需要根據你越獄手機的cpu類型來選,一定要和你的手機一致!
# 通過lldb遠程調試iOS App參考:http://www.cnblogs.com/csutanyu/p/3653252.html./debugserver *:微信的pid -a WeChat另開一個終端,輸入3條指令:lldbplatform select remote-iosprocess connect connect://192.168.2.101:微信的pid然后輸入指令獲取進程基地址:image list -o -f輸入:br s -a '0x000c5000+0x01657fb4'
新聞熱點
疑難解答