-
[reversing.kr] Music Player 풀이Wargame/reversing.kr 2021. 2. 9. 20:31
1. 프로그램 분석
다음과 같이 3개의 첨부된 파일이 있다.
일단 ReadMe.txt파일을 열어보자.
다 읽어봤으면 Music_Player.exe를 실행시켜 보자.
위와 같은 윈도우가 나타난다. 말 그대로 MP3 Player의 기능을 수행하는 듯하다. Open 버튼을 클릭하면 파일 열기 대화 상자가 나타나는데 임의의 mp3 파일을 선택한 후 재생 버튼을 눌러보자.
위와 같이 1분이 지나면 1분 미리듣기만 가능하다는 메시지 박스가 출력된다. ReadMe.txt 내용을 바탕으로 이번 문제에서는 1분이 지나도 정상적으로 노래가 재생되도록 패치를 해야 한다.
2. Debugging
디버깅을 진행하기에 앞서 PEiD에 해당 프로그램을 넣어보자.
해당 프로그램은 Visual Basic으로 작성된 것을 확인할 수 있다. 이제 OllyDbg로 디버깅을 해보자. 1분이 지났을 때 메시지 박스가 출력된다는 점에 착안하여, search for intermodular call 기능을 이용해 VB의 메세지 박스 호출 API인 rtcMsgBox에 BP를 설정하고 F9를 눌러 프로그램을 실행하여 노래를 재생해보자. 1분이 지나자 다음과 같은 곳에서 BP에 적중한다.
이때 스크롤을 조금 올려보면 파란색 체크표시 한 부분에서 점프를 했으면 1분 듣기만 가능하다는 메시지 박스를 호출하는 부분을 건너뛸 수 있을 것이다. 프로세스를 다시 실행한 후, 체크 표시한 부분을 JL -> JMP로 바꾸어 무조건 점프를 하도록 설정한 후 다시 실행해보자.
그러자 위와 같이 에러가 발생한다. 다시 OllyDbg로 코드를 살펴보면 코드를 패치한 부분 이외에도 많은 conditional jump가 있는 것을 확인할 수 있고, BP를 걸고 실행했을 때 일정 주기로 계속 BP에 적중하는 것을 확인할 수 있다. 이번 문제의 목적이 1분을 넘기는 것이므로 1분 이전에서의 분기 상황과 동일하도록 모든 conditional jump를 패치해주자. 예를 들어 10초쯤에 conditional jump BP에 적중했을 때 점프를 하는 경우라면 JMP로, 그렇지 않은 경우라면 NOP으로 전부 바꾼 후 다시 실행해보자.
위와 같이 1분이 지나자 "Password is *****"와 같은 문자열로 타이틀바가 바뀌는 것을 확인할 수 있다. flag인 줄 알고 바로 달려가서 인증을 해봤지만 틀렸다고 한다. 패치 전 코드를 천천히 살펴보니
위와 같이 conditional jump 중 특정 조건을 만족했을 때 StrCopy가 되는 부분이 있는 것을 확인했다. 해당 부분만 다시 JLE로 유지해주면 기존에 나타났던 password is 문자열 앞에 "LI"라는 문자열이 붙으며 flag 인증이 되는 것을 확인할 수 있다.
3. Comment
한창 reversing.kr 문제들을 풀다가 Music Player 문제에 막힌 후 잠시 보류했었다. 최근에 내공을 쌓고 때마침 Lenas Reversing에서 VB 디버깅 실습을 진행해서 자신감을 얻어서 다시 도전했는데 의외로 쉽게 풀려서 뿌듯했다. VB decompiler를 활용해보고 싶었는데 그다지 도움이 되지는 않았다.
반응형'Wargame > reversing.kr' 카테고리의 다른 글
[reversing.kr] ImagePrc 풀이 (0) 2021.05.09 [reversing.kr] Replace 풀이 (0) 2021.03.09 [reversing.kr] ransomware 풀이 (0) 2021.01.08 [reversing.kr] Easy ELF 풀이 (0) 2021.01.05 [reversing.kr] Easy Unpack 풀이 (0) 2020.12.13