OutDoorFrog의 리버싱 이야기

Reversing.kr [Music Player] 본문

공부/사이트 문제 풀이

Reversing.kr [Music Player]

OutDoorFrog 2019. 1. 1. 22:03

여러분들 새해 복 많이 받으세요~!



새해 복에 대한 이미지 검색결과



안녕하세요~ 블로그의 주인장 OutDoorFrog입니다.


2학년 2학기도 거의 끝나가고.. 방학도 머지 많아서 조금 긴 쉬는 시간을 가진 것 같습니다.


쉴 때는 확실하게 쉬고 공부할 때는 확실하게 공부하는 게 중요하죠!


Reversing.kr 올클을 향해 같이 나아가 봅시다.



1. 문제 구성


ReadMe.txt를 살펴보시면 문제에 대한 설명이 존재하고

Music_Player.exe의 실행에 필요한 msbvm60.dll도 동봉해서 넣어주신 것 같습니다.

(출제자님의 세심한 배려를 느낄 수 있습니다)


ReadMe.txt의 내용은 이 프로그램에서는 음악을 1분 동안만 들을 수 있게 제한이 걸려있고

1분 초과하여 들어야 하는데 1분 체크 루틴을 모두 우회하면 완벽한 플래그(?)를 볼 수 있다고 
적혀있군요.



2. 파일 실행




적절한 UI 배치.. 무난한 MP3 Player인 것 같습니다.


1분 이상 직접 녹음해서 실행시켜 봅시다.




음 혹시 몰라서 Media Player로도 확인해봤습니다.

1분 제한은 이 프로그램에서만 걸리더군요.

(아 맞다 체크 루틴 우회하는 문제였지)



3. 리버싱



위의 사진을 보고 코더로써 생각하면 1분 이상 실행하고 있는지 판단하는 루틴이 프로그램에 존재할 것이라는 것을 유추할 수 있습니다.


1분이 지나면 메세지박스도 띄워지니까 메세지박스에 관련된 함수도 체크 루틴에 사용되어 

있겠군요.


생각보다 문제가 빨리 풀어질 듯 합니다.



메세지박스 함수에 모두 bp를 걸어두고 프로그램을 돌려봅시다.




1분까지 음악이 재생된 후 BP에 걸렸습니다. IDA에서 한번 살펴봅시다.




CreateFunction 기능과 Rename 기능을 이용해서 감칠맛을 더해봤습니다.




난잡하니 디컴파일해서 봅시다. 



보니 밀리세컨드를 기준으로 1분이 넘었는지 비교하는 것 같네요.




1분이 넘었다면 MsgBox를 통해 1분 미리듣기가 끝이 났다고 알려주네요.




1분 초과해서 들으면 답이 퍼펙트하게 보인다고 했으니까.. 패치를 해봅시다.




0xEA60 == 60000 입니다. 디버거에서 FFFF로 패치해줍시다.




실행쭉 돌려봅시다.






정답이 나왔... (ㅇㄴ)


런타임에러라... 꽤나 성가시네요.





콜스택을 살펴본 결과 4046B9에서 호출한 __vbaHresultCheckObj함수에서 에러를 띄우네요.




이 루틴을 계속 거쳐가면서 인자값이 잘못되진 않았는지 계속 확인하는 것 같습니다.



jmp로 무조건 넘어가도록 만들어서 요 루틴을 거치지 않도록 패치해봅시다.





후킹해야되나 생각도 해봤는데 다행이 패치가 먹히네요.


문제 풀면서 답이 은근히 끊겨나오는 경우가 많았습니다. ㅋㅋㅋㅋㅋ


후딱 다른 문제 풀어야겠네요.

'공부 > 사이트 문제 풀이' 카테고리의 다른 글

Reversing.Kr [HateIntel]  (0) 2019.01.03
Reversing.Kr [Csharp]  (0) 2019.01.03
Reversing.kr [Easy_ELF]  (0) 2018.11.03
CodeEngn.com [Advanced] 2  (1) 2018.09.22
CodeEngn.com [Advanced] 1  (2) 2018.09.18
Comments