[reversing.kr] Music Player 풀이
- 리버싱/reversing.kr
- 2020. 3. 8. 20:21
우회 자체는 어렵지 않은데 런타임 에러 때문에 삽질을 많이 했던 문제이다.
reversing.kr Music Player 풀이
이번 문제는 1분듣기 밖에 안되는 파일의 1분 체크 루틴을 우회해서 1분 이상 실행시키는 문제이다. 1분 이상 실행되면 플래그가 출력된다고 한다. mp3 파일을 넣어보면 1분 듣기 후 아래와 같이 "1분 미리듣기만 가능합니다.'라는 메시지 창이 출력된다.
이번 파일은 비주얼 베이직 (VB) 프로그램이기 때문에 IDA로 디컴파일이 안된다ㅠㅠ 일단 메시지창 함수가 실행된다는 것을 알기 때문에 관련 함수 호출부분을 찾기로 했다. 다행히도 msvbvm60.dll 함수 중 "msg"가 들어간 함수는 rtcMsgBox밖에 없었다.
해당 함수에 bp를 걸고 리턴주소가 저장되는 스택 상단을 보면 아래와 같이 함수 호출 부분을 찾을 수 있다.
그리고 rtcMsgBox를 호출하는 함수의 최상단에 bp를 걸고 여기서부터 트레이싱해보기로 했다. mp3 파일을 열기까지만 하면 함수 시작점에서 멈추게 된다.
함수 내부에 1분 후 메시지 창을 띄우는 곳이 있기 때문에 이 함수 내부를 보면 뮤직 플레이어 음악을 실행시키는 곳, 실행시키고 1분이 넘었는지 체크하는 루틴이 전부 있을 것이다.
cmp를 위주로 보면서 쭉 내려가다보니 EA60과 비교하는 코드가 있는데 EA60은 60000이고 컴퓨터 처리 시간 단위인 ms로 계산하면 60000ms=60 이기 때문에 여기가 1분이 지났는지 체크하는 루틴인 것 같다. 이 코드를 1분이 넘게 바꾼다음에 EAX 값도 적당히 1분으로 변경해주고 실행시켜보았다.
그러면 아래와 같이 "Password is ~~"라며 뜨는데 정답 인증이 되지 않았다.
좀더 실행시켜야하나 싶어서 계속 고치면서 실행을 시켜주는데 아래와 같은 Run-time error가 계속 발생한다.
이 런타임 에러를 내부적으로 호출한 부분을 찾기 위해 스택창을 한참 내려 40 영역의 주소를 찾았다.
그래서 아예 해당 함수 호출을 건너띄도록 cmp 부분 대신 jle 부분을 JMP 4046BF로 패치했는데, 음악 실행은 1분이 넘도록 아무런 에러없이 잘 되지만 Password 문자열 구성이 안됐다. 너무 많이 JMP하긴 했다.
그래서 exception이 발생하는 함수를 호출하는 분기를 타지 않도록 해당 분기를 타는 조건인 jge 부분을 jmp로 변경해준 후 패치해주었다.
그러고도 계속 패스워드가 짤려나와서 이것저것 시도해봤는데, 아예 패치된 파일을 새로 저장한 후 (이때, cmp 부분도 패치해주어야 함) 패치 파일을 실행시켜보니까 Password가 잘리지 않고 나왔다.
'리버싱 > reversing.kr' 카테고리의 다른 글
[reversing.kr] ImagePrc 풀이 (0) | 2020.03.10 |
---|---|
[reversing.kr] Replace 풀이 (0) | 2020.03.09 |
[reversing.kr] Easy Unpack 풀이 (0) | 2020.03.07 |
[reversing.kr] Easy Keygen 풀이 (0) | 2020.03.07 |
[reversing.kr] Easy Crack 풀이 (0) | 2020.03.06 |