发现程序使用的反调试策略

问题描述

尝试发现恶意程序的反调试行为
以下是使用反调试的恶意程序的一段函数

技术。我无法弄清楚它可能使用了哪些反调试技术。

我的想法:
我看到线条

move dl,0CCh
mov eax,offset _main

然后比较

 cmp [eax],dl

如果它们相等,则调用 theend 结束程序
似乎它在这里做某事但不确定。

enter image description here

解决方法

0xCC 是 enter image description here 指令的操作码。当您在汇编指令上放置断点(我们在这里谈论的是软件断点)时,调试器会将指令操作码的第一个字节更改为 0xCC,代码执行将在该点中断。

您提到的一种反调试技术是尝试检测 _main 块的任何字节是否已更改为 0xCC,如果是这种情况,则可以通过简单的比较轻松检测到。

但是,你仍然需要调试代码,需要使用断点来分析代码,这里的解决方案是使用硬件断点。

在 google 上稍微搜索一下就会显示一些结果,例如 INT 3,它解释了差异以及检测每个差异的技术。