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

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

2024-4-28 12:15
2284

从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逆向工程实践


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

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

666啊

最后于 2024-4-28 15:06 被StriveMario编辑 ,原因:
雪    币: 242
活跃值: (475)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
tcc0lin 2024-4-28 16:48
12
0
期待下一篇
雪    币: 3207
活跃值: (2644)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
黑屏 2024-4-28 16:54
13
0
期待下一篇
雪    币: 494
活跃值: (1707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
seeeseee 2024-4-29 09:14
14
0
FANGG3 哇脸哥好,之后单独开一篇讲一下,我的实现比较简单,主要讲讲思路吧[em_2]
期待下一篇
雪    币: 19674
活跃值: (29330)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2024-4-29 09:56
15
1
感谢分享
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_gwwykkry 2024-4-30 15:35
16
0
期待下一篇
雪    币: 2134
活跃值: (6752)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
爱吃菠菜 2 2024-4-30 20:29
17
0
少写点哥,  闷声发大财
游客
登录 | 注册 方可回帖
返回