2017. 8. 20. 02:39ㆍ0x02 Reverse Engineer/0x01. CodeEngn
문제: 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이 되어야 안티디버깅을 우회 할 수 있다.
'0x02 Reverse Engineer > 0x01. CodeEngn' 카테고리의 다른 글
[CodeEngn Basic 7] WHAT ABOUT THE CHANGE BY 'CodeEngn' (0) | 2017.08.20 |
---|---|
[CodeEngn Basic 6] You Find OEP (0) | 2017.08.20 |
[CodeEngn Basic 3] Do you know VB in Function? (0) | 2017.08.20 |
[CodeEngn Basic 2] Do you know recovery to EXE? (0) | 2017.08.20 |
[CodeEngn Basic 1] Do you Know GetDriveType? (0) | 2017.08.20 |