워게임 풀이
Reversing.Kr
This site tests your ability to Cracking & Reverse Code Engineering. Now Challenge a problem for each environment. (Windows, Linux, .Net, Flash, Java, Python, Mobile..) Admin E-Mail: gogil@reversing.kr
reversing.kr
5. Music Player
문제 파일 압축을 푸니 Readme 파일을 볼 수 있었다.

이 MP3 플레이어는 1분으로 제한됩니다.
당신은 1분 이상 플레이해야 합니다.
몇 가지 1분 체크 루틴이 존재합니다.
모든 검사 루틴을 건너뛰면 완벽한 플래그를 볼 수 있습니다.
>> 1분 듣기 밖에 안되는 실행파일(exe)을 1분 이상 실행하면 flag가 출력되는 문제인 것 같다.

exe 파일을 실행하면

mp3 파일을 넣으면 1분 동안 파일이 재생되다가 1분이 지나게 되면 '1분 미리듣기만 가능합니다.'라는 메시지 창이 출력된다.

0x404563을 보면 eax, EA60
재생했던 시간 밀리 초와 60000밀리 초(60초, 1분)을 비교하고 있다.
만약 재생했던 시간이 60000밀리 초보다 클 경우 점프하지 않고(JL은 결과가 작을 경우 점프한다.) 더 이상의 재생을 막는 루틴으로 실행 흐름이 넘어간다.

60000밀리 초는 1분이기 때문에 재생 시간이 1분이 넘는 지 아닌 지를 체크하는 루틴이 해당 부분일 것 같다는 추측을 했다.


JL을 무조건 점프할 수 있도록 JMP로 수정한 후 다시 실행해보겠다.

1분 이후로도 노래가 나오기는 하는데...런타임 에러가 발생했다. 0x4046B9에서 vbaHresultCheckObj() 함수를 호출하다 에러가 발생했다.

해당 함수 호출을 방지하기 위해서 'NOP'로 바꿔준다.

다시 실행해보면 런타임 에러 없이 플래그가 음악 플레이어 파일 이름이 flag로 바뀌어 출력되는 것을 확인할 수 있다.
>> flag
LIstenCare
flag를 대충봤더니 대문자 i인 것을 못 봐서 ListenCare로 flag를 입력하고 한참 고민했다..

+ 올리디버거로 수정한 파일 저장하는 방법
(디버깅 하면서 문제 파일을 동시에 실행하는 것이 불가능하여 수정한 후 저장해서 따로 실행해주는 방식으로 문제를 풀었음!)

Code Window 에서 마우스 우클릭 > Copy to executable > Selection / All modifications
Selection: 수정한 부분만 저장 가능
All modifications: 모든 수정한 부분과 원래 파일 저장
이후에 작동시키기 위해 All modifications 을 눌러서 진행한다.

Copy all

새로 생긴 창에서 우클릭 > Save file
완료^^
'Reversing' 카테고리의 다른 글
패킹과 언패킹 (0) | 2023.05.17 |
---|---|
[Reversing] Replace_WirteUp (0) | 2023.05.13 |
DLL, IAT, EAT 분석 (0) | 2023.05.12 |
[Reversing] ImagePrc_WirteUp (0) | 2023.04.29 |
[Reversing] Easy ELF_WirteUp (0) | 2023.04.29 |