a

よろしくのキワミ

Reversing進捗5

Reversing進捗5

・MusicPlayer

動作確認

ReadMeを見てみる

PS>cat .\ReadMe.txt

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.

プログラムを実行してみると

f:id:toDo:20190107084627p:plain

音声ファイルを選択すると再生され、1分がたつと

f:id:toDo:20190120170657p:plain

と表示されこれ以上は再生されなくなる。

解いていく

再生が止まった時に新しくメッセージボックスが表示されることが分かったので、
外部関数呼び出しの参照を検索し、メッセージボックスで検索をかけると

f:id:toDo:20190120171010p:plain

この4つのアドレスが引っかかる。

これらすべてにブレークポイントを設定し再び実行。

f:id:toDo:20190120171107p:plain

ここで処理が止まる。
このブレークポイントは1分が経過した時にメッセージボックスの表示をするものだ。
つまりこの上の処理のどこかで1分が経過したかの比較をしているはずなので探してみる。

f:id:toDo:20190120174504p:plain

するとここにeaxとEA60を比較している部分がある。 0xEA60は10進数にすると60000となる

f:id:toDo:20190120174633p:plain

1分 => 60秒 => 6000ミリ秒のになる。
つまりここの比較は時間が1分かどうかを図っているということだ

というわけで適当な値に置き換えてみる

f:id:toDo:20190120175020p:plain

そして再び再生
すると1分以上の再生ができるようになった!
これでFlagが表示され終わりだろう

f:id:toDo:20190120175228p:plain

表示されたのはFlagではなく新しくwindowだった

処理の続きを見てみると

f:id:toDo:20190123204336p:plain

vbaHresultCheckObjという関数を参照しているのがわかる
名前から値の書き換えを判定していることがわかるので、次にこの処理を通る場所の条件分岐を書き換えてこの処理を実行しないようにする。

f:id:toDo:20190124180608p:plain

ここが次に通るチェック関数の呼び出しなのでjgeをjmpに書き換える

f:id:toDo:20190124181238p:plain

実行すると

f:id:toDo:20190124181520p:plain

というわけでFlagを入手することができた。

感想

他ライブラリの呼び出しがある場合でもメインとなる処理をしっかり見ることの大切さを再認識させられた。

プライバシーポリシー お問い合わせ