Wargame/Lenas Reversing

[Lenas Reversing for Newbies] 04

maple19out 2021. 1. 29. 18:28

1. 프로그램 실행

Tuts 4 You 사이트에 첨부된 pixtopianbook107.exe를 실행시켜 pixtopianbook 프로그램을 설치해보자. 설치를 완료한 후 실행하면 다음과 같은 화면이 나온다.

 

프로그램 실행

연락처를 관리하는 프로그램인 듯하다. 그런데 해당 프로그램은 온라인으로 등록이 되어있지 않아서 많은 기능들이 제한되어 있다. Add 버튼을 클릭하여 연락처를 생성하면 4개 이후부터는 다음과 같이 등록하라는 메시지 박스가 나타난다.

 

등록 알림 문구1

 

마찬가지로 Group을 추가하다 보면 3개 이후로는 등록하라는 문구가 나타난다.

 

등록 알림 문구2

 

또한 프로그램 각 창에 "UNREGISTERED"라는 문구들이 곳곳에 보인다. 윈도우의 (1) 타이틀 바, (2) 중간쯤에 있는 문구, (3) Help->About pixtopianbook 항목 등을 보면 확인할 수 있다.

 

(1) 타이틀 바
(2) 윈도우 중간 문구
(3) About pixopianbook

 

이번 Lenas Reversing 문제에서는 앞에서 말한 unregistered version 기능 제한(연락처/그룹 개수 제한) 해제와 unregistered 문구를 적당히 보기 좋게 registered version으로 바꿀 것을 요구한다.

 

2. Debugging(with OllyDbg)

(1) 기능 제한 해제

우선 기능적인 부분들 제한을 해제해보자. OllyDbg로 pixopianbook 프로그램을 열고 F9를 눌러 실행하면 아래와 같다.

 

디버깅 1

현재 상태에서 사용자나 그룹을 더 추가할 경우 추가할 수 없다는 메시지 박스가 나타난다. 메시지 박스는 각각 다음과 같은 문자열을 출력한다.

 

메시지 박스 출력

출력하는 문자열에 초점을 맞추어 어느 부분에서 어떤 조건에 의해 메시지 박스가 출력되는 건지 확인해보자. Search for all referenced strings 기능을 이용하자.

 

그룹 제한 문자열

해당 문자열이 참조되는 부분으로 이동해보자.

 

디버깅 2

위의 동그라미 친 부분을 보면 EAX 레지스터 값과 3을 비교한 후, 3보다 작은 경우 어딘가로 점프하지만 그렇지 않으면 기능 제한을 알리는 메시지 박스가 호출된다. 즉 해당 부분의 JL 명령어를 조건 검사 없이 JMP로 수정하면 MessageBox가 호출되지 않을 것이다. 해당 부분을 다음과 같이 수정하자.

 

명령어 수정

이제 그룹 추가 버튼을 눌러보면 아래와 같이 그룹이 3개를 넘어가도 더 이상 등록하는 메세지 박스도 출력되지 않으며, 정상적으로 그룹이 추가되는 것을 확인할 수 있다.

 

그룹 추가 기능 제한 해제

 

사용자 추가 부분도 문자열 참조를 이용해 메세지 박스 문구가 참조되는 곳을 따라가 보면 다음과 같은 코드를 확인할 수 있다.

 

디버깅 3

마찬가지로 EAX와 4를 비교하고 있고 결과에 따라 바로 밑에서 JL 명령어에 의해 점프한다. 해당 부분을 무조건 점프하도록 수정해주자.

 

코드 수정

이제 사용자 추가 버튼을 눌러보자.

사용자 추가 기능 제한 해제

위와 같이 사용자가 이미 4명 등록되어 있음에도 문제없이 추가가 되는 것을 확인할 수 있다. 기능적인 부분의 패치는 모두 끝났으므로 copy to executable을 이용해 pixtopianbook1로 패치된 내용을 저장하자.

 

(2) "Unregistered" 문구 변경

OllyDbg로 pixtopianbook1.exe를 열어 실행시키면 우선 타이틀바에 "UNREGISTERED VERSION"이라는 문구가 나오는 것을 확인할 수 있다. Memory map 항목에서 "UNREGISTERED VERSION"을 검색해보자.

 

Dump창에서 문자열 발견

해당 부분을 "REGISTERED VERSION!"으로 수정한 후, copy to executable을 이용해 pixtopianbook2.exe를 만들고 실행해보자.

 

문구 수정 성공

이제 pixtopianbook2.exe를 OllyDbg로 열고 이번에는 중간에 출력되는 "This is unregistered version of PixtopianBook. Please register today!"라는 문자열을 수정해보자. 똑같은 방식으로 Memory map에서 해당 문자열을 찾아보자.

 

문자열 발견

똑같은 방식으로 이번에는 해당 부분을 "Registered by maple19out!"으로 수정해보겠다. 그런데 수정하자마자 다시 원래대로 되돌아간다. 타이틀 바의 문자열은 리소스 영역의 문자열이었고, 이번에 수정하려는 문자열은 데이터 영역의 문자열이라는 차이가 있는데 어떠한 원리로 작동이 안 하는 건지 모르겠다... Search for all referenced string 기능을 이용해서 해당 문자열을 찾아보자.

 

문자열 발견

 

해당 부분을 dump 창에서 Ctrl+E(Edit 기능)를 이용해 원하는 문자열로 수정하자.

 

문자열 수정

이 때, 타이틀 바 문자열 패치와 달리 ASCII 형태로 저장되어 있으므로 ASCII 형태로 저장하는 것에 주의하자. copy to executable을 이용해 pixtopianbook3.exe로 저장한 후 실행해보자.

 

문구 수정 성공

마지막으로 Help 메뉴의 About pixtopianbook의 하단에 있는 "Unregistered version v1.07"을 수정해보자. OllyDbg로 pixtopianbook3.exe를 연 후, 첫 번째 문구 수정(타이틀바 문자열)과 똑같은 방식으로 수정하면 된다. 수정 부분을 copy to executable을 이용해 pixopianbook4.exe로 저장하고 실행하면 다음과 같이 문구가 패치된 것을 확인할 수 있다.

 

문구 수정 성공

 

3. Comment

간단한 패치 문제였지만 OllyDbg의 Memory map을 이용해 문자열을 탐색하는 것은 처음이었다. 리소스 영역의 문자열 같은 경우 referenced string 말고도 Memory map에서 탐색이 가능하다는 점을 배울 수 있었다.

반응형