zoukankan      html  css  js  c++  java
  • [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到桌面或者某个确定的文件夹:

    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
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    2.Android之按钮Button和编辑框EditText学习
    《DSP using MATLAB》Problem 3.8
    《DSP using MATLAB》Problem 3.7
    《DSP using MATLAB》Problem 3.6
    《DSP using MATLAB》Problem 3.5
    《DSP using MATLAB》Problem 3.4
    《DSP using MATLAB》Problem 3.3
    《DSP using MATLAB》Problem 3.2
    《DSP using MATLAB》Problem 3.1
    《DSP using MATLAB》Problem 2.20
  • 原文地址:https://www.cnblogs.com/feng9exe/p/8178485.html
Copyright © 2011-2022 走看看