본문 바로가기

Reverse Engineering

올리디버거(OllyDBG)의 Executable Modules 을 통한 문제풀이


올리디버거 창들 중에 Executable Modules 창이 있다.

현재 불러온 프로세스에서 실행중인 모듈들을 보여준다.

한 프로그램에서 여러개의 모듈(ex. DLL 등)을 사용할 경우

올리디버거는 하나의 모듈만을 트레싱할 수 있기 때문에 제대로 분석할수가 없다.

따라서 Executable Modules 창을 이용해 실행 가능한 모듈을 골라서 중요한 코드에

BreakPoint 를 걸어놓음으로써 해당 코드가 실행될 때에 제어권을 올리디버거로 받아 문제를 해결할 수 있다.


일단 해당문제를 실행시켜보자.

Ezbeat 문제 패스워드 찾기
올바른 패스워를 찾으시오!
난이도 : ★☆☆☆☆

위의 메시지 박스가 뜨며 확인을 누르면

콘솔창 하나가 뜨며 Input Password : 를 입력하라고 뜬다.


올리디버거로 프로그램을 오픈한다.

메시지 박스가 뜨므로 back to user mode 를 이용한다.

Run(F9)을 한다. 메시지 박스가 뜨면 pause(F12)를 한다.

back to user mode(Alt + F9)를 한 후 확인창을 누른다.


그러면 다음과 같은 코드로 이동한다.

00401149  |.  57            PUSH EDI                                    ; /Style
0040114A  |.  68 5CD34000   PUSH CrackMe_.0040D35C       ; |E
0040114F  |.  68 80D34000   PUSH CrackMe_.0040D380        ; |Text = "올바른 패스워드를 찾으시오!.
                                                                                     난이도 : ★☆☆☆☆"
00401154  |.  51            PUSH ECX                                  ; |hOwner
00401155  |.  FF15 4CC14000 CALL DWORD PTR DS:[<&USER32.MessageBoxW>>; \MessageBoxW
0040115B  |.  6A 03         PUSH 3                                     ; /ShowState = SW_SHOWMAXIMIZED
0040115D  |.  68 40D34000   PUSH CrackMe_.0040D340        ; |c:\solve.exe
00401162  |.  FF15 18C04000 CALL DWORD PTR DS:[<&KERNEL32.WinExec>]  ; \WinExec

위의 코드를 보면 WinExec 라는 WinAPI 가 보인다.

이 WinExec 함수는 CreateProcess 와 같이 프로세스를 생성하는 함수이다.

따라서 위의 3줄을 해석해보면 

WinExec 함수를 사용하여 최대창으로(SW_SHOWMAXIMIZED) c:\solve.exe 를 실행시켜라라는 뜻이다.

즉, 우리는 분석하던 CrackMe_2.exe 프로세스가 아니라 solve.exe 프로세스를 분석해야 한다.


따라서 WinExec 함수까지 실행을 한후에 solve.exe 가 실행되면

Attach 로 solve.exe 프로세스를 올리디버거로 불러온다.

E창을 눌러 Executable Modules 창을 연다.


맨 위의 solve 를 클릭한다. 실행영역에 올라온 코드들이다.

조금 아래로 가서 살펴보면

0040105C   .  68 3CD34000   PUSH solve.0040D33C                      ;  ASCII "Input Password : "
00401061   .  E8 28020000   CALL solve.0040128E
00401066   .  83C4 08       ADD ESP,8
00401069   .  E8 2F030000   CALL solve.0040139D
0040106E   .  50            PUSH EAX
0040106F   .  6A 63         PUSH 63
00401071   .  8D55 90       LEA EDX,DWORD PTR SS:[EBP-70]
00401074   .  52            PUSH EDX
00401075   .  E8 69070000   CALL solve.004017E3
0040107A   .  83C4 0C       ADD ESP,0C
0040107D   .  6A 0E         PUSH 0E

정답으로 보이는 값이 보인다.

입력하면 congratulation~!   가 출력된다.