The hobbit is small and clever.
渡されたqemu imageのrootfs.cpioを解凍し、/rootを見てみると、カーネルモジュールと未知のファイル(chall.hbt
)がある
カーネルモジュールのほうを解析してみると、新たな実行ファイル形式を追加している
どうやらその追加された形式がhbtファイルらしい
そのままhbtファイルの仕様を調べたかったが、真面目に読む元気がなかったのでqemuのメモリをダンプしてそれらしいデータを探すことにした
ダンプしたメモリを、chall.hbt
の失敗時の出力Wrong!
で検索してみるとその後ろに怪しげなデータ列が見つかる
1Bxorと仮定してzer0pts{
との差分平文攻撃をやってみると、鍵が39から1ずつ減っていっているだけだと分かる
あとはその通りにデコードするだけ
#!/usr/bin/env python3
e = [0x5D, 0x43, 0x57, 0x14, 0x53, 0x56, 0x52, 0x5B, 0x7B, 0x2D, 0x2E, 0x78, 0x68, 0x45, 0x6E, 0x29, 0x7B, 0x7A, 0x4A, 0x7A, 0x23, 0x66, 0x4E, 0x72, 0x3C, 0x51, 0x61, 0x3F, 0x78, 0x79, 0x56, 0x7E, 0x33, 0x6A, 0x34, 0x30, 0x6D, 0x76, 0x7C]
k = 39
f = []
for i in e:
f.append(chr(i ^ k))
k -= 1
print(''.join(f))
zer0pts{d33ds_w1ll_n0t_b3_l3ss_v4l14nt}
後で公式のwriteupを見たところ、chall.hbtはrc4で暗号化されてたようです