Nuit du hack CTF 2013 Quals Writeups
むつかしかった....
Crackme #2 (400)
フロッピーのイメージファイルが渡される。
バイナリエディタで眺めていると、VMWare や bochs で動かしてみてね、と書いてある。
1.44MBしかないと、バイナリエディタで眺めるときの身軽さが段違いだ・・
フロッピーから起動するように設定した仮想マシンで動かしてみると、
NDH Mini-Kernelが立ちあがり、パスワードを求められる。
これは流石に、何らかのデバッガを使わないと厳しい。
で、いろいろ検索してみると、bochs + IDA Pro という組み合わせが有効なようだ。
早速ダウンロードして、使ってみようとする・・・も、IDA Pro がエラーを吐いて、うまくいかない。
bochs をよく見ると、どうやら gdb 風のデバッガ機能がついているらしい。
途中で一時停止したり、レジスタやメモリを見たり、書き換えたり、自由自在だ!すげえ!
これならIDAナシでも大丈夫だろうと、解析を始めること3時間。
パスワードを入力してEnterを押すと、パスワードの入力を待機しているループから抜ける。
で、抜けた後の処理を追ってみた。
; 入力待機ループ 001004c4: ( from 10056b ): push ebp ; 55 001004c5: ( ): mov ebp, esp ; 89e5 001004c7: ( ): sub esp, 0x00000038 ; 83ec38 001004ca: ( ): mov dword ptr ss:[esp], 0x00102778 ; c7042478271000 001004d1: ( ): call .-282 ; e8e6feffff 001004d6: ( ): mov dword ptr ss:[esp], 0x0010277a ; c704247a271000 001004dd: ( ): call .+8574 ; e87e210000 Enter password: 001004e2: ( ): mov dword ptr ss:[esp], eax ; 890424 001004e5: ( ): call .-302 ; e8d2feffff 001004ea: ( ): mov dword ptr ss:[esp+4], 0x00000020 ; c744240420000000 001004f2: ( ): lea eax, dword ptr ss:[ebp-40] ; 8d45d8 001004f5: ( ): mov dword ptr ss:[esp], eax ; 890424 001004f8: ( ): call .+4335 ; e8ef100000 001004fd: ( ): mov dword ptr ss:[esp], 0x0010278c ; c704248c271000 00100504: ( ): call .+8535 ; e857210000 Authentication Failure 00100509: ( ): mov dword ptr ss:[esp], eax ; 890424 0010050c: ( ): call .-341 ; e8abfeffff 00100511: ( goto 1004d6 ): jmp .-61 ; ebc3 ; 起動後の画面表示 00100513: ( ): push ebp ; 55 00100514: ( ): mov ebp, esp ; 89e5 00100516: ( ): sub esp, 0x00000018 ; 83ec18 00100519: ( ): call .+191 ; e8bf000000 0010051e: ( ): mov dword ptr ss:[esp], 0x001027aa ; c70424aa271000 00100525: ( ): call .+8502 ; e836210000 [+] NDH Mini-Kernel 0010052a: ( ): mov dword ptr ss:[esp], eax ; 890424 0010052d: ( ): call .-374 ; e88afeffff 00100532: ( ): mov dword ptr ss:[esp], 0x001027bf ; c70424bf271000 00100539: ( ): call .+8482 ; e822210000 [+] by Jonathan Salwan 0010053e: ( ): mov dword ptr ss:[esp], eax ; 890424 00100541: ( ): call .-394 ; e876feffff 00100546: ( ): call .+4552 ; e8c8110000 0010054b: ( ): call .+5212 ; e85c140000 00100550: ( ): call .+6215 ; e847180000 00100555: ( ): call .+6895 ; e8ef1a0000 0010055a: ( ): mov ax, 0x0018 ; 66b81800 0010055e: ( ): mov ss, ax ; 8ed0 00100560: ( ): mov esp, 0x00200000 ; bc00002000 00100565: ( ): mov ebp, 0x001ff000 ; bd00f01f00 0010056a: ( ): sti ; fb 0010056b: ( goto 1004c4 ): call .-172 ; e854ffffff Input Password 00100570: ( ): mov dword ptr ss:[esp], 0x001027d8 ; c70424d8271000 00100577: ( ): call .-448 ; e840feffff 0010057c: ( ): hlt ; f4 0010057d: ( ): jmp .-2 ; ebfe
どう見ても、パスを入力→問答無用で Authentication Failure にしか見えない。
え・・・どうしよ・・・と途方に暮れ、バイナリエディタでもう一度イメージファイルを見てみる。。
試しにこれを入力してみたら、フラッグ通りました(´・ω・`)
多分、起動時の call のどこかにパスワードをチェックする何かが入ってたのかな。。
flag => suckmycaribou
Huge.js (Crackme:100)
25MBもの巨大な js ファイル!Firebugで見ると普通の js が見れます。
正しいパスワードを入れるとフラッグが出ますが、パスワードのチェック関数では
入力されたパスワードとハッシュ値を計算しています。
ハッシュの計算処理が非常にややこしく、心折れそうになるも、
よーく見ると、MD5 のハッシュだと分かります。
パスワードの文字数は5で、使われる文字種もコメントで丁寧に書いてあるので、
適当にブルートフォースすればOK。パスワードはi<3Js。
フラッグは、パスワードのハッシュ値。
参考: http://eternalrise.com/blog/brute-force-php-script/
flag => b3336efd42e2978035cb54f85f1654f6
Fappers gonna fap (Forensics:200)
暗号化スクリプトと、暗号化されたBMPファイルから、BMPを復号しろという問題。
暗号化スクリプトを見ると、何やらXORしている模様。
パスワードから生成した337文字のキーで暗号化しているっぽい・・?
ということで、xortool を使ってみた。
・・・一瞬で復号化された(´;∀;`)
参考: GitHub - hellman/xortool: A tool to analyze multi-byte xor cipher
flag => ecb_mode_is_weak_mofo