如何使用 x64dbg 的跟踪功能加速样本分析

前情提要

最近在分析 PLAY 勒索家族的样本,在加密文件之前,样本首先检查文件的扩展名是否在一个列表里,从而决定之后的加密行为。

为了提升分析难度,也为了降低被杀软检测的风险,这个勒索病毒对执行中使用的字符串继续了编码,因此需要检查的扩展名列表并不是明文保存在样本中的。

不仅如此,与很多勒索病毒不同,扩展名之间并没有连接成整个字符,而是通过循环的方式逐个进行解码,再比较。

勒索样本总共进行了三次不同的循环,解码出了三个不同的列表,包括目录黑名单(不进行加密的目录)、文件扩展名黑名单、以及是否全部加密的扩展名白名单(具有在名单中的扩展名文件内容会全部加密)。

在这三个列表中,第三个列表的长度接近 200,也就是说要进行接近 200 次循环。

因此如果想要获得这个扩展名列表的全部内容,单步调试的方式就显得十分不明智。

因此我想到了调试器的跟踪记录功能,但是之前只是知道这个概念,具体应该如何操作并不清楚。在此记录此次使用的方法,方便后续学习。

代码片段截图

如何使用 x64dbg 的跟踪功能加速样本分析_第1张图片
我截取了循环的代码片段,可以看到这里做了 193 次循环,在调用 DcryptString 解密出当前要检查的扩展名字符串之后,会调用 _wcsstr 函数比较当前文件扩展名和解码出来的扩展名是否相同。

在调用 _wcsstr 之前,会通过 push 操作将两个参数,即要比较的字符串,压入栈中。其中 push ecx 操作压入的就是解码出来的扩展名,也就是要记录的数据。

解决方法

我找到了参考资料 菜鸟的福音-x64dbg完美追踪方案 和 X64Dbg 介绍->表达式

根据以上资料,在调试器中选择 跟踪 -> 步过直到条件满足,填写

如何使用 x64dbg 的跟踪功能加速样本分析_第2张图片
点击确定,程序自动开始执行并记录相关日志。

切换到 日志 选项卡,可以看到记录内容。因为我是在所有 call 命令执行的时候做记录,因此会有一些 ???

如何使用 x64dbg 的跟踪功能加速样本分析_第3张图片


至此,问题解决

你可能感兴趣的:(病毒分析,网络,安全,windows)