반응형
#define _WIN32_WINNT 0x0501
#include <stdio.h>
#include <windows.h>
void main(int argc, char* argv[])
{
__try {
__asm {
int 3;
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
MessageBox(NULL,"정상","정상",MB_OK);
goto ElSE;
}
MessageBox(NULL,"디버거 발견","디버거 발견",MB_OK);
ElSE:
return;
}
원리
https://ko.wikipedia.org/wiki/INT_(x86_%EB%AA%85%EB%A0%B9%EC%96%B4)
INT 3 명령어는 디버거가 실행중인 프로그램에 브레이크포인트를 설정하기 위하여 사용된다. 다른 INT 명령어들은 2 바이트를 사용하지만 이것은 명령어를 패치하는데 적합하게 1바이트를 사용한다. INT 3의 옵코드는 0xCC이다.
즉 브래이크포인트가걸리면 디버거가 실행중이므로
(원리2 디버거는 bp에서멈춘다)
예외를통해 그걸 확인하고 맞다면 감지 아니면 정상
exe예제파일
설정에서 int 3를 건너뛰기를 누르면된다 (x64dbg)기준
아니면 어셈블리어를 수정해라
반응형
'PC리버싱 > 안티디버깅' 카테고리의 다른 글
Visual Studio 2019로보는 ASLR (0) | 2020.05.20 |
---|---|
1. CheckRemoteDebuggerPresent() Windows API (0) | 2020.05.20 |
Isdebuggerpresent원리에대해서 (0) | 2020.05.16 |
IsDebuggerPresent기법 (0) | 2020.05.15 |
안티디버깅 기법들 (0) | 2020.05.15 |