Nuit du hack CTF 2013 Quals Writeups

むつかしかった....


Crackme #2 (400)

フロッピーのイメージファイルが渡される。
バイナリエディタで眺めていると、VMWarebochs で動かしてみてね、と書いてある。
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

It needs to be about 20% cooler