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

ある程度動きが分かりましたので、ここで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')grapeを2回MD5でハッシュ化した値のようです。ということで、780438d5b6e29db0898bc4f0225935c0のハッシュ化前の値であるb781cbb29054db12f88f08c6e161c199をキーとして入力してみます。
b781cbb29054db12f88f08c6e161c199
md5x2 ('grape')
780438d5b6e29db0898bc4f0225935c0
$ ./dMd
Enter the valid key!
b781cbb29054db12f88f08c6e161c199
The key is valid :)
validと表示されました。
フラグは、
b781cbb29054db12f88f08c6e161c199
です。









