[iOS Reverse]logify日誌追蹤,鎖定註入口-控制臺查看
前言
logify是theos的一個組件,路徑是:
/opt/theos/bin/logify.pl
我們還是以微信紅包為例子,根據[iOS Hacking]運行時分析cycript得到的入口文件:
BaseMsgContentViewController.h
ssh連接手機
在Mac上打開終端,用ssh連接手機:
ssh root@xx.xx.xx.xx
輸入密碼:
alpine
關於如何連接手機,請參考我之前的[iOS HACKING入門]微信註入。
獲取BaseMsgContentViewController.h``中發消息方法的入參
在Mac上新建一個終端窗口,進入終端,按command+N
cd ~/Desktop
新建一個Tweak.xm
文件,輸入命令:
touch Tweak.xm
logify
/opt/theos/bin/logify ~/Desktop/Hacking/WeChat/Headers/BaseMsgContentViewController.h > ~/Desktop/Tweak.xm
前面路徑是你用class-dump
dump出的頭文件中目標文件的地址,關於class-dump
有問題的話,可以參考我的博客:
[iOS Hacking]用class-dump獲取頭文件
打開生成的剛剛創建的Tweak.xm
文件,可以看到剛剛的命令 hook到了這個類所有的方法,
並且在方法中註入了 log,打印了方法的入參和返回值。下面是Tweak.xm的一部分代碼:
%hook BaseMsgContentViewController
- (void)setM_badRoomLogicController:(BadRoomLogicController *)m_badRoomLogicController { %log; %orig; }
- (BadRoomLogicController *)m_badRoomLogicController { %log; BadRoomLogicController * r = %orig; HBLogDebug(@" = %@", r); return r; }
- (void)setM_bIsInMainFrame:(_Bool )m_bIsInMainFrame { %log; %orig; }
- (_Bool )m_bIsInMainFrame { %log; _Bool r = %orig; HBLogDebug(@" = %d", r); return r; }
- (void)setM_searchScene:(int )m_searchScene { %log; %orig; }
- (int )m_searchScene { %log; int r = %orig; HBLogDebug(@" = %d", r); return r; }
- (void)setM_shareContacts:(NSMutableArray *)m_shareContacts { %log; %orig; }
- (NSMutableArray *)m_shareContacts { %log; NSMutableArray * r = %orig; HBLogDebug(@" = %@", r); return r; }
- (void)setM_msgReceivingTipsView:(UIView *)m_msgReceivingTipsView { %log; %orig; }
- (UIView *)m_msgReceivingTipsView { %log; UIView * r = %orig; HBLogDebug(@" = %@", r); return r; }
- (void)setGesture:(WXGesture *)gesture { %log; %orig; }
- (WXGesture *)gesture { %log; WXGesture * r = %orig; HBLogDebug(@" = %@", r); return r; }
- (void)setM_LockerTimer:(MMTimer *)m_LockerTimer { %log; %orig; }
- (MMTimer *)m_LockerTimer { %log; MMTimer * r = %orig; HBLogDebug(@" = %@", r); return r; }
- (void)setToolView:(MMInputToolView *)toolView { %log; %orig; }
- (MMInputToolView *)toolView { %log; MMInputToolView * r = %orig; HBLogDebug(@" = %@", r); return r; }
- (void)setM_updateTimeLabelTimer:(MMTimer *)m_updateTimeLabelTimer { %log; %orig; }
- (MMTimer *)m_updateTimeLabelTimer { %log; MMTimer * r = %orig; HBLogDebug(@" = %@", r); return r; }
- (void)setM_backgroundThreadDelegate:(__weak id <BaseMsgContentInBackgroundThreadDelgate> )m_backgroundThreadDelegate { %log; %orig; }
- (__weak id <BaseMsgContentInBackgroundThreadDelgate> )m_backgroundThreadDelegate { %log; __weak id <BaseMsgContentInBackgroundThreadDelgate> r = %orig; HBLogDebug(@" = 0x%x", (unsigned int)r); return r; }
- (void)setM_delegate:(__weak id <BaseMsgContentDelgate> )m_delegate { %log; %orig; }
- (__weak id <BaseMsgContentDelgate> )m_delegate { %log; __weak id <BaseMsgContentDelgate> r = %orig; HBLogDebug(@" = 0x%x", (unsigned int)r); return r; }
具體來分析一句:
- (_Bool )m_bIsInMainFrame { %log; _Bool r = %orig; HBLogDebug(@" = %d", r); return r; }
其中%log; _Bool r = %orig;
表示打印函數的返回值;
r=%orig;
表示r=執行原來的代碼得到的返回值。
將hook到的Tweak.xm
打包成.deb
文件安裝到手機
在Mac終端中新建一個deb項目,將hook到的這個Tweak.xm
文件,替換這個新deb項目中的Tweak.xm
文件。
然後用theos
打包並安裝到手機中。
關於,如何用thoes
打包並安裝到手機,請參考我的博客:[iOS HACKING入門]微信註入
註意在打包的時候,可能會出現找不到某個類的提示,這個時候,只需要把這個類從dump出來目標頭文件中刪除即可,然後重新生成Tweak.xm文件:
~/Desktop/Hacking/WeChat/Headers/BaseMsgContentViewController.h > ~/Desktop/Tweak.x
查看手機日誌
安裝上一步的deb項目後,手機連Mac,打開Xcode,然後查看設備控制臺:
Xcode->Window->Devices
進入設備界面,選擇剛剛安裝了上一步deb包的設備:
點擊左下個的那個箭頭,打開日誌控制臺:
打開控制臺:
打開微信,進入群聊界面,用另一個手機在這個群裏發送一條消息,再次向群裏發消息觀察手機控制臺輸出。
可以看到打印了很多東西,這就是剛剛hook出的頭文件,在裏面註入了NSLog
,打印了方法的入參以及返回值:
分析日誌:
將上一步控制臺的日誌,全選,粘貼在文本編輯器中,便於分析。
分析發現,有一個方法接收消息的方法被調用了:
addMessageNode: layout: addMoreMsg:
並且就連方法的入參也一起被打印出來了:
分析一下參數:
addMessageNode
對應的參數是一些鍵值對:
{
m_uiMesLocalID=26,
m_ui64MesSvrID=3286135181021621546,
m_nsFromUsr=7820056698@chatroom,
m_nsToUsr=av*or~6,
m_uiStatus=4,
type=1,
msgSource="<msgsource>
<silence>0</silence>
<membercount>3</membercount>
</msgsource>"
}
其中type
是消息類型,我們用別的手機在這個群裏發一個紅包,查看控制到日誌,找到紅包消息的type是:49
layout
:對應的參數是BOOL
類型,值為YES
;
addMoreMsg
:對應的參數也是BOOL
類型,值為NO
;
至此,我們已經鎖定了註入入口函數:
addMessageNode: layout: addMoreMsg:
但是,這個不是我們真正要hook的函數!
因為,如果在群聊界面BaseMsgContentViewController
中hook這個接收消息的函數,會存在很大的局限性:
只有進入到群聊界面才能搶紅包
為了在聊天列表界面也能搶到紅包,接下來再做更加深入的探究。
請關註我的[iOS Hacking]系列文章,將會不定期更新!
作者:CGPointZero
鏈接:https://www.jianshu.com/p/582edd6e4805
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
[iOS Reverse]logify日誌追蹤,鎖定註入口-控制臺查看