[zer0pts CTF 2020] Hobbit

The hobbit is small and clever.

解説

渡されたqemu imageのrootfs.cpioを解凍し、/rootを見てみると、カーネルモジュールと未知のファイル(chall.hbt)がある

カーネルモジュールのほうを解析してみると、新たな実行ファイル形式を追加している
どうやらその追加された形式がhbtファイルらしい

そのままhbtファイルの仕様を調べたかったが、真面目に読む元気がなかったのでqemuのメモリをダンプしてそれらしいデータを探すことにした
ダンプしたメモリを、chall.hbtの失敗時の出力Wrong!で検索してみるとその後ろに怪しげなデータ列が見つかる

hobbit_dump

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で暗号化されてたようです