
リバースエンジニアリングやデバッガをいじっているときに見つけたいくつかの非公開のアンチデバッグトリックのコレクションにすぎません。
面白いものを見つけたら、ここに追加していきます。
これは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;
}
さらなるトリックは近日公開。