Iriton's log

[Reversing.kr] Music Player 본문

Reversing/Wargame

[Reversing.kr] Music Player

Iriton 2024. 5. 15. 13:57

1분 재생만 되는 MP3 Player를 1분 이상 재생시켜서 flag를 얻어야 한다.

 

PEiD로 열어 보니 따로 패킹되진 않았다.

 

프로그램을 실행시켜서 원하는 MP3 파일을 열었더니 1분이 됐을 때 팝업창이 떴다.

 

이제 올리디버거로 파일을 열어 봐야겠다.

 

근데 올리디버거로 프로그램을 실행시켜서 MP3 파일을 열려고 할 때 프로그램이 정지되는 현상이 있었다.

백신프로그램이랑 충돌해서 그렇다고 한다. 백신 프로그램을 꺼도 프로그램이 정지되는 걸 보아 코드나 연동 부분에 문제가 생긴 듯하다.

그래서 open을 사용하지 않고 직접 경로를 입력해 주고 재생하였다.

이렇게 했더니 이번엔 디버거가 멈췄다...

 

어쩔 수 없이 구글링 해서 다른 사람들이 찾아둔 주소로 이동해서 문제를 풀었다.

 

CMP로 60000ms(올리디버거에서 단위는 ms이다.) 와 무언갈 비교하는데 이게 1분 재생에 영향을 주는 코드 같았다.

JL(jump if A less than B)로 인해 재생 시간이 B보다 클 경우에는 점프하지 않고 재생을 막는 루틴으로 이어진다.

이때 rtcMsgBox 함수로 인해 1분 이상 재생 불가 경고창이 뜨는 것이다.

 

그럼 JL이 아니라 무조건 점프하는 JMP로 바꾸어 주면 된다.

(실행하면 아까처러 올리디버거 오른쪽 밑에 Paused가 뜨면서 멈추는데 Shift + F7/F8/F9)를 누르면 된다.

이렇게 되면 1분 이상 재생은 되는 거 같은데 경고창이 뜬다.

 

이 에러를 살펴 보기 위해 콜스택을 보면 004046BF가 호출된 후 에러가 발생한다고 한다.

그래서 해당 주소로 가 보면

 

JGE(비교 결과 값이 '0'이건 큰 경우 점프)로 인해 호출이 된다.

이 함수 마저도 JMP로 무조건 점프하게 만들면 에러가 발생하지 않는다고 한다.

 

프로그램을 실행하고 1분이 지나기 전에 두 개의 코드를 바꿔 줬더니 1분이 넘어가면서 Password가 떴다.

 

 

(+ 올리디버거, 프로그램 오류(중단 현상)에 대해서 알아 볼 필요가 있다.)

'Reversing > Wargame' 카테고리의 다른 글

[Reversing.kr] ImagePrc  (0) 2024.05.15
[CodeEngn] Basic RCE - L07  (0) 2024.05.07
[CodeEngn] Basic RCE - L03  (0) 2024.05.07
[Dreamhack] Beginner: simple-operation  (0) 2024.04.02
[Dreamhack] Reversing Basic Challenge #1  (0) 2024.03.27
Comments