파라미터로 라이센스 루틴 추적 : 레나 챌린지 (Level 11)
프로그램을 실행시키면 원하는 그림을 퍼즐로 만들어 게임을 하는 프로그램이다.
원래 있는 그림 말고 새로운 그림을 추가를 하려면 라이선스가 등록이 되어있야 추가를 할 수 있지만, 프로그램을 보면 라이선스를 등록할 수 있는 공간이 존재하지 않는다.
• 분석 시작
올리디버거에 프로그램을 올린 다음 문자열 검색을 통해 "For registered users only" 문구를 검색해준다.
해당 분기점에서 브레이크 포인트를 걸어준다.
ZFlag가 1이 키 때문에 JE가 점프가 되면서 "For registered users only"가 실행이 되기 때문에 JE를 JNZ로 수정을 한 다음 저장을 해준다.
정상적으로 새로운 이미지를 올릴 수 있다.
이런 방식으로도 가능하지만 계속 라이선스를 검색할 수 있기 때문에 루틴 추적하는 곳을 변경해 보자.
- 루틴 추적하기
문자열 검색을 통해 해당 루틴 위치로 이동을 한다.
(원래 프로그램 상태바에 Flash jigsaw Proucer <unregistered>가 적혀 있다)
스택을 보면 이 루틴을 호출했던 위치를 알 수 있다.
FFFFFF00 이 스택에 쌓여 있으므로 mov AL, BYTE PTR SS:[ESP+4]에서 BYTE 이기 때문에 00이 들어있다.
해당 CALL 함수에서 체크하는 루틴을 호출을 한다.
**우리가 찾아야 하는 것은 EAX에 FFFFFF00이 호출이 된 곳을 찾아야 한다.
그렇기 때문에 PUSH EAX가 바로 위에 보인다. 즉, 그 CALL에서 받아와 EAX에 저장을 한다는 것이다.
F8로 실행을 시키다 보면 XOR AL, AL에서 XOR을 한 다음 RETN을 하면 PUSH EAX로 가게 된다.
XOR AL, AL을 mov AL, 1로 수정을 해준 다음 파일을 저장한다.
새로운 이미지를 추가할 수 있게 된다.