美文网首页
解剖室二:BugTags的设备信息收集

解剖室二:BugTags的设备信息收集

作者: 冬季 | 来源:发表于2016-10-18 14:41 被阅读46次
收集控

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

实验序号:002
实验名称:解剖BugTags的设备信息收集方式
实验时间:2016年10月18日
实验地点:学霸君(上海)办公室
实验目的:调查BugTags对于设备信息收集方案


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

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


实验流程示意图.jpg

实验设备及材料

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

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


实验方法步骤及注意事项

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

实验过程记录

根据上一篇文章,我们获取了BugTags的.o对象列表

真庆幸一个屏幕装得下
我们可以找出唯一一个疑似关于设备信息的对象就是BTGDeviceInfo。接着,我们用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/lfhtuttx.html