[Reversing.kr] Music Player
#REVERSINGReversing.kr의 Music Player 문제풀이
Music Player문제인데 이번엔 GUI 환경이다.
동봉된 ReadMe의 설명은 아래와 같다.
This MP3 Player is limited to 1 minutes.
You have to play more than one minute.
There are exist several 1-minute-check-routine.
After bypassing every check routine, you will see the perfect flag.
MP3 플레이어인데 1분 미리듣기만 가능하다. 1분을 체크하는 부분이 존재하는데 이곳들을 우회해서 1분 넘게 듣도록 하는 것이 목표이다.
실제로 작동하면 1분이 넘어갈 경우 메세지 박스가 출력되면서 음악 감상이 멈춘다.
x32dbg의 문자열 찾기 기능으로 1분 미리듣기만 가능합니다. 부분을 찾고 주변을 살피면 의심스러운 부분이 나온다.
cmp eax, EA60
이 나오는데 EA60을 10진수로 표현하면 60000이다. 보통 프로그래밍에서 1초를 ms로 계산하여 1000으로 표현하는데 1분이면 딱 60000이다.
따라서 40456B의 분기문을 아래와 같이 무조건 분기로 패치하면 1분 검증 분기를 우회할 수 있다.
패치를 완료하고 다시 플레이어로 음악을 재생하면 1분이 넘어가는 시점에서 음악은 계속 나오지만 런타임 에러가 발생한다.
어느 부분에서 런타임 에러가 발생했는지 확인하기 위해서 호출 스택창을 여는데. 여기서 조금 헤맸다.
호출 스택창에서 우클릭하여 의심 되는 호출 스택 프레임 표시를 활성화하여야 정상적으로 진행이 가능하다.
최근 스택에서 70번지대 말고 40번지대가 의심되는데 도착이 4046BF이다. 해당 부분으로 이동하면
4046B9의 함수 호출에서 런타임 에러까지 이어졌다는 것을 의심할 수 있으므로 위의 분기문을 아래와 같이 무조건 분기로 패치하면 끝이다.
2번의 패치를 끝으로 다시 플레이어로 음악을 재생하면 1분이 넘어가는 시점 Flag를 확인할 수 있었다.
정답은 LIstenCare
이었다.