반응형
#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 (x86 명령어) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 INT는 x86 중앙 처리 장치를 위한 어셈블리어로서, 인터럽트를 발생시키는 역할을 한다. 이것은 바이트 값으로 구성된 인터럽트
ko.wikipedia.org
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 |