본문 바로가기

모의해킹/리버싱

IsDebuggerPresent를 사용한 안티디버깅 방법 : 레나 챌린지 (Level19)

728x90

오늘 풀 문제들이다. 

 

- Debugger Detected.exe 

프로그램을 실행시키면 정상적으로 작동이 되지만, 올리디버거에 올린 상태에서 실행을 시키면 정상적으로 동작이 되지 않는다.

 

F8로 하나씩 실행시키다 보면 DialogBoxPraramA에서 메시지 박스가 출력이 된다.

user32은 DLL 이다 -> 윈도 운영체제에서 유저와의 어떤 인터페이스를 제공한다.

* user32자체에는 안티디버깅 기법이 걸려있지 않다.

 

Ctrl + N 을 눌러 메시지 박스를 찾아 모든 곳에 브레이크 포인트를 걸어준다.

 

프로그램을 다시 실행시키면 브레이크 포인트가 걸리는 메시지 박스가 있다.

 

커널 스택에 들어가 보면 첫번째 스택에서 호출이 되었다.

 

최종적으로 어디서 호출이 되는지 따라가 보자

 

ctrl + g 을 눌러 [esp]를 따라가 보면 40108C에서 호출이 된 걸 알 수 있다.

 

F8로 실행시키다보면 CreateToolhelp32 Snoapshot 이 있다 이건 프로세스를 스냅샷한다는 의미이다.(스레드 할 수 있음)

그다음 Process32 First을 프로세스를 가져온다 그래서 실행 중인 프로세스 중에 OLLYDBG.EXE가 있는지 검사를 한다.

 

TIP) 이런 경우는 올리디버그 프로그램의 이름을 변경하면 탐지를 못 한다. -> 올리디버그 프로그램 자체 문제가 생길 수 있음

 

- ReverseMe.A.exe

프로그램은 잘 동작이 되지만, 올리디버그로 실행을 시키면 정상적으로 동작이 안 이루어진다.

중간에 코드가 어디서 꼬였다는 의미이다.

 

콜스택을 따라가서 메시지박스 호출하는 위치로 이동을 한다.

IsDebuggerPresent에서 어떤 메시지박스를 호출할지 결정이 되는 거 같다.

 

하나씩 실행을 시키다 보면 EAX에서 1 이나와 true이 되어 점프가 진행이 된다..  EAX를 0으로 수정을 하면 통과가 된다.

 

EAX를 0으로 수정하고 실행을 시키면 정상적으로 프로그램이 실행이 된다.

 

ABCD 프로그램 다 A와 똑같이 진행을 하면 된다.