首页
社区
课程
招聘
[推荐][原创]菜鸟的福音-x64dbg完美追踪方案
发表于: 2023-11-10 12:09 20657

[推荐][原创]菜鸟的福音-x64dbg完美追踪方案

2023-11-10 12:09
20657

声明:本帖只面向初学者和菜鸟,高手可以略过,一笑置之。
众所周知,破解的关键在于找到关键CALL。破解的两大利器,一个是静态分析的IDA,另一个是动态分析的OD。OD早就不更新了,并且不支持64位系统。现在动态分析主要靠X64dbg了。
X64dbg更新很快,但作者对于帮助文档却惜墨如金,有很多实用的强大功能,都需要自己去摸索。
刚才提到寻找关键CALL,IDA虽然F5生成伪码功能强大,并且可以生成函数调用图,但对于复杂的调用看起来就很不直观。并且IDA只能单个文件静态分析,对于跨模块调用就无能为力。这里着重说下X64dbg的追踪方案。

对于一些简单的程序,可以通过搜索字符串,下API断点等很多方式来查找关键CALL。而有些程序的加密做的比较彻底,导入导出表只有编号没有名称,打开反汇编后一脸懵。并且还在很多地方使用类似call esi的指令来调用,不一行行跟的情况下,很难知道函数间到底是如何调用的。逐行跟的话耗费时间不说,还很考验破解者的功底和耐心。x64dbg提供有追踪功能,也可以生成追踪文件。但如果步进F7追踪的话,生成的文件会很大,并且中间过程每行指令的注释不会保留下来;如果步过F8追踪的话,又会错过很多细节,说不定就会和关键CALL失之交臂。怎样能只追踪我们想要的东西,其它的都略过,或者说先想办法粗定位到关键CALL,然后再逐行分析呢?

重点就在于学会使用条件跟踪。x64dbg提供了强大的表达式功能,奈何帮助文档太拉胯,晦涩难懂,一般人看到都会敬而远之。这里要重点感谢一位大佬,大家可以在网上搜索

X64Dbg 介绍->表达式

,里面对于x64dbg表达式的使用进行了详细讲解,值得反复学习和体会。众所周知,程序就是一堆函数组成,而函数的关键在于参数和返回值。知道了参数和返回值后,对于函数的功能就可以管中窥豹。而利用好条件断点,就可以让我们抓取函数调用时的参数和返回值,让日志只记录我们想要的功能。待找到关键CALL以后,再生成追踪文件进行详细跟。大家都知道函数调用前参数存在ESP+4*n中,而函数返回值存在EAX里。我们就可以根据这些下条件跟踪。



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2023-11-15 04:45 被pexufe编辑 ,原因: 发现漏掉JMP分支语句,对日志条件进行了优化
收藏
免费 22
支持
分享
最新回复 (47)
雪    币: 871
活跃值: (9841)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
2
谢谢.博客是我发的文章. 我用的比较多的是 strstr(utf8(reg/mem/[mem]),"string") != 0
例子:
条件 strstr(utf8(rcx),"xxx.txt") != 0 如CreateFile可以精确断下要打开的文件. 
2023-11-10 13:29
3
雪    币: 6566
活跃值: (4526)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
TkBinary 谢谢.博客是我发的文章. 我用的比较多的是 strstr(utf8(reg/mem/[mem]),"string") != 0 例子: 条件 strstr(utf8(rcx), ...
请教一下,如果是CreateFileW,unicode的情况下,一般是完整路径,我只判断文件名怎么判断
2023-11-10 13:54
2
雪    币: 1570
活跃值: (1403)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
TkBinary 谢谢.博客是我发的文章. 我用的比较多的是 strstr(utf8(reg/mem/[mem]),"string") != 0 例子: 条件 strstr(utf8(rcx), ...

膜拜大佬!您的文章对我帮助和启发很大,自己看x64dbg的帮助文档实在太晦涩难懂了,您的文章浅显易懂又内容丰富,对于我这样的菜鸟太友好啦。第一次发帖,不知道看雪的规则怕违规,否则我一定要把X64Dbg 介绍->表达式,这篇文章的链接贴上去,广而告之。

您说的strstr这个我也尝试了,确实非常简单有效,有了它根据就不需要strmatch插件了。只不过我现在跟的一个程序会生成很多临时文件,都判断的话有点太麻烦了。我这篇只是想帮助大家可以快速的粗定位到关键CALL,想灵活用好x64dbg的表达式,还是要多拜读研究您的那篇文章。

最后于 2023-11-10 14:16 被pexufe编辑 ,原因:
2023-11-10 14:10
0
雪    币: 871
活跃值: (9841)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
5
pxhb 请教一下,如果是CreateFileW,unicode的情况下,一般是完整路径,我只判断文件名怎么判断
可以是 utf16. 建议看看他推荐的这篇文章.或者在官方文档中查看也行.
2023-11-10 14:52
0
雪    币: 871
活跃值: (9841)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
6
pexufe TkBinary 谢谢.博客是我发的文章. 我用的比较多的是 strstr(utf8(reg/mem/[mem]),"strin ...
好好好,能帮助你就行.共勉.
2023-11-10 15:19
0
雪    币: 734
活跃值: (3802)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
稍微大点的软件就不行了
2023-11-10 18:52
0
雪    币: 1570
活跃值: (1403)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
appview 稍微大点的软件就不行了
最好还是配合条件断点等一块使用。你也可以在步进转换条件里加上mod.party(dis.branchdest(cip))==1,这样系统模块内部就会转成步过F8,用户模块才会步进F7。这样可以减少很多系统模块内部的无效跟踪,但我试过有些从系统模块转回用户模块的调用会丢失。
2023-11-10 21:47
0
雪    币: 35726
活跃值: (7155)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
俺的编译版此处增加读写ini机制
可把楼主一网打尽
你还可以输出各个寄存器中的字符串中信息到log窗口
2023-11-11 07:36
1
雪    币: 3059
活跃值: (30876)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢分享
2023-11-11 21:56
1
雪    币: 669
活跃值: (2173)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
11
大佬,分享学习一下可好?
2023-11-13 15:42
0
雪    币: 669
活跃值: (2173)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
12
实际尝试了一下,怎么一直显示设置日志文本或条件时失败呀
2023-11-13 16:01
0
雪    币: 35726
活跃值: (7155)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
钢针 实际尝试了一下,怎么一直显示设置日志文本或条件时失败呀[em_1]
modname是不是没改对应的模块名呢?
2023-11-26 11:29
0
雪    币: 1250
活跃值: (3550)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习了,还可以这样玩
2023-11-28 08:40
0
雪    币: 1853
活跃值: (1923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15


奇怪为什么我的没有步进转换条件那一栏

最后于 2023-12-2 23:50 被自由狼编辑 ,原因:
2023-12-2 23:22
0
雪    币: 1570
活跃值: (1403)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
自由狼 奇怪为什么我的没有步进转换条件那一栏
步进转换条件只有2023.1.25之前的版本才有,新的版本作者把这个功能去掉了。这个功能有利有弊,可以帮助过滤掉一些不相关的系统模块调用,但有时候也会造成漏跟踪。
2023-12-3 00:12
0
雪    币: 25393
活跃值: (4767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
自由狼 奇怪为什么我的没有步进转换条件那一栏
2023.2.23 的版本取消了步进转换功能,然后引入了指令 StepUser 和 StepSystem 来实现用户代码和系统代码的步进
2023-12-3 01:46
1
雪    币: 8761
活跃值: (5220)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
huangyalei 2023.2.23 的版本取消了步进转换功能,然后引入了指令 StepUser 和 StepSystem 来实现用户代码和系统代码的步进
学习了
2023-12-3 10:32
0
雪    币: 35726
活跃值: (7155)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
自由狼 奇怪为什么我的没有步进转换条件那一栏

奇怪,为啥我的多出这么多来?

2023-12-3 11:41
0
雪    币: 1853
活跃值: (1923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
感谢 学习了,再消化消化这些东西
2023-12-3 12:11
0
雪    币: 1853
活跃值: (1923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
暂停条件这里经常用到,也好理解,命令和命令条件总感觉没有理解到位
2023-12-3 12:14
0
雪    币: 25393
活跃值: (4767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
ninebell 奇怪,为啥我的多出这么多来?
这种自行修改的版本,如果不提交PR,跟着作者更新是很折磨人的,除非愿意停留在某个版本上不动,但这样官方的修复及改进也享受不到了
2023-12-3 12:24
0
雪    币: 162
活跃值: (893)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
huangyalei 2023.2.23 的版本取消了步进转换功能,然后引入了指令 StepUser 和 StepSystem 来实现用户代码和系统代码的步进
能详细讲讲这个怎么使用么? 我在命令那里输入之后会闪退。请教如何使用
2023-12-5 06:26
0
雪    币: 25393
活跃值: (4767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
andydau 能详细讲讲这个怎么使用么? 我在命令那里输入之后会闪退。请教如何使用
可以在命令行执行,也可以在跟踪-自动运行命令执行,StepUser会在进入系统模块后暂停,StepSystem反之。至于闪退,我这里偶尔也会有,可能与调试的程序有关吧
2023-12-5 10:10
0
雪    币: 2325
活跃值: (4898)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
huangyalei 这种自行修改的版本,如果不提交PR,跟着作者更新是很折磨人的,除非愿意停留在某个版本上不动,但这样官方的修复及改进也享受不到了
这是他自己改的,故意显摆的
2023-12-5 10:32
0
游客
登录 | 注册 方可回帖
返回
//