CpawCTF Q21.[Reversing]reversing easy!
フラグを出す実行ファイルがあるのだが、プログラム(elfファイル)作成者が出力する関数を書き忘れてしまったらしい…
reverse100
rev100をダウンロードして実行権を与えて、とりあえず確認してみる。
$ chmod u+x rev100
$ file rev100
rev100: ELF 32-bit LSB executable,
Intel 80386, version 1 (SYSV),
dynamically linked, interpreter /lib/ld-,
for GNU/Linux 2.6.24,
BuildID[sha1]=f94360edd84a940de2b74007d4289705601d618d,
not stripped
$ strings rev100
/lib/ld-linux.so.2
libc.so.6
_IO_stdin_used
__stack_chk_fail
putchar
printf
__libc_start_main
__gmon_start__
GLIBC_2.4
GLIBC_2.0
PTRh
D$L1
D$Fcpawf
D$J{
D$ y
D$$a
D$(k
D$,i
D$0n
D$4i
D$8k
D$<u
D$@!
T$Le3
・・・
stringsの時点でフラグっぽいのが見えているが、もう少し見てみる。デバッガを起動してアセンブラを確認。
$ gdb rev100
(gdb) layout asm
・・・
0x80484b2 <main+21> movl $0x77617063,0x46(%esp)
0x80484ba <main+29> movw $0x7b,0x4a(%esp)
0x80484c1 <main+36> movl $0x79,0x20(%esp)
0x80484c9 <main+44> movl $0x61,0x24(%esp)
0x80484d1 <main+52> movl $0x6b,0x28(%esp)
0x80484d9 <main+60> movl $0x69,0x2c(%esp)
0x80484e1 <main+68> movl $0x6e,0x30(%esp)
0x80484e9 <main+76> movl $0x69,0x34(%esp)
0x80484f1 <main+84> movl $0x6b,0x38(%esp)
0x80484f9 <main+92> movl $0x75,0x3c(%esp)
0x8048501 <main+100> movl $0x21,0x40(%esp)
0x8048509 <main+108> movw $0xa7d,0x15(%esp)
・・・
上記のあたりがフラグの部分だと思われる。リトルエンディアンであることを注意して、文字列に変更するとフラグをゲットできる。
答え:cpaw{yakiniku!}