[Lenas Reversing for Newbies] 11
1. 프로그램 실행
첨부된 fjprodsetup.exe를 이용해 프로그램을 설치한 후 프로그램을 실행해보자.
사진 파일로 퍼즐을 만들어 주는 프로그램인 듯하다. 메뉴바에서 Desk->Select 항목을 선택하면 다음과 같은 메시지 박스가 나타난다.
이번 문제의 목적은 이전 실습들과 마찬가지로 프로그램을 등록된 상태로 인식하게끔 패치하는 것이다. (Lenas에서는 또한 Unregistered 상태에서의 Window 타이틀바에 (Unregistered) 문구가 나타나는데 왜 안 나타나는지 모르겠다.)
2. Debugging(with OllyDbg)
OllyDbg로 프로그램을 연 후, 타이틀바에 Unregistered 문구가 나타나는 것을 이용하여 문자열 탐색을 해보자.
위와 같이 AL 값에 의해 "Flash JigSaw Producer" 문자열 혹은 "Flash Jigsaw Producer (unregistered)" 문자열이 윈도우 타이틀 바로 설정(SetWindowText() API)된다. 이때 MOV AL, BYTE PTR SS:[ESP+4]로 커서를 옮기면 OllyDbg의 Pane Window에 다음과 같은 내용이 나타난다.
동그라미 친 부분을 보면 004047D3, 00404880에서 004046E0을 호출했음을 알 수 있다. 두 부분에 BP를 설정하고 F9를 눌러 프로그램을 실행해보자.
위와 같이 00404703에 BP가 적중하는 것을 확인할 수 있다. 디버깅 1 캡처를 보면 [ESP+4]의 값을 AL로 옮기는 것을 확인할 수 있는데 위 체크된 부분 위 명령어에서 PUSH EAX를 하므로 결국 EAX의 값을 옮기는 것으로 생각할 수 있다. 위의 CALL 명령어에서 EAX 값이 바뀔 수도 있으므로, 004047CD에 BP를 설정하고 프로그램을 다시 실행해보자.
현재 상태에서 F8을 이용해 디버깅을 진행하다 보면 아래와 같은 것을 확인할 수 있다.
위와 같이 XOR AL, AL을 통해 AL 값을 0으로 세팅하고 RETN 하여 함수가 반환된다. 즉 XOR AL, AL 부분을 패치하여 AL이 0이 아닌 값을 갖도록 하면 디버깅 1 캡쳐에서 등록상태를 우회할 수 있을 것이다. XOR AL, AL을 mov AL, 1로 어셈블리 코드를 수정한 후 F9를 눌러 프로그램을 실행해보면 정상적으로 등록된 것으로 인식되는 것을 확인할 수 있다.
3. Comment
이번 문제에서는 OllyDbg의 Pane Window를 이용하여 보다 편리하게 함수가 호출된 곳을 이동하는 기능을 알아볼 수 있었다.