Reverse L04
'Wargame > CodeEngn (Basic)' 카테고리의 다른 글
Reverse L06 (0) | 2012.11.17 |
---|---|
Reverse L05 (0) | 2012.11.17 |
Reverse L03 (0) | 2012.11.16 |
Reverse L02 (0) | 2012.11.16 |
Reverse L01 (0) | 2012.11.16 |
Reverse L04
이름을 찾으라십니다.
문제 파일을 받고 실행해 보겠습니다.
정상이라고 반복적으로 계속 뜹니다.
OllyDbg로 열고 실행해봅니다.
디버깅 당하고 있다고 계속 뜹니다.
디버거 탐지 함수를 통해 계속 감시하고 있는듯 합니다.
위치를 찾아가기가 귀찮습니다.
편하게 string을 찾아서 따라가봅니다.
IsDebuggerPresent 함수를 call 하고 JE를 통해 분기합니다.
IsDebuggerPresent는 디버깅 당하고 있는지를 감지하는 함수입니다.
IsDebuggerPresent 함수의 원형입니다.
함수의 return 값은 다음과 같습니다.
Return value |
Description |
nonzero |
The current process is running in the context of a debugger. |
zero |
The current process is not running in the context of a debugger. |
IsDebuggerPresent는 PEB(Process Environment Block)의 BeingDebugged의 값을 return하는게 다입니다.
PEB의 BeingDebugged의 값을 0으로 patch하면 IsDebuggerPresent 함수는 무용지물이 됩니다.
IsDebuggerPresent 함수를 따라가 보겠습니다.
매우 간단합니다.
User mode에서 FS register는 TEB(Thread Environment Block)를 가리키고 있습니다.
FS에서 offset 0x18 위치에 있는 TIB(Thread Information Block)의 주소를 구합니다.
TIB에서 offset 0x30 위치에 있는 PEB의 주소를 구합니다.
PEB의 offset 0x2 위치에 있는 BeingDebugged의 값을 EAX에 저장하고 함수를 종료합니다.
PEB의 BeingDebugged 값을 0으로 patch 하고 실행해봅니다.
위의 코드에서 BeingDebugged의 주소는 0x7ffd3002입니다.
정상이라고 뜹니다.
Reverse L06 (0) | 2012.11.17 |
---|---|
Reverse L05 (0) | 2012.11.17 |
Reverse L03 (0) | 2012.11.16 |
Reverse L02 (0) | 2012.11.16 |
Reverse L01 (0) | 2012.11.16 |