본문으로 바로가기

[keygen] Lena tutorial 03-1 writeup, 풀이

category Reversing/Keygen 2018. 7. 17. 13:16

Lena tutorial 03-1



RegisterMe.exe가 어떤 기능, 행위를 하는지 알아보기 위해 실행시켜 보자.

아래와 같이 실행될 것이다.









"Remove the nags to register, This will make program fully registered :))"

문제는 Nags를 지우면 된다고 한다. Nag는 귀찮게 하는 것들로 Lena tutorial 03에서는 Messagebox들을 의미한다.

즉, Messagebox가 나오지 않게 우회해야한다.



가장 먼저 진행할 것은 패킹 여부와 어떤 언어로 RegisterMe.exe가 작성되었는지 확인해야한다.

PEiD를 사용하면 위 두 정보를 모두 뽑을 수 있다.





패킹은 되어있지 않고, MASM32와 TASM32로 작성되어있음을 확인할 수 있다.

MASM32는 microsoft assembler이고, TASM32는 turbo assembler이다.



더 자세하고 정확하게 RegisterMe.exe를 확인하고, 어떤 API 함수들을 사용했는지 보기 위해 IAT(Import Address Table)을 확인할 것이다.

IAT는 PE Header 정보에 저장되어 있다. PEview를 통해 PE Header 정보를 확인할 것이다.





IAT에 함수들이 충분히 많고, 함수들이 깨져 있지 않으므로 정확히 패킹되어 있지 않은 프로그램이라고 간주할 수 있다.

이제 패킹여부, 언어, IAT를 확인했으니 ollydbg를 이용한 디버깅을 진행하면 될 것이다.


디버깅을 시작할 번지도 PE Header를 통해 찾을 수 있다.

IMAGE_OPTIONAL_HEADER 구조체의 Image base, Base Of Code를 유심히 보자.




우리가 분석할 주소의 시작 번지는 Image Base + Base of Code의 번지이다.

0x00400000 + 0x00001000 = 0x00401000 번지이다.



이제 우리가 지금까지 얻은 정보를 바탕으로 분석을 진행한다.

디버는 Ollydbg를 사용한다.


0x00401000번지부터 분석을 시작한다.





0x0040101F번지에서 Messagebox를 호출한다.

Messagebox의 Title은 "Register Me', Text는 "Remove the nags to register, This will make program fully registered :))"이다.

우리가 처음 RegisterMe.exe를 실행했을 때 만나는 Message box이다.



위 메세지 박스를 출력하지 않기 위해 EP(Entry Point)를 재지정하는 방법을 사용할 것이다.

현재 EP는 0x00401000이지만, EP를 0x00401024로 지정하면 처음 나오는 Messagebox를 우회할 수 있다.


ollydbg에서 PE Header를 보기위해 메뉴 밑의 M(Memory Map)을 클릭한다.




M(Memory map)을 선택하면 아래와 같은 화면이 나온다.

처음 디버깅을 진행하기 전에 PE Header를 분석한것처럼 이번에도 PE Header를 분석하기 때문에 PE Header를 클릭한다.





0x004000C0는 PE Header의 시작 부분이다. opcode로 C0 00 00 00 이다.

IMAGE_OPTIONAL_HEADER 부분이라고 생각한다. 

디버거가 잡는 Entry point는 Image base 와 AddressOfEntryPoint의 합으로 인해 EP가 0x00401000으로 지정되었다.

우리는 EP를 0x00401024로 변경하고 싶어한다. 따라서 AddressOfEntryPoint를 1024로 수정하면 EP가 0x00401024번지로 변경된다.




디버거가 지정하는 첫 실행지점은 oep(AddressOfEntryPoint) + Image Base이다.

oep를 1024로 아래와 같이 수정한다.




little endian 방식을 사용하므로 0x24, 0x10 순서대로 진행되어야 한다.

위와 같이 수정을 한 후 저장을 한다. 저장파일을 ollydbg에 올리면 EP가 0x00401024로 변경된 것을 확인 할 수 있다.




이로써 첫번째 PE 구조를 이용하여 Messagebox는 우회하였다.


0x00401034번지에서 인자를 0,0,0,A를 넘기고 Register.00401052를 호출한다.

0x00401034번지를 실행하면 아래와 같은 화면이 나온다.




0x00401047번지에서 Messagebox를 호출한다.

Messagebox의 Title은 "Register Me', Text는 "Oops! I am not registered"이다.

아래와 같은 화면이다. 




위에 나오고 있는 Messagebox 또한 우회해야한다.

필요없는 코드(Messagebox api를 호출하는 부분)은 모두 NOP padding하면 된다.


NOP 명령어는 아무것도 하지 않는 명령어이다.

의미 있는 명령어가 나올때까지 실행한다.




NOP padding을 하면 아래와 같은 화면이 나오고 성공적으로 Messagebox를 우회한것을 확인할 수 있다.













'Reversing > Keygen' 카테고리의 다른 글

[keygen] abexcm1 writeup, 풀이  (0) 2018.09.11
[keygen] Lena tutorial 01, 02 writeup, 풀이  (0) 2018.07.10
[keygen] FSC_Level1 writeup, 풀이  (0) 2018.07.08