DEFCON CTF 2009 Forensics 200

Provide the key in its original, unl33t form.
http://shallweplayaga.me/forensics/70b06421d874ba02b7b50f575759cff7

まず何のファイルか確認

$ file 70b06421d874ba02b7b50f575759cff7
70b06421d874ba02b7b50f575759cff7: gzip compressed data, from Unix, 
last modified: Wed Jun  3 03:19:02 2009

gzipで圧縮されている

$ tar xvf 70b06421d874ba02b7b50f575759cff7
key.doc
~426tmp.emf
$ file *
key.doc:     Vim swap file, version 7.4
~426tmp.emf: ASCII text

2つのファイルが展開される
key.docはvimのswapファイル、~426tmp.emfはテキストファイル
とりあえずswapファイルから元のファイルを復元
http://nanasi.jp/articles/howto/file/crash-recovery.html
元ファイルのファイル名は~426tmp.emfに書かれてある

$ cat ~426tmp.emf | more
...

# File marks:
'0  44  0  ~/findthekey

# Jumplist (newest first):
-'  44  0  ~/findthekey
-'  2239  0  ~/findthekey
-'  2234  0  ~/findthekey
-'  1  0  ~/findthekey

# History of marks within files (newest to oldest):

> ~/findthekey
        "       44      0

元ファイル名がfindthekeyだったと仮定して
swapファイルから元ファイルを復元

$ cp key.doc findthekey.swp
$ vi findthekey.swp
b0VIM 7.4^@^@^@^@^P^@^@ai%J^E ^H^@nm^@^@hackerj^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@localhost.localdomain^@^@^@^@^@~hackerj
/findthekey^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
...
...
...
...

:recover(":recover"と入力)

スワップファイル "findthekey.swp" を使用中
"~hackerj/findthekey" [新規ディレクトリ]
>>>>>>>>>>>>>
E312: リカバリの最中にエラーが検出されました; 
???で始まる行を参照してください
詳細は ":help E312" を参照してください
>>>>>>>>>>>>>
続けるにはENTERを押すかコマンドを入力してください
(Enterを入力)

(0mp4r1n9 73h53 3><4mpl35 w17h 73h1r p4r45171( 94p (0un73rp4r75 1n (96)
& (97), w3 533 |>47 73h 5y573m471( u53 0f (0mpl3>< 5ym80l5 i$ n3(3554ry
70 1mp053 4n 1n73rpr3741Ng 0n 4 p4r45171( 94p (0n57ru(1Ng. 17 4pp34r5
|>47 73h 4pp34r4n(3 0f p4r45171( 94p5 1n |>0m41n5 r3l471\/3ly 1n4((35518l3
70 0r|>1n4ry 3><7r4(1Ng |>035 n07 4ff3(7 73h 57ru(7ur3 0f 73h 5y573m 0f
8453 rul35 3><(lu51\/3 0f 73h l3><1(0n. 8y (0m81n1n9 4|>jun(1Ng5 &
(3r741n |>3f0rm41Ng5, 73h 5p34k3r-h3rr'5 l1n9ui$71( 1n7u11Ng 5uff1(35
.....
.....

:w recover.txt(別名でファイルを保存)

次に~426tmp.emfを見るとコマンドライン入力履歴に置換した後がある

// ~426tmp.emf
# Command Line History (newest to oldest):
:wq
:%s/thekey->//g
:%s/15/i$/g
:%s/710n/1Ng/g
:%s/n00b/N1nj4/g
:%s/455/A$$/g

recover.txt内で上記の逆の置換を行う

$ vi recover.txt
(0mp4r1n9 73h53 3><4mpl35 w17h 73h1r p4r45171( 94p (0un73rp4r75 1n (96)
& (97), w3 533 |>47 73h 5y573m471( u53 0f (0mpl3>< 5ym80l5 i$ n3(3554ry
70 1mp053 4n 1n73rpr3741Ng 0n 4 p4r45171( 94p (0n57ru(1Ng. 17 4pp34r5
|>47 73h 4pp34r4n(3 0f p4r45171( 94p5 1n |>0m41n5 r3l471\/3ly 1n4((35518l3
70 0r|>1n4ry 3><7r4(1Ng |>035 n07 4ff3(7 73h 57ru(7ur3 0f 73h 5y573m 0f
8453 rul35 3><(lu51\/3 0f 73h l3><1(0n. 8y (0m81n1n9 4|>jun(1Ng5 &
(3r741n |>3f0rm41Ng5, 73h 5p34k3r-h3rr'5 l1n9ui$71( 1n7u11Ng 5uff1(35
.....
.....

:%s/i$/15/g     (入力)
:%s/1Ng/710n/g  (入力)
:%s/N1nj4/n00b/g(入力)
:%s/A$$/455/g   (入力)

置換完了!
さらに~426tmp.emfを見るとマークした履歴がある

// ~426tmp.emf
# History of marks within files (newest to oldest):

> ~/findthekey
        "       44      0
        .       44      0
        +       11      0
        +       3       0
        +       2       0
        +       44      18

最後に44 - 18とあるので、44行目の18文字目と考えて
置換後のrecover.txtの44行目、18文字目を確認

$ cat -n recover.txt | more
...
    43  n07 r34|>1ly 70l3r473 n035n|>i$71n(7n355 1n 73h 53n53 0f |
    44  73h0ry. f0r 4ny 7r4n5f0rm4710n wh1(h i$ 5uff1(13n7ly |>1\/
    45  4ppl1(4710n 70 83 0f 4ny 1n73r357, 73h 73h0ry 0f 5yn74(71(

44行目の18文字目以降は"7r4n5f0rm4710n"となる
これを問題文にあるようにunl33tする(l33tをOFFにする)と
"Transformation"となり、これが答え