dMd

reverse

Flag is : The valid input

Download

与えられたファイルを実行すると、keyの入力を求められます。試しに1と入力すると、Invalid Key!ということで怒られます。
$ ./dMd
Enter the valid key!
1
Invalid Key! :(
このときの動きをedbで見てみると、下図のように入力値である1がmd5でハッシュ化(c4ca4238a0b923820dcc509a6f75849b)されています。
no title

ある程度動きが分かりましたので、ここでobjdumpで逆アセンブルします。
objdump -s -D dMd > aaa.txt

逆アセンブルされた結果を眺めていると、以下の箇所で1バイトずつ比較しているコードが続いているところがあります。ちょうど32回続いていますので、MD5のハッシュ値と同じ長さです。

  400f2f:    48 8b 45 a8              mov    -0x58(%rbp),%rax
  400f33:    0f b6 00                 movzbl (%rax),%eax
  400f36:    3c 37                    cmp    $0x37,%al            //7
  400f38:    0f 85 5d 03 00 00        jne    40129b <main+0x40e>
  400f3e:    48 8b 45 a8              mov    -0x58(%rbp),%rax
  400f42:    48 83 c0 01              add    $0x1,%rax
  400f46:    0f b6 00                 movzbl (%rax),%eax
  400f49:    3c 38                    cmp    $0x38,%al            //8
  400f4b:    0f 85 4a 03 00 00        jne    40129b <main+0x40e>
  400f51:    48 8b 45 a8              mov    -0x58(%rbp),%rax
  400f55:    48 83 c0 02              add    $0x2,%rax
  400f59:    0f b6 00                 movzbl (%rax),%eax
  400f5c:    3c 30                    cmp    $0x30,%al            //0

(省略)

比較値をASCIIで表現すると、次のとおり32バイトの文字列が得られます。

780438d5b6e29db0898bc4f0225935c0

これを以下のサイトで検索します。

http://md5decoder.org/b781cbb29054db12f88f08c6e161c199

md5 ('grape')
b781cbb29054db12f88f08c6e161c199
md5x2 ('grape')
780438d5b6e29db0898bc4f0225935c0
grapeを2回MD5でハッシュ化した値のようです。ということで、780438d5b6e29db0898bc4f0225935c0のハッシュ化前の値であるb781cbb29054db12f88f08c6e161c199をキーとして入力してみます。

$ ./dMd
Enter the valid key!
b781cbb29054db12f88f08c6e161c199
The key is valid :)

validと表示されました。

フラグは、

b781cbb29054db12f88f08c6e161c199

です。



仮想通貨
岡田 仁志
東洋経済新報社
2015-05-29