[iOS Reverse]logify日志追踪,锁定注入口-控制台查看

前言

logify是theos的一个组件,路径是:

/opt/theos/bin/logify.pl

我们还是以微信红包为例子,根据[iOS Hacking]运行时分析cycript得到的入口文件:

BaseMsgContentViewController.h

ssh连接手机

在Mac上打开终端,用ssh连接手机:

ssh [email protected]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,
    [email protected],
    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來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/feng9exe/p/8178485.html

时间: 2024-10-12 18:03:06

[iOS Reverse]logify日志追踪,锁定注入口-控制台查看的相关文章

iOS应用崩溃日志分析

转自raywenderlich 作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果你跟我一样是个完美主义者,你肯定想将应用做到尽善尽美.于是你打开代码准备修复闪退的问题……但是,从何处着手呢? 这时iOS崩溃日志派上用场了.在大多数情况下,你能从中了解到关于闪退的详尽.有用的信息. 通过本教程,你将学习到一些常见的崩溃日志案例,以及如何从开发设备和

iOS 应用崩溃日志分析

通过本教程,你将学习到一些常见的崩溃日志案例,以及如何从开发设备和iTunes Connect上获取崩溃日志文件.你还将学习到符号化( symbolication),从日志追踪到代码 .你还将学习调试一个在待定情况下会闪退的应用. 让我们开始动手吧! 什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上. 崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的完整堆栈跟踪信息,所以你能从中了解到闪退发生时

iOS应用崩溃日志分析-备用

作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果你跟我一样是个完美主义者,你肯定想将应用做到尽善尽美.于是你打开代码准备修复闪退的问题……但是,从何处着手呢? 这时iOS崩溃日志派上用场了.在大多数情况下,你能从中了解到关于闪退的详尽.有用的信息. 通过本教程,你将学习到一些常见的崩溃日志案例,以及如何从开发设备和iTunes Connect上获

循序渐进看Java web日志跟踪(1)-Tomcat 日志追踪与配置

日志,是软件运行过程中,对各类操作中重要信息的记录. 日志跟踪,不管对于怎么样的项目来说,都是非常重要的一部分,它关系到项目后期的维护和排错,起着举足轻重的作用.项目开发过程中,对日志的记录规则,也将影响到改项目后期维护的难度. 在开发过程中,我们经常遇到的日志记录方式包括有系统输出(System.out,最基础方式),日志框架输出(log4J 等)和分布式日志框架输出等.作为项目的开发者,和后期的管理者来说,对于日志的管理,除了需要知道如何进行日志输出,还需要关注的是,项目后期对日志文件的管理

【转】iOS应用崩溃日志分析

作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果你跟我一样是个完美主义者,你肯定想将应用做到尽善尽美.于是你打开代码准备修复闪退的问题……但是,从何处着手呢? 这时iOS崩溃日志派上用场了.在大多数情况下,你能从中了解到关于闪退的详尽.有用的信息. 通过本教程,你将学习到一些常见的崩溃日志案例,以及如何从开发设备和iTunes Connect上获

iOS应用崩溃日志分析 iOS应用崩溃日志揭秘

转自:http://www.raywenderlich.com/zh-hans/30818/ios%E5%BA%94%E7%94%A8%E5%B4%A9%E6%BA%83%E6%97%A5%E5%BF%97%E6%8F%AD%E7%A7%98 这篇文章还能够在这里找到 英语 Learn how to make sense of crash logs! 本文作者是 Soheil Moayedi Azarpour, 他是一名独立iOS开发人员. 作为一名应用开发人员,你是否有过例如以下经历? 为确保

iOS获取崩溃日志

重要提示:  此文档不再更新.有关Apple SDK的最新信息,请访问文档网站. 来源: https://developer.apple.com/library/archive/qa/qa1747/_index.html 问:如何在没有Xcode调试器的情况下调试部署的应用程序? 答:一旦部署了应用程序,无论是通过App Store还是作为Ad Hoc或Enterprise构建,您都无法将Xcode的调试器附加到它上面.要调试问题,您需要分析设备的崩溃日志和控制台输出. Apple Watch崩

通过slf4j/log4j的MDC/NDC 实现日志追踪

在分布式系统或者较为复杂的系统中,我们希望可以看到一个客户请求的处理过程所涉及到的所有子系统\模块的处理日志. 由于slf4j/log4j基本是日志记录的标准组件,所以slf4j/log4j成为了我的重点研究对象. slf4j/log4j支持MDC,可以实现同一请求的日志追踪功能. 基本思路是: 实现自定义Filter,在接受到http请求时,计算eventID并存储在MDC中.如果涉及分布式多系统,那么向其他子系统发送请求时,需要携带此eventID. 源代码:https://github.c

iOS symbolicatecrash崩溃日志分析

1.保留发布程序的 .app文件 和 .dSYM文件 连同.crash文件放在同一个文件家里面. 2.在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library /PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources 或者/Applications/Xcode.app/Contents/Develope