前言
今天學習的是跟蹤函式呼叫,什麼意思呢,舉個例子,如果想做乙個微信自動搶紅包的外掛程式,就需要寫這麼乙個功能,當紅包來了的時候,自動觸發微信的搶紅包函式。好,那咱就先找到這個函式。
對映埠
$ sh usb.sh
forwarding local port 10001 to remote port 22
incoming connection to 10001
另起一終端登入
$ sh logwww.cppcns.comin.sh
找到微信安程式設計客棧裝路徑
-a|grep mobile
8636 ?? 0:35.91 /var/mobile/containers/bundle/application/eb02dc6d-ebe5-4be8-92ce-b9abe75b3c3e/wechat.app/wechat
順便檢視一下微信的 bundle id,建立tweak的時候會用到
通過 cycript 注入 微信
~ root# cycript -p wechat
執行命令檢視info 資訊,查詢 cfbundleidentifier 獲取 bundle id
cy# [[nsbundle mainbundle] infodictionary].tostring()
cfbundleidentifier = "com.tencent.xin";
現在脫殼,(因為是從app store上**的)
~ root# dyld_insert_libraries=dumpdecrypted.dylib /var/mobile/containers/bundle/application/eb02dc6d-ebe5-4be8-92ce-b9abe75b3c3e/wechat.app/wechat
脫殼成功,退出登入手機狀態
exit
將檔案拷貝出來
$ scp -p 10001 root@localhost:/var/root/wechat.decrypted wechat
檢視是否脫殼成功
$ otool -l wechat | grep cryptid
cryptid 0
匯出微信標頭檔案
$ class-dump -h wechat -o wechatheaders
然後來到微信有紅包的聊天介面,通過reveal 檢視當前介面的controller 是basemsgcontentviewcontroller
然後找到剛剛匯出的 basemsgcontentviewcontroller.h 檔案開啟,我去,有五百多個函式.怎麼辦,怎麼知道那個是咱要用的函式?
有乙個辦法,那就是建立乙個tweak工程,tweak.xm 檔案修改成如下內容
%hook basemsgcontentviewcontroller
- (void)touchesbegan_tableview:(id)arg1 withevent:程式設計客棧(id)arg2
...%end
上面三個點代表那五百多個函式。很恐怖吧。
重點來啦,logify.pl指令碼,是安裝theos的時候自帶的,該指令碼用程式設計客棧來注入nslog來列印方法的入參和出參。(就是在所有的方法裡面加 log)
位置在
/theos/bin/logify.pl
這是替身,真實路徑在
/theos/vendor/logos/bin/logify.pl
在終端執行命令
$ logify.pl basemsgcontentviewcontroller.h > tweak.xm
ps: 能夠執行logify.pl 命令是因為在 .bash_profile 檔案中新增了
export theos=~/theos
export path=$theos/bin:$path$
檢視剛剛生成tweak.xm 檔案
注意紅框的位置
這樣多方便,不需要乙個個去寫了。用新生成的tweak.xm 檔案替換 tweak工程生成的tweak.xm檔案
新建乙個工程,在終端輸入
```nic.pl
總結本文標題: ios逆向教程之跟蹤函式呼叫詳解
本文位址:
iOS逆向教程之動態除錯詳解
前言 有時候想更了解別人app的呼叫流程,就需要在app執行的時候進行動態除錯。動態除錯指的是將程式執行起來,通過下斷點 列印等方式,檢視引數 返回值 函式呼叫程式設計客棧流程等。下面話不多說了,來隨著小編一起看看詳細的介紹吧 xcode的動態除錯原理 首先了解一下 xcode 編譯和偵錯程式的發展...
iOS開發教程之UI UIWindow
ios開發教程之ui uiwindow。選擇single view application 初學我刪除了viewcontroller.h和viewcontroller.m的檔案準備自己建立 選擇new file 選擇 cocoa touch class 輸入類的名字,因為我想建立乙個根檢視,所以su...
delphi初級教程之delphi斷點除錯一
所謂斷點,就是在程式 的某一行上設定乙個標記,程式執行到這裡將暫停,由調 試器接管對程式的控制。使用斷點與使用 runto cursor 命令有些相似,都是執行到某 一行後暫停。不同的是,程式中可以設定多個斷點並且能夠給斷點設定條件。斷點通常設定在有疑點的區域。在遇到斷點之前,程式以全速執行。遇到斷...