문제 파일을 다운받아보니 3개의 파일이 있었다.
-> dll 파일, Music_Player.exe, readme.txt
우선 readme 텍스트 파일을 열어보니
MP3 플레이어가 1분으로 제한되어 있고 1분 이상을 재생할 수 있도록 check routine을 우회해야 하는 것 같다.
실행파일도 실행해보았다.
mp3파일이 있는 경로를 입력하고 음악을 재생하고
59초가 되면 1분 미리듣기만 가능하다는 알림창이 뜬다.
올리디버거로 열어보았다.
함수를 살펴보니
rtcMsgBox를 찾을 수 있었다.
rtcMsgBox가 4번 호출됐고 호출된 네 곳에 모두 breakpoint를 걸어주었다.
다시 실행해주자 창이 떴다.
mp3 파일의 경로를 넣어주고 노래를 재생했다가 일시정지한 후 다시 실행해보았다.
1분듣기가 끝나고
팝업창이 뜨기 전 004045D8 주소의 rtcMsgBox에서 멈춰있는 것을 볼 수 있다.
따라서 004045D8 주소로 도달하지 않도록 해줘야한다.
윗 쪽을 보면 점프해주는 부분이 두 군데 보인다.
0040456B와 0040457C이다.
0040457C에서 점프하게 되면
00404590으로 점프한다.
0040456B에서 점프하게 되면
004045FE로 가게 된다.
따라서 0040456B에서 점프를 해야 004045D8을 실행하지 않고 건너뛸 수 있을 것이다.
JL Music_Pl.004045FE
JL(Jump Less): Operand 1이 Operand 2보다 작은 경우 해당 주소로 점프
Operand 1이 Operand 2보다 작은 경우 004045FE로 점프하게 될 것이다.
비교문을 보면 EAX와 EA60을 비교한다. 이 때 EAX가 EA60보다 작아야 한다.
그럼 00404563에 breakpoint를 걸고 다시 실행해보자.
mp3 파일의 경로를 입력하고 재생하자 바로 중단점에서 음악이 멈추었다.
EAX는 4AE라는 값을 가지고 있다.
EAX가 항상 작도록 EA60을 FFFF로 바꿔주고 실행해보았다.
004045FE로 점프한 것을 확인할 수 있다.
실행이 되다가 음악이 59초가 되면 프로그램이
754AB812에서 멈춘다.
ALt+k를 눌러 콜스택을 보았다.
004046BF 바로 위에서 vbaHresultCheckObj 함수가 호출된 것을 볼 수 있다.
그 위치로 이동해보았다.
위의 JGE에서 점프를 하게 되면 이 함수가 호출되지 않을 것이다.
JGE를 JMP로 바꿔주었다.
다시 실행해보았다.
패스워드가 보인다.