只是我在逆向和摆弄调试器时发现的一些未公开的反调试技巧的集合。
每当我发现有趣的东西时,都会在这里添加更多内容。
这是我在做 ttd 分析时发现的。它并不是什么真正的反调试功能,只是一种奇怪的文件共享行为,可以用来检测 x64dbg。
据我所见,这个技巧已经存在了大约 10 年,而且在 x64dbg 中仍然没有被修复。
我以前在一些反作弊中使用过它,而且从未真正看到有人谈论它。不过它也没什么大不了的,一旦你知道发生了什么,就很容易修补。
基本上,它会尝试以独占访问方式打开自己的可执行文件。如果其他东西持有该文件的冲突句柄,CreateFileA 就会失败并返回 ERROR_SHARING_VIOLATION。
这并不一定意味着附加了调试器,但在某些情况下,它可以作为一种检测技巧。

// made by metixw ( @metixw )
#include <windows.h>
#include <iostream>
bool walahi()
{
char path[MAX_PATH];
GetModuleFileNameA(NULL, path, MAX_PATH);
HANDLE h = CreateFileA(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (h == INVALID_HANDLE_VALUE) return GetLastError() == ERROR_SHARING_VIOLATION;
CloseHandle(h);
return false;
}
// just an example but if u wanna use it as an anti-debug trick put it in a thread
int main()
{
while (true)
{
if ( walahi() )
{
std::cout << "detected walahi" << std::endl;
system( "pause" );
Sleep(1000);
exit(0);
}
Sleep( 500 );
}
return 0;
}
更多技巧即将推出。