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