2012年11月12日月曜日

SECCON CTF in NAIST Binary A_Cinderella_protection_for_beginners

問題をダウンロードして解凍するとCinderella.exeというWindows実行ファイルを発見できます。そしてそれを実行すると


 というふうになるので特定の日時にしかイベントが発生しないことが分かります。
では、特定のイベントを発生させるためにプログラムの逆アセンブリを見てみましょう。

main関数は上図のようになります。上図の逆アセンブリからさっきのメッセージボックスはcall MessageBoxAから発生していることが分かります。つまりその前のjnz short loc_401040でイベントが発生するかどうかの分かれ目のようです。
ではloc_401040はどういうコードかというと
こんな感じです。赤色で示されたmov esi, [ebp+arg_0]によってloc_401040にジャンプする前にpushされたeaxがesiに代入されています。さらに前のlea eax [ebp+SystemTime]からSystemTime構造体を指すアドレスがesiとなります。
その後にcmp word ptr [esi], 7DChとかあるので、0x7DC = 2012から考えると
年、月、日、時、分、秒という順に比較されていることが分かります。
つまりこれらの比較条件に合うように[esi+?]の値を操作してあげればイベントが発生します。
なのでこの時刻がキーではないかと思います。
ちなみにイベントはただ時刻をお知らせするメッセージボックスが表れるだけでした。


0 件のコメント:

コメントを投稿