문제를 다운받고, 압축을 풀면 다음과 같이 나온다.
뮤직플레이어는 1분미리듣기가있다는데,
1분을 체크하는 루틴을 뚫으라한다.
노래를 듣고있었는데, 진짜 1분밖에 못듣는다.
역시 EXE32 파일이다. Ollydbg 로 분석을 해보자
함수목록중, 1분이 지났다는 메시지박스를 띄우는 함수를 발견했다.
4개모두 BP 를 걸고, music player 을 실행하고, Attach 해봐야겠다.
노래를 틀고
어탯취 하고, 1분을 넘기면
이렇게 나온다. 이 함수를 한번 분석해봐야겠다.
위에 EAX 와 0xEA60 (60000) 을 비교한다.
60000ms == 60s == 1m 이기때문에, 1분을 검사하는곳인걸 알 수 있다.
1분이 넘어도 들을 수 있게 패치해야겠다.
JL 을 JMP 로 바꾸면, 1분이 넘어도 점프하므로 음악을 끊김없이 들을 수 있다.
이제 우클릭 - Edid - Copy all modfications to executable - 조그만창 우클릭 - Save file
patched 로 저장 후, 노래를 들어보자
런타임 에러가난다... 다시 원래파일을 attach해서 확인해봐야겠다.
원래파일에 노래틀고, attach 하고, 다시 JL 을 JMP 로 수정한뒤, 1분을 넘기자.
딱 요기서 exception 이 걸린다. 콜스택 확인하자
4046BF 에서 호출하는걸 볼 수 있다.
스택에는 리턴주소로 호출주소+4 가 저장된다.
그말은 __vbaHresultCheckObj 에서 exception 을 호출한것을 알수있고.
__vbaHresultCheckOjb 함수를 호출하지못하게,
JGE 를 JMT 로 수정해주자.
[ 최종 ]
1. 올리디버거로 Music Player 열기
2. 4046A6, 404570 사진과 같이 패치
3. 우클릭 - Edid - Copy all modfications to executable - 조그만창 우클릭 - Save file
4. 노래감상
창에 뜬다.