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.
プログラムを実行してみると
音声ファイルを選択すると再生され、1分がたつと
と表示されこれ以上は再生されなくなる。
解いていく
再生が止まった時に新しくメッセージボックスが表示されることが分かったので、
外部関数呼び出しの参照を検索し、メッセージボックスで検索をかけると
この4つのアドレスが引っかかる。
これらすべてにブレークポイントを設定し再び実行。
ここで処理が止まる。
このブレークポイントは1分が経過した時にメッセージボックスの表示をするものだ。
つまりこの上の処理のどこかで1分が経過したかの比較をしているはずなので探してみる。
するとここにeaxとEA60を比較している部分がある。 0xEA60は10進数にすると60000となる
1分 => 60秒 => 6000ミリ秒のになる。
つまりここの比較は時間が1分かどうかを図っているということだ
というわけで適当な値に置き換えてみる
そして再び再生
すると1分以上の再生ができるようになった!
これでFlagが表示され終わりだろう
表示されたのはFlagではなく新しくwindowだった
処理の続きを見てみると
vbaHresultCheckObjという関数を参照しているのがわかる
名前から値の書き換えを判定していることがわかるので、次にこの処理を通る場所の条件分岐を書き換えてこの処理を実行しないようにする。
ここが次に通るチェック関数の呼び出しなのでjgeをjmpに書き換える
実行すると
というわけでFlagを入手することができた。
感想
他ライブラリの呼び出しがある場合でもメインとなる処理をしっかり見ることの大切さを再認識させられた。