Phantom

Music Player 본문

Pwnable/Reversing.kr

Music Player

Ph4nt0m_ 2017. 11. 20. 20:21
반응형
This MP3 Player is limited to 1 minutes.
You have to play more than one minute.
There are exist several 1-minute-check-routine.
After bypassing every check routine, you will see the perfect flag.

이것이 ReadMe에 적혀있는 문장이다.

이 MP3 Player는 1분으로 제한되어있다.
1분 이상 재생해야 한다.
몇몇의 1분체크루틴이 존재한다.
모든 체크루틴을 우회한 후에, 너는 완전한 flag를 볼 수 있을것이다.

라고 발번역을 하면 이렇게 된다 하핫..



실행 모습은 이렇다.

그리고 1분이 지나면


이렇게 메시지가 출력되며 다시 위의 상태로 돌아간다.

우리는 체크루틴을 우회하고 플래그를 얻으면 된다했으니 일단 분석 해보자.


PEiD로 보면 Visual Basic으로 되어있다.

String으로 검색해보려니까 한글은 나오지 않았고 모듈로 검색하려니
어떤함수가 messagebox같은 함수일지 몰랐다.


마우스로 찾다가 MsgBox 함수가 있어서 Sort시켰더니 4개가 나온다.
일단 4개 전부 BP를 걸어봤다.


재생을 누르면 두번의 코덱을 로딩하고 재생이 된다.
이것에 대한 자세한건..잘 모르겠어서 F9를 두번 눌러서 진행했다.

그리고 59초에 이르면 다음처럼 이상한?주소로 온다


그냥 흐름대로 트레이싱 해봤다.

위의 저부분은 예외 처리 부분인거 같았다.

그렇게 1분이 지날즈음 코덱 예외처리를 지나서 메시지 출력문으로 흐름이 이동했다.



윗 부분을 보니 길이에 대한 비교문이 있었다.



여기에 다시 BP를 걸고 재시작해보겠다.

재생 하자마자 비교문으로 이동한다. 이게 시간 체크문인것 같다.

0xEA60 = 60000이다.
1분은 60초인데... 밀리초 단위로 비교하나보다.



트레이싱을 해보니 60000만큼 비교를 하고 JL로 JMP한 다음에 Free 시킨다.

그리고 0xEA60만큼 지나버리면 흐름이 저 아래로 내려가는데


 vbaHresultCheckObj함수를 실행시켜 에러를 처리한다.

근데 에러가 아직 이 문제에는 없으므로 해당 MsgBox만 출력하고 프로그램은 다시 초기상태로 돌아간다.

이제 문제를 풀어보자면, 0xEA60을 키우면 키우는대로 노래를 들을 수 있지 않을까??

.....
.....

비교값을 키워서 실행했더니



런타임 에러가 뜬다.

런타임 에러까지 우회를 시켜야 한다.!

60000을 2배로 1D4C0로 늘리고 이제 런타임 에러를 우회시키는 분기문으 찾는다



그저 흐름대로 흘러가게 되면 vbaHresultCheckObj를 실행하고 런타임 에러를 발생시킨다.

그러므로 JGE를 JL로 바꾸어본다.

※난 처음에 저 런타임 에러 우회 부분이 하나인줄 알았다.

저 JGE 분기문은 2개가 있다. 중간 이해하지 못하는 어셈이 있었지만 에러처리 부분은 두곳이었고. 그 두 JGE를 JL로 바꾸면 런타임 에러는 없어지고 아까 수정한 길이만큼 재생이 된다.

그리고 플래그는 프로그램의 타이틀에 적혀있다.


반응형

'Pwnable > Reversing.kr' 카테고리의 다른 글

Replace  (0) 2017.11.20
Easy_ELF  (0) 2017.11.20
Easy_UnpackMe  (0) 2017.11.17
Easy Keygen  (0) 2017.11.17
Easy_CrackMe  (0) 2017.11.17
Comments