본문 바로가기

REVERSING/reversing.kr

[reversing.kr] Music Player

1분을 넘기지 못하는 MP3 플레이어다. 1분을 넘기면 flag가 뜨는 것 같다.

우선 Music_Player.exe을 실행시키고 1분이 되자

창이 하나 뜬다.

일단 디버거툴로 까서 창을 띄우는 부분을 확인하면 될 거 같은데 저번에 지뢰찾기 리버싱을 하여 지뢰찾기의 게임 상 흘러가는 1초를 실제 1초보다 느리게 흘러가게 하도록 한 적이 있다. 이때 보통 프로그램 상에서 시간의 단위는 ms라는 것을 알았다. 그래서 IDA로 까서 0x0EA60을 검색해보았다.

바로 0x0EA60과 비교하는 부분이 나왔다.

여기서 좀 더 살펴보면 될 것 같다.

일단 404590로 가보았다.

call하는 함수들을 보았을 때 _vbaVarDup는 무엇인지 잘 감이 안 잡히고 rtcMsgBox는 이름 그대로 메시지 박스일 것 같다. rtcMsgBox가 호출되는 다른 곳을 더 가보자

일단 저 두군데를 가보자


_vbaFreeVarList라는 함수가 호출된다. 프로그램이 음악 재생 시간이 1분이 되면 창을 띄우고 시간도 00:00으로 초기화되고 상태바(재생 위치)도 처음위치로 돌아가는데 함수 이름으로 보아 아마 그런 역할을 해주지 않을까 싶다.

올리디버거로 까서 40455D (EA60과 비교해주는 부분)에서 그냥 EA60을 더 큰 수로 바꾸어보았다.

내가 재생시킬 노래가 총 437초라서 그만큼을 비교하도록 해보았다.

에러가 뜬다. 프로그램에 00:00/01:00에서 01:00부분을 늘려도 보았지만 쓸모없는 짓이다.

보면 404590에서 rtcMsgBox를 호출시켜 창을 띄우는 부분으로 점프하지 않고 _vbaHresultCheckObj라는 함수에 의해 런타임 에러를 낼 것 같다. 저 함수가 어떻게 작동하는 지 알아내면 될 거 같은데 여기서 계속 헤매었다_혹시나 해서 비교하는 부분을 test로도 바꾸어 보고 실행시키고 xor로도 바꾸어 실행시켰었는데

저렇게 뜬 적이 있었다. 그래서 에러 뜬거 상관안하고 신나서 제출했는데 틀렸다.^0^

다시 내려가면서 _vbaHresultCheckObj를 호출하기 전에 점프 뛰는 부분에 무슨 일을 하는 지 보다가 

함수 이름이 굉장히 매력적인 부분을 발견했다CheckObj함수 때문에 에러창이 뜨는 거라 생각했는데 그 전에 FreeObj 함수를 호출시키는 부분을 찾았다. 그래서 혹시 모르니 그냥 FreeObj로 무조건 점프뛰도록 바꾸어보았다.

그리고 실행시켜보았는데

정답이 떴다. 좀 어쩌다 걸린 거 같아 다른 블로그들을 찾아보니 브포걸면서 어디로 리턴이 되는지 찾아 풀었다. 앞으로는 차근차근 제대로 파악하며 풀어보자ㅠ▽ㅠ

'REVERSING > reversing.kr' 카테고리의 다른 글

[reversing.kr] Easy Unpack  (0) 2017.01.02
[reversing.kr] Easy Keygen  (0) 2016.12.30
[reversing.kr] Easy Crack  (0) 2016.12.23