1. 程式人生 > >[iOS Reverse]logify日誌追蹤,鎖定註入口-控制臺查看

[iOS Reverse]logify日誌追蹤,鎖定註入口-控制臺查看

ember inb 進入 打包成 如何 ash gem out hat

前言

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到桌面或者某個確定的文件夾:

cd  ~/Desktop

新建一個Tweak.xm文件,輸入命令:

touch Tweak.xm

logify

/opt/theos/bin/logify ~/Desktop/Hacking/WeChat/Headers/BaseMsgContentViewController.h >  ~/Desktop/Tweak.xm

前面路徑是你用class-dumpdump出的頭文件中目標文件的地址,關於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日誌追蹤,鎖定註入口-控制臺查看