首页
社区
课程
招聘
[原创]使用时间无关调试技术(Timeless Debugging)高效分析混淆代码
2022-5-29 23:33 31431

[原创]使用时间无关调试技术(Timeless Debugging)高效分析混淆代码

2022-5-29 23:33
31431
收藏
点赞34
打赏
分享
最新回复 (60)
雪    币: 49
活跃值: (1587)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
flashgg 2022-6-1 14:53
26
0
stlker去trace生成200W行的数据,而且app也是运行在电脑上的,都用了好几分钟,请问,您这个怎么实现这个速度级别的?基础的界面用什么框架或者语言写的?
雪    币: 49
活跃值: (1587)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
flashgg 2022-6-1 20:51
27
0
krash 我使用的是动态二进制插桩(dynamic binary instrumentation),跟frida stalker一样,frida有个很不错的文档stalker,可以参考。稍微麻烦一点是得自己解析 ...

解析load/store相关指令,计算访问内存地址和大小,能说说怎么做的吗?

有malloc之类就记录下来地址大小?这方面有相关的代码推荐吗?

工具的UI部分用什么框架写的。还是完全自主开发

最后于 2022-6-1 20:53 被flashgg编辑 ,原因:
雪    币: 1034
活跃值: (5984)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
那年没下雪 1 2022-6-1 22:00
28
0
niubi
雪    币: 3835
活跃值: (4164)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
krash 4 2022-6-1 22:07
29
0
flashgg stlker去trace生成200W行的数据,而且app也是运行在电脑上的,都用了好几分钟,请问,您这个怎么实现这个速度级别的?基础的界面用什么框架或者语言写的?
回调用户js hook开销太大了吧,理论上应该差不多的。界面是qt,c++实现的。
雪    币: 3835
活跃值: (4164)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
krash 4 2022-6-1 22:14
30
0
flashgg krash 我使用的是动态二进制插桩(dynamic binary instrumentation),跟frida stalker一样,frida ...
解析指令理论上可以直接使用vixl,我后面可能也会改成直接使用vixl。
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
AJISky 7 2022-6-1 23:36
31
0
很高兴国内的安全从业者,有如此思考,能够站在巨人的肩膀上前行,研发的这个工具大大提高分析效率,大部分打工仔都只是着眼于眼下的工作了,整日忙碌,缺碌碌无为。为楼主点赞。其实在国内我们最缺的就是分享精神,而分析不单单是给予别人,也会让自己领悟的更透彻。
雪    币: 242
活跃值: (418)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
XPoy 3 2022-6-3 10:49
32
0
mark下,lz实现了我想做又一直没有做的事情,羡慕,有能力有时间!
数个问题想了解一下,
是用qiling这类,还是qemu自己模拟的?
分析引擎和trace引擎理论上是完全拆分开的两个模块,我的设想是还要有一套固定格式的trace。这样解决跨平台,跨trace工具的问题,之前有了解多套方案,就是行动力太差只有架子没有功能。这个通用格式lz有考虑过吗
这类工具受众太小,我辈又往往不擅长推广,要在小范围分享迟早又变成公开工具。lz以后是要自己使用,还是像vmpstudio做付费的国产逆向工具?
雪    币: 3835
活跃值: (4164)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
krash 4 2022-6-3 19:58
33
0
XPoy mark下,lz实现了我想做又一直没有做的事情,羡慕,有能力有时间! 数个问题想了解一下, 是用qiling这类,还是qemu自己模拟的? 分析引擎和trace引擎理论上是完全拆分开的两个模块, ...
trace是frida类,不是qemu。
导入第三方工具记录的trace这个问题有考虑过,比如qiling,unidbg,ida,lldb这些。模拟器类的trace都有内存回调,可以记录内存,但是调试器只有cpu上下文,如何通过cpu上下文变化逆推内存内容这个问题还得研究,等以后有方案了可能就会着手实现。至于trace格式我认为倒不是什么问题,遇到了修改即可。
工具目前还是自己使用,看能不能用它在公司先搞点kpi。
雪    币: 49
活跃值: (1587)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
flashgg 2022-6-3 21:40
34
0

str x8, [x11, w10, uxtw #3]   ;x8 = 0xf
如果我想保存x11中存储的内容,怎么才能获取到他里边存储的数据总长度,能说个具体的方法吗

str x8, [x9] ;x8 = 0x16f567310; 

这种的还得区分出类型来吧。

或者说,你的程序,只算出了[x11, w10, uxtw #3] 的地址,把那个地址跟x8里边的值对应上了。计算地址这块有什么解决方案?需要自己去实现uxtw吗

最后于 2022-6-3 22:08 被flashgg编辑 ,原因:
雪    币: 8283
活跃值: (4811)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
v0id_ 2022-6-4 11:44
35
0
krash 用户态函数级别的?如果函数是线程入口就是线程级别的?我设计是支持同时trace多个线程和嵌套trace,也就是trace一个函数时可以调用另外一个trace函数。
感谢分享!大佬在trace多线程的时候,是怎么判断当前执行的指令是属于哪个线程的呢,最后生成的trace记录,是按照不同线程分开存放,还是按照指令的执行顺序存放呢
雪    币: 3835
活跃值: (4164)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
krash 4 2022-6-4 22:31
36
0

或者说,你的程序,只算出了[x11, w10, uxtw #3] 的地址,把那个地址跟x8里边的值对应上了。计算地址这块有什么解决方案?需要自己去实现uxtw吗

是这样的,需要自己根据cpu上文计算。

最后于 2022-6-4 22:32 被krash编辑 ,原因:
雪    币: 3835
活跃值: (4164)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
krash 4 2022-6-4 22:35
37
0
v0id_ 感谢分享!大佬在trace多线程的时候,是怎么判断当前执行的指令是属于哪个线程的呢,最后生成的trace记录,是按照不同线程分开存放,还是按照指令的执行顺序存放呢
我的是函数级别的trace,执行这个函数的时候用gettid就能知道线程。trace保存是分文件保存,设计上支持合并多个trace成一个有序的trace。
雪    币: 8731
活跃值: (5488)
能力值: ( LV13,RANK:296 )
在线值:
发帖
回帖
粉丝
sunfishi 4 2022-6-5 07:43
38
0
mark
雪    币: 319
活跃值: (326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jackbow 2022-6-6 07:03
39
0
学习,膜拜大佬
雪    币: 4752
活跃值: (2923)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
LeadroyaL 1 2022-6-7 16:55
40
0
牛逼牛逼牛逼
雪    币: 7
活跃值: (451)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
霸业 2022-6-7 23:44
41
0
krash 我使用的是动态二进制插桩(dynamic binary instrumentation),跟frida stalker一样,frida有个很不错的文档stalker,可以参考。稍微麻烦一点是得自己解析 ...
防御方检测的话,放bx指令 代码段 指令校验 能检测出来 :)
雪    币: 7
活跃值: (451)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
霸业 2022-6-7 23:47
42
0
DiamondH 时间无关有点RR debugger+coredump的感觉,污点追踪就太猛了,有点好奇技术细节,比如如何实现高效的trace记录,污点追踪采用的方法之类的
估计是在每个patch跟踪段指令 ,blx (注入记录数据的代码段) bx lr
相对比于调试器单步跟踪的开销仅仅是几条指令,调试器需要内核和应用层通信,消耗极大的
雪    币: 1119
活跃值: (2029)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
DiamondH 2022-6-8 15:58
43
0
霸业 估计是在每个patch跟踪段指令 ,blx (注入记录数据的代码段) bx lr 相对比于调试器单步跟踪的开销仅仅是几条指令,调试器需要内核和应用层通信,消耗极大的
不是这样的哦,看下stalker实现吧
雪    币: 12
活跃值: (355)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
moonkit 2022-6-9 14:07
44
0
工具发出来呀。
雪    币: 18
活跃值: (886)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bullyxy 2022-6-9 18:17
45
0
krash 我使用的是动态二进制插桩(dynamic binary instrumentation),跟frida stalker一样,frida有个很不错的文档stalker,可以参考。稍微麻烦一点是得自己解析 ...
大佬插桩库不会也是自己写的吧
雪    币: 3835
活跃值: (4164)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
krash 4 2022-6-9 19:53
46
0
bullyxy 大佬插桩库不会也是自己写的吧
用vixl自己写
雪    币: 32
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
然川意 2022-6-9 23:08
47
0
大佬把工具私法给我
雪    币: 7
活跃值: (451)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
霸业 2022-6-10 01:58
48
0
方便请教大佬一下不用keystone和capstone的原因吗,是性能方面的考量吗 :)
另外如果碰到 修改自身代码的壳 ,动态插桩会失效吧 :)
雪    币: 7
活跃值: (451)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
霸业 2022-6-10 12:56
49
0
DiamondH 不是这样的哦,看下stalker实现吧
stalker实现确实不是每个指令前插bx,是以块为基本单位 ,在块前面插bx指令 
雪    币: 7
活跃值: (451)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
霸业 2022-6-10 13:02
50
0
moonkit 工具发出来呀。

这种内部的工具发出来 你想多了

最后于 2022-6-10 20:10 被霸业编辑 ,原因:
游客
登录 | 注册 方可回帖
返回