Wargame/Lenas Reversing

[Lenas Reversing for Newbies] 07

maple19out 2021. 2. 1. 21:33

1. 프로그램 실행

첨부된 MrBills.exe를 실행시켜보자.

MrBills.exe

 

타이틀바에 [Unregistered] 문구가 적혀있다. About을 눌러 추가 정보를 확인해보자.

 

About MrBills

 

Register를 누르면 다음과 같이 이메일과 License number를 입력하여 등록을 할 수 있다. 임의로 입력하고 Register Now 버튼을 누르자 아래와 같은 문구가 출력된다. 

 

register 실패

Register Now 버튼을 눌렀을 때 내부적인 검사가 진행되고 그 결과로 위와 같은 메시지 박스가 출력되는 듯하다. "You have entered an invalid email address of license number"라는 문자열이 참조되는 곳을 위주로 검사를 진행해보면 좋을 것 같다.

 

2. Debugging(with OllyDbg)

OllyDbg로 MrBills.exe를 열고, F9를 눌러 프로그램을 running 상태로 만들자. 이후에 "You have entered an invalid" 문자열 탐색을 통해 참조되는 부분으로 이동해보자.

 

문자열 참조 부분

문자열을 push 하는 명령어 바로 위에 conditional jump가 보이는데 점프를 하게되면 unregistered 문구를 건너뛰고 "Thank you for registering!" 문구를 push 하는 것을 확인할 수 있다. JNZ 명령어 이전에 zero flag가 세팅되는 명령어를 찾아보니 TEST AL, AL이 있는데 CALL MrBills.0040714C에서 EAX 레지스터 값이 바뀔 가능성을 생각해볼 수 있다. (보통 함수가 호출된 후 반환 값이 EAX 레지스터에 저장되기 때문) CALL MrBills.0040714C 부분에 BP를 설정한 후, Register Now 버튼을 눌러 BP에 걸리는지 우선 확인해보자.

 

BP 적중

이제 F7(Step in)을 통해 함수 내부로 들어가보자.

 

함수 내부

함수 내부에는 위와 같이 또 세 가지 함수를 호출하고 하나의 점프문도 존재한다. 주석에는 EAX 레지스터가 변할 가능성이 있다고 판단하여 candidate라고 표기해두었다.

 

EAX 레지스터 변화

F8을 눌러 Step over를 하다 보면 candiadate1에서 EAX레지스터가 0으로 세팅되는 것을 확인할 수 있다. 이후에 AL(=0) 값이 [5076A0]에 저장되고, 계속 실행하다 보면 밑의 0040718E JMP MrBills.00407069에 의해 점프를 하게 된다. 이후에 계속 실행하다보면 결국 Unregister 문자열을 Push 하는 부분으로 프로그램이 진행된다. EAX 레지스터 값이 변화하는 MrBills.00406FD1 지점에 BP를 설정하고 안으로 들어가 보자.

 

candidate 1

디버깅을 진행하다 보면 체크 표시한 부분에서 EAX 레지스터 값이 변화하고 그 밑의 함수로는 사전에 MOV BL, AL, 실행 후에는 MOV AL, BL을 수행하므로 AL 값이 보존된다. 체크 표시된 부분 안으로 더 들어가는 방법도 있겠지만 두 번째 동그라미 부분인 MOV AL, BL을 MOV AL, 1로 바꿔주어 AL에 1이 세팅되도록 수정해보자.

 

패치

F9를 눌러 실행해보자.

 

패치 결과1

 

패치 결과2

위와 같이 정상적으로 패치가 이뤄진 것을 확인할 수 있다.

 

3. Comment

EAX 레지스터 값의 변화를 추적하여 함수 내부로 파고들어 적당한 지점에서 패치를 하여 크랙 하는 문제였다.

 

반응형