美文网首页
解剖室一:BugTags的控制台日志收集

解剖室一:BugTags的控制台日志收集

作者: 冬季 | 来源:发表于2016-10-11 10:21 被阅读382次
解剖也有美感

BugTags 是目前最好的App运行时状态数据收集的第三方解决方案之一,官网上没有明显位置的简介,所以需要更多了解请移步到BugTags

实验序号:001
实验名称:解剖BugTags的控制台日志收集方式
实验时间:2016年10月10日
实验地点:学霸君(上海)办公室
实验目的:调查BugTags对于控制台的日志收集方案


实验原理、实验流程或装置示意图

实验原理:通过反编译获取对应的逻辑块,对逻辑块代码进行分析


实验流程示意图.jpg

实验设备及材料

实验材料:
a、BugTags SDK Version:1.3.1

实验设备:
a、Hopper (反编译)
b、Xcode (验证结论)


实验方法步骤及注意事项

  1. 实验方法步骤
  • API观察:观察SDK公开API;
  • .o对象观察:观察dump之后获得的.o对象;
  • 伪代码观察:观察关键.o反编译得出的伪代码逻辑;
  1. 注意事项
  • 注意Hopper的伪代码生成在不同platform下可能有所不同;
  • 注意分析目标可能使用的系统API;
  • 注意分析目标可能存在的问题;

实验过程记录

首先,使用classdump或者hopper对BugTags.framework进行分析,如图:

class-dump.png
和大多数第三方提供的SDK一样,BugTags也提供了四种平台下静态库文件,其中x86_64和i386是提供给模拟器使用,ARM提供给真机使用。然后使用otool来查看静态库中的.o对象,如图: 真庆幸一个屏幕装得下

根据上图的结果,我们可以找出疑似Log收集的类BTGLoggerCatcher。当然还可以看到一些SDK内部的其他功能。接着,我们用Hopper来进一步对这个类进行分析,如图:

Function List 1 Function List 2

相关方法很显然有setTrackingConsoleLog:和updateConsoleLogs两个。
分析setTrackingConsoleLog:

ARM7 Platform x86_64

其余两个平台的截图由于没有更多有用的信息,在这里就不放出来了。

接下来,我们可以在之前的function dump中找到对应的三个block:

三个Block

接着,我们在其中一个block反编译出来的伪代码中找到了蛛丝马迹:


蛛丝马迹

显然,我们直接去看一看updateConsoleLog的逻辑应该就可以找到我们需要的结果了:


宇宙真理

从这段伪代码中,我们大概可以看到Bugtags中用到了几个叫asl_xxx的API,于是我在Xcode中搜索了一下找到了asl.h这个头文件,并且查看了一些函数说明,得出猜想,BugTags使用了这些API完成对控制台日志的收集。于是我仿照伪代码写了一段代码来进行了验证。

- (void)query {
    pid_t pid = getpid();
    asl_object_t query = asl_new(ASL_TYPE_QUERY);
    asl_object_t searched = asl_search(nil, query);
    
    asl_object_t msgObj = aslresponse_next(searched);
    
    while (msgObj) {
        if (pid == atol(asl_get(msgObj, "PID"))) {
            long mid = atoll(asl_get(msgObj, "ASLMessageID"));
            long time = atol(asl_get(msgObj, "Time"));
            long timeNano = atol(asl_get(msgObj, "TimeNanoSec"));
            const char *msg = asl_get(msgObj, ASL_KEY_MSG);
            
            printf("pid: %d ASLMessageID: %ld Time: %ld TimeNanoSec: %ld Message: %s\n", pid, mid, time, timeNano, msg);
        }
        msgObj = aslresponse_next(searched);
    }
    
    aslresponse_free(searched);
    asl_free(query);
}

感谢各位看官

相关文章

网友评论

      本文标题:解剖室一:BugTags的控制台日志收集

      本文链接:https://www.haomeiwen.com/subject/mwavyttx.html