
x64dbg와 같은 디버거를 탐지하기 위한 문서화되지 않은 안티 디버깅 기법 모음으로, 회피 연구를 위한 C++ 코드 샘플과 리버싱 노트를 포함합니다.
디버거를 리버싱하고 이것저것 만지면서 발견한 몇 가지 문서화되지 않은 안티 디버그 트릭들을 모아둔 것에 불과하다.
흥미로운 걸 발견할 때마다 여기에 더 추가할 것이다.
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;
}
더 많은 트릭은 곧.