[CodeEngn Basic 4] Do you know antiDebug?

2017. 8. 20. 02:390x02 Reverse Engineer/0x01. CodeEngn

728x90

문제: This program can detect debuggers. Find out the name of the debugger detecting function the program uses.


바이너리 실행:

 

 [그림 1] 바이너리를 실행하게 되면 이러한 문구가 뜬다.


궁금하다. 바로 뜯어보자.


00408454    E8 B68BFFFF     call 04.0040100F

메인함수 접근하는 주소 


0040104F    FF15 68B14300   call near dword ptr [<&KERNEL32.Sleep>]  ; kernel32.Sleep

00401055    3BF4            cmp esi,esp

00401057    E8 B4710000     call 04.00408210

0040105C    8BF4            mov esi,esp

0040105E    FF15 64B14300   call near dword ptr [<&KERNEL32.IsDebugg>; kernel32.IsDebuggerPresent


IsDebuggerPresent라는 함수가 눈에 보인다.


해당 함수의 반환값에 따라 디버깅을 계속 할 것인지 멈출 것인지를 판별할 수 있다.


디버거에서 프로그램을 실행하지 않고 바로 실행했기 때문에 정상 정상 정상 이라는 문구가 뜨게 된 것이었는데, 그렇다면 디버거에서 실행시켜서 트레이싱을 해보자.


(IsDebuggerPresent는 plugin을 설치해두면 자동 우회 되므로 정확한 실습을 위해서는 plugin을 해제하고 하는 것을 추천한다)


 

 [그림 2] 디버깅 당함 메시지가 뜬다.


IsDebuggerPresent함수는 TLS Callback함수와도 연관성이 있는 경우가 있다.


IsDebuggerPresent의 함수의 반환값은 1또는 0이 되는데, 반환값이 0이 되어야 안티디버깅을 우회 할 수 있다.