Assemble your way to the flag (50pts)

 2 days, 53 minutes, 46 seconds remaining
My friend was trying out assembly for the first time, he has no clue what he's doing, help him out and procure your reward in the form of a flag :)

 question 
21403c32f66255742df510d2c44f527c
fileコマンドでファイルタイプを確認します。Linux用の64bit実行ファイルです。
$ file question 
question: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=8fab56740532448fb41c467bd5e093f74a0e6994, not stripped
実行してみます。メッセージが表示されてプログラムが終了します。
$ ./question 
Look for something else....
動作を確認するために、objdumpで逆アセンブルします。
$ objdump -s -D question >aaa.txt
0x6b0~0x6c1で0x50と0x2dのxorをとってスタックにつんでいます。次に0x6c2~0x6d3で0xc1と0xb8のxorをとってスタックにつんでいます。このような処理が0x8cbまで続き、0x8ccで0x560の関数をcallしています。
00000000000006a0 <main>:
 6a0: push   %rbp
 6a1: mov    %rsp,%rbp
 6a4: lea    0x2b9(%rip),%rdi        # 964 Look for something else....
 6ab: mov    $0x0,%eax
 6b0: mov    $0x50,%rax
 6b7: mov    $0x2d,%rbx
 6be: xor    %rbx,%rax
 6c1: push   %rax
 6c2: mov    $0xc1,%rax
 6c9: mov    $0xb8,%rbx
 6d0: xor    %rbx,%rax
 6d3: push   %rax
(略)
 8a8: mov    $0xbe,%rax
 8af: mov    $0xdd,%rbx
 8b6: xor    %rbx,%rax
 8b9: push   %rax
 8ba: mov    $0xac,%rax
 8c1: mov    $0xdc,%rbx
 8c8: xor    %rbx,%rax
 8cb: push   %rax
 8cc: callq  560 <_init+0x30>
それではgdbで0x8ccにブレークポイントを設定してスタックを表示してみます。次のように出力されます。
gdb-peda$ x/30ws 0x7fffffffdb20
0x7fffffffdb20: U"p"
0x7fffffffdb28: U"c"
0x7fffffffdb30: U"t"
0x7fffffffdb38: U"f"
0x7fffffffdb40: U"{"
0x7fffffffdb48: U"l"
0x7fffffffdb50: U"3"
0x7fffffffdb58: U"g"
0x7fffffffdb60: U"e"
0x7fffffffdb68: U"N"
0x7fffffffdb70: U"d"
0x7fffffffdb78: U"s"
0x7fffffffdb80: U"_"
0x7fffffffdb88: U"c"
0x7fffffffdb90: U"0"
0x7fffffffdb98: U"d"
0x7fffffffdba0: U"3"
0x7fffffffdba8: U"_"
0x7fffffffdbb0: U"1"
0x7fffffffdbb8: U"n"
0x7fffffffdbc0: U"_"
0x7fffffffdbc8: U"4"
0x7fffffffdbd0: U"S"
0x7fffffffdbd8: U"s"
0x7fffffffdbe0: U"3"
0x7fffffffdbe8: U"m"
0x7fffffffdbf0: U"b"
0x7fffffffdbf8: U"1"
0x7fffffffdc00: U"y"
0x7fffffffdc08: U"}"
したがって、フラグは、
pctf{l3geNds_c0d3_1n_4Ss3mb1y}
です。

GDBデバッギング入門
リチャード ストールマン
アスキー
1999-01