首页
社区
课程
招聘
[原创] 从0开发你自己的Trace后端分析工具: (1) 概述
发表于: 2024-4-28 12:15 7048

[原创] 从0开发你自己的Trace后端分析工具: (1) 概述

2024-4-28 12:15
7048

从0开发你自己的Trace后端分析工具:(1)概述

一、概述

常规而言,在Native层进行逆向分析,有两种途径:静态分析和动态分析。静态分析,通俗来讲,就是使用反编译工具,对ELF文件进行反汇编,提取符号,更强大的工具还可以还原出伪代码,当然这种伪代码的准确性会伴随各种各样的问题,例如:IDA中的JUMPOUT(data_xxxxx)、函数范围判断错误等等。动态分析,则是通过程序断点、插桩等形式,来窥探程序运行时的状态,但是无法对整个程序进行全面的分析。

打个比方,逆向分析是拆解一件毛衣,静态分析拿到是整件毛衣,你可以翻来覆去看他是怎么编织去拆解。而动态分析是拿到了毛衣中的一根线,从这根线找到整件毛衣的线头去拆解。在实际逆向过程中,往往是动静结合的,静态分析拿到线索之后,动态分析验证思路,防御方在这个过程中设置层层阻碍打死结,让你在整件毛衣中解开死结,或者是迷失方向。

那么Trace是什么?Trace是记录整个程序的运行过程,包括指令、寄存器以及内存,记录的粒度可以是函数、也可以是线程。而我认为Trace是从本质上来说是,程序某次运行过程中的唯一路径。伪代码可能会骗人,静态反编译可能会骗人(Self InlineHook),但是Trace不会骗你。

二、采集Trace

在Android平台上,采集Trace的工具有很多,例如:

他们都可以作为我们Trace分析的前端工具,其中会涉及到Anti、效率等问题,这些需要读者去甄别和选择不同的工具,来适配不同的场景。

只要保证一点:Trace格式一致,能被后端工具正常解析。在前辈们的项目中,tenet作为一个IDA插件,它可以来回浏览不同时刻的程序运行状态,也是仅要求了这一点。

三、难点

1. Trace效率

在前端采集过程中,使用不同工具的采集效率大为不同,IDA Trace较Frida Stalker会慢一个数量级左右,具体的原因是插桩实现方式不同导致的,感兴趣的读者可以查找相关资料。如果样本进行了OLLVM控制流混淆、指令膨胀时,大量的控制流代码会大幅增加采集的时间,甚至会导致程序崩溃。

三个解决方案可以减少Trace时长:

  • 不需要的So,不Trace。
  • 在Trace时,插入优化,判断循环、重复的数据,仅采集程序变化的部分。
  • 换台更好的手机(钞能力)

2. 分析效率

在后端分析过程中,面对的可能是上亿条级别的Trace记录,可能会导致内存不足,分析缓慢。我将在下一篇详细说说,整个过程中的建模问题,包括:

  • 函数符号建模
  • 寄存器状态建模
  • 内存状态建模
  • 控制流图建模

四、展望功能

  • 控制流优化
  • 函数调用交叉索引(anti blr)
  • 内存字符串
  • Python插件及脚本系统(联动IDA、Binary Ninja)
  • ...

1

参考

至此感谢@krash前辈
使用时间无关调试技术(Timeless Debugging)高效分析混淆代码

tenet trace format

TTD调试与ttd-bindings逆向工程实践


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2024-4-28 12:19 被FANGG3编辑 ,原因:
收藏
免费 14
支持
分享
最新回复 (21)
雪    币: 2159
活跃值: (4087)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
期待下一篇
2024-4-28 13:01
0
雪    币: 507
活跃值: (1742)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
能不能多讲点trace前端实现
2024-4-28 13:09
0
雪    币: 435
活跃值: (2641)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
seeeseee 能不能多讲点trace前端实现
哇脸哥好,之后单独开一篇讲一下,我的实现比较简单,主要讲讲思路吧
2024-4-28 13:24
0
雪    币: 2484
活跃值: (3256)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
大佬我是你粉丝啊
2024-4-28 14:04
0
雪    币: 1114
活跃值: (2094)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
期待建模
2024-4-28 14:23
0
雪    币: 1392
活跃值: (5152)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
7
好文,希望不要太监
2024-4-28 14:27
0
雪    币: 1392
活跃值: (5152)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
8
FANGG3 哇脸哥好,之后单独开一篇讲一下,我的实现比较简单,主要讲讲思路吧[em_2]
其实没必要中心放在前端。比如火焰图 或者 原来的Android Profiler都可以前端显示。还蛮不错的。
2024-4-28 14:32
0
雪    币: 435
活跃值: (2641)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
9
IamHuskar 其实没必要中心放在前端。比如火焰图 或者 原来的Android Profiler都可以前端显示。还蛮不错的。
ui这部分确实花了点时间,更多的应该是对trace的分析和采集。(文中的前端指的是采集部分哈)
2024-4-28 14:56
0
雪    币: 435
活跃值: (2641)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
10
Ylarod 大佬我是你粉丝啊[em_3]
大佬,你是我爱豆
2024-4-28 14:57
0
雪    币: 4046
活跃值: (3432)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11

666啊

最后于 2024-4-28 15:06 被StriveMario编辑 ,原因:
2024-4-28 15:04
0
雪    币: 442
活跃值: (864)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
期待下一篇
2024-4-28 16:48
0
雪    币: 3841
活跃值: (3414)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
期待下一篇
2024-4-28 16:54
0
雪    币: 507
活跃值: (1742)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
FANGG3 哇脸哥好,之后单独开一篇讲一下,我的实现比较简单,主要讲讲思路吧[em_2]
期待下一篇
2024-4-29 09:14
0
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢分享
2024-4-29 09:56
1
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
期待下一篇
2024-4-30 15:35
0
雪    币: 2141
活跃值: (7221)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
17
少写点哥,  闷声发大财
2024-4-30 20:29
0
雪    币: 650
活跃值: (4197)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
期待下一篇
2024-5-15 15:09
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
大佬,浮点寄存器,还有neon指令怎么解决的啊
2024-7-29 16:36
0
雪    币: 1379
活跃值: (2796)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
感谢分享
2024-8-20 14:43
0
雪    币: 660
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
哥一年过去了 下一篇呢
2024-10-15 10:26
0
雪    币: 660
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
继续呀
2024-10-20 01:34
0
游客
登录 | 注册 方可回帖
返回
//