SECCON Beginners CTF 2023 Writeup (ctf4b)
2023年6月3日(土)~4日(日)に開催されたSECCON Beginners CTF 2023のWriteupを書いていきます。
自分が解いた分野はReversingです。
Reversingの問題について
Reversingの問題は全部で5問ありました。
- Half(beginner)
- Three(easy)
- Poker(medium)
- Leak(medium)
- Heaven(hard)
この中で自分が解けたのはPoker(medium)まででした。
続いて問題の解き方を書きます。
Half(begginer)
Halfの問題文は
バイナリファイルってなんのファイルなのか調べてみよう! あとこのファイルってどうやって中身を見るんだろう...?
というものでした。
ファイルとしてはHalf.tar.gzが与えられています。
まずはtar.gzファイルを展開しましょう。
tar -zxvf Half.tar.gz
展開をして中身を確認すると、halfというファイルがありました。
これだけでは何のファイルかわからないため、fileコマンドで何のファイルか確認します。
file half
すると実行結果が
half: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=e2b1484a1db68e68d01130084882316fb34d86ad, for GNU/Linux 3.2.0, not stripped
と返ってきました。この結果からこのファイルが64ビットELFファイル形式の実行ファイルであることがわかりました。
実行してみてもいいのですが、revのbegginer問題なのでStringsコマンドでフラグがないか見てみます。
strings half
実行結果が
/lib64/ld-linux-x86-64.so.2 libc.so.6 strncmp __isoc99_scanf puts printf strlen __cxa_finalize strcmp __libc_start_main GLIBC_2.7 GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable u+UH []A\A]A^A_ Enter the FLAG: %99s%*[^ Invalid FLAG ctf4b{ge4_t0_kn0w_the _bin4ry_fi1e_with_s4ring3} Correct! :*3$" GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 crtstuff.c deregister_tm_clones __do_global_dtors_aux completed.8061 __do_global_dtors_aux_fini_array_entry frame_dummy __frame_dummy_init_array_entry main.c __FRAME_END__ __init_array_end _DYNAMIC __init_array_start __GNU_EH_FRAME_HDR _GLOBAL_OFFSET_TABLE_ __libc_csu_fini strncmp@@GLIBC_2.2.5 _ITM_deregisterTMCloneTable puts@@GLIBC_2.2.5 _edata strlen@@GLIBC_2.2.5 printf@@GLIBC_2.2.5 __libc_start_main@@GLIBC_2.2.5 __data_start strcmp@@GLIBC_2.2.5 __gmon_start__ __dso_handle _IO_stdin_used __libc_csu_init __bss_start main __isoc99_scanf@@GLIBC_2.7 __TMC_END__ _ITM_registerTMCloneTable __cxa_finalize@@GLIBC_2.2.5 .symtab .strtab .shstrtab .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .plt.sec .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .dynamic .data .bss .comment
となり、ctf4b{ge4_t0_kn0w_the
と_bin4ry_fi1e_with_s4ring3}
を合わせるとフラグの形になりそうです。
ctf4b{ge4_t0_kn0w_the_bin4ry_fi1e_with_s4ring3}
Three(easy)
次はThreeです。問題文は以下の通りです。
このファイル、中身をちょっと見ただけではフラグは分からないみたい! バイナリファイルを解析する、専門のツールとか必要かな?
ファイルはThree.tar.gzが与えられています。
まずは先程と同じでtar.gzファイルを展開して、fileコマンドで何のファイルか確認します。
three: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5f0a7f4053ff33a4a013bbe5c58ea4dc2973ed54, for GNU/Linux 3.2.0, not stripped
これも先程と同じで実行ファイルのようです。今回はとりあえず実行してみましょう。
実行してみると
Enter the FLAG:
のようにフラグの入力を求められるだけでした。このことから入力で何かするわけでなく、解析するファイルの中にフラグがあるということが推測できます。
一応stringsコマンドで可読できる文字列を見てみましょう。
/lib64/ld-linux-x86-64.so.2 libc.so.6 __isoc99_scanf puts printf strlen __cxa_finalize __libc_start_main GLIBC_2.7 GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable u+UH VUUUH VUUUH VUUUH VUUUH VUUUH []A\A]A^A_ Invalid FLAG Correct! Enter the FLAG: %49s :*3$" GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 crtstuff.c deregister_tm_clones __do_global_dtors_aux completed.8061 __do_global_dtors_aux_fini_array_entry frame_dummy __frame_dummy_init_array_entry main.c __FRAME_END__ __init_array_end _DYNAMIC __init_array_start __GNU_EH_FRAME_HDR _GLOBAL_OFFSET_TABLE_ __libc_csu_fini _ITM_deregisterTMCloneTable puts@@GLIBC_2.2.5 flag_2 validate_flag flag_0 _edata strlen@@GLIBC_2.2.5 printf@@GLIBC_2.2.5 __libc_start_main@@GLIBC_2.2.5 __data_start __gmon_start__ __dso_handle _IO_stdin_used __libc_csu_init flag_1 __bss_start main __isoc99_scanf@@GLIBC_2.7 __TMC_END__ _ITM_registerTMCloneTable __cxa_finalize@@GLIBC_2.2.5 .symtab .strtab .shstrtab .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .plt.sec .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .dynamic .data .bss .comment
次はhexdumpコマンドで実行ファイルのバイナリと16進ダンプしたものを見てみることにします。
hexdump -C three
実行結果が
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| 00000010 03 00 3e 00 01 00 00 00 c0 10 00 00 00 00 00 00 |..>.............| 00000020 40 00 00 00 00 00 00 00 88 3a 00 00 00 00 00 00 |@........:......| 00000030 00 00 00 00 40 00 38 00 0d 00 40 00 1f 00 1e 00 |....@.8...@.....| 00000040 06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 |........@.......| 00000050 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |@.......@.......| 00000060 d8 02 00 00 00 00 00 00 d8 02 00 00 00 00 00 00 |................| 00000070 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 |................| 00000080 18 03 00 00 00 00 00 00 18 03 00 00 00 00 00 00 |................| 00000090 18 03 00 00 00 00 00 00 1c 00 00 00 00 00 00 00 |................| 000000a0 1c 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 000000b0 01 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 |................| 000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000d0 c8 06 00 00 00 00 00 00 c8 06 00 00 00 00 00 00 |................| 000000e0 00 10 00 00 00 00 00 00 01 00 00 00 05 00 00 00 |................| 000000f0 00 10 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................| 00000100 00 10 00 00 00 00 00 00 f5 03 00 00 00 00 00 00 |................| 00000110 f5 03 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................| 00000120 01 00 00 00 04 00 00 00 00 20 00 00 00 00 00 00 |......... ......| 00000130 00 20 00 00 00 00 00 00 00 20 00 00 00 00 00 00 |. ....... ......| 00000140 a0 02 00 00 00 00 00 00 a0 02 00 00 00 00 00 00 |................| 00000150 00 10 00 00 00 00 00 00 01 00 00 00 06 00 00 00 |................| 00000160 a0 2d 00 00 00 00 00 00 a0 3d 00 00 00 00 00 00 |.-.......=......| 00000170 a0 3d 00 00 00 00 00 00 70 02 00 00 00 00 00 00 |.=......p.......| 00000180 78 02 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |x...............| 00000190 02 00 00 00 06 00 00 00 b0 2d 00 00 00 00 00 00 |.........-......| 000001a0 b0 3d 00 00 00 00 00 00 b0 3d 00 00 00 00 00 00 |.=.......=......| 000001b0 f0 01 00 00 00 00 00 00 f0 01 00 00 00 00 00 00 |................| 000001c0 08 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00 |................| 000001d0 38 03 00 00 00 00 00 00 38 03 00 00 00 00 00 00 |8.......8.......| 000001e0 38 03 00 00 00 00 00 00 20 00 00 00 00 00 00 00 |8....... .......| 000001f0 20 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 | ...............| 00000200 04 00 00 00 04 00 00 00 58 03 00 00 00 00 00 00 |........X.......| 00000210 58 03 00 00 00 00 00 00 58 03 00 00 00 00 00 00 |X.......X.......| 00000220 44 00 00 00 00 00 00 00 44 00 00 00 00 00 00 00 |D.......D.......| 00000230 04 00 00 00 00 00 00 00 53 e5 74 64 04 00 00 00 |........S.td....| 00000240 38 03 00 00 00 00 00 00 38 03 00 00 00 00 00 00 |8.......8.......| 00000250 38 03 00 00 00 00 00 00 20 00 00 00 00 00 00 00 |8....... .......| 00000260 20 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 | ...............| 00000270 50 e5 74 64 04 00 00 00 2c 21 00 00 00 00 00 00 |P.td....,!......| 00000280 2c 21 00 00 00 00 00 00 2c 21 00 00 00 00 00 00 |,!......,!......| 00000290 4c 00 00 00 00 00 00 00 4c 00 00 00 00 00 00 00 |L.......L.......| 000002a0 04 00 00 00 00 00 00 00 51 e5 74 64 06 00 00 00 |........Q.td....| 000002b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000002d0 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 |................| 000002e0 52 e5 74 64 04 00 00 00 a0 2d 00 00 00 00 00 00 |R.td.....-......| 000002f0 a0 3d 00 00 00 00 00 00 a0 3d 00 00 00 00 00 00 |.=.......=......| 00000300 60 02 00 00 00 00 00 00 60 02 00 00 00 00 00 00 |`.......`.......| 00000310 01 00 00 00 00 00 00 00 2f 6c 69 62 36 34 2f 6c |......../lib64/l| 00000320 64 2d 6c 69 6e 75 78 2d 78 38 36 2d 36 34 2e 73 |d-linux-x86-64.s| 00000330 6f 2e 32 00 00 00 00 00 04 00 00 00 10 00 00 00 |o.2.............| 00000340 05 00 00 00 47 4e 55 00 02 00 00 c0 04 00 00 00 |....GNU.........| 00000350 03 00 00 00 00 00 00 00 04 00 00 00 14 00 00 00 |................| 00000360 03 00 00 00 47 4e 55 00 5f 0a 7f 40 53 ff 33 a4 |....GNU._..@S.3.| 00000370 a0 13 bb e5 c5 8e a4 dc 29 73 ed 54 04 00 00 00 |........)s.T....| 00000380 10 00 00 00 01 00 00 00 47 4e 55 00 00 00 00 00 |........GNU.....| 00000390 03 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 |................| 000003a0 02 00 00 00 09 00 00 00 01 00 00 00 06 00 00 00 |................| 000003b0 00 00 81 00 00 00 00 00 09 00 00 00 00 00 00 00 |................| 000003c0 d1 65 ce 6d 00 00 00 00 00 00 00 00 00 00 00 00 |.e.m............| 000003d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000003e0 64 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 |d... ...........| 000003f0 00 00 00 00 00 00 00 00 1a 00 00 00 12 00 00 00 |................| 00000400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000410 26 00 00 00 12 00 00 00 00 00 00 00 00 00 00 00 |&...............| 00000420 00 00 00 00 00 00 00 00 1f 00 00 00 12 00 00 00 |................| 00000430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000440 3c 00 00 00 12 00 00 00 00 00 00 00 00 00 00 00 |<...............| 00000450 00 00 00 00 00 00 00 00 80 00 00 00 20 00 00 00 |............ ...| 00000460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000470 0b 00 00 00 12 00 00 00 00 00 00 00 00 00 00 00 |................| 00000480 00 00 00 00 00 00 00 00 8f 00 00 00 20 00 00 00 |............ ...| 00000490 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000004a0 2d 00 00 00 22 00 00 00 00 00 00 00 00 00 00 00 |-..."...........| 000004b0 00 00 00 00 00 00 00 00 00 6c 69 62 63 2e 73 6f |.........libc.so| 000004c0 2e 36 00 5f 5f 69 73 6f 63 39 39 5f 73 63 61 6e |.6.__isoc99_scan| 000004d0 66 00 70 75 74 73 00 70 72 69 6e 74 66 00 73 74 |f.puts.printf.st| 000004e0 72 6c 65 6e 00 5f 5f 63 78 61 5f 66 69 6e 61 6c |rlen.__cxa_final| 000004f0 69 7a 65 00 5f 5f 6c 69 62 63 5f 73 74 61 72 74 |ize.__libc_start| 00000500 5f 6d 61 69 6e 00 47 4c 49 42 43 5f 32 2e 37 00 |_main.GLIBC_2.7.| 00000510 47 4c 49 42 43 5f 32 2e 32 2e 35 00 5f 49 54 4d |GLIBC_2.2.5._ITM| 00000520 5f 64 65 72 65 67 69 73 74 65 72 54 4d 43 6c 6f |_deregisterTMClo| 00000530 6e 65 54 61 62 6c 65 00 5f 5f 67 6d 6f 6e 5f 73 |neTable.__gmon_s| 00000540 74 61 72 74 5f 5f 00 5f 49 54 4d 5f 72 65 67 69 |tart__._ITM_regi| 00000550 73 74 65 72 54 4d 43 6c 6f 6e 65 54 61 62 6c 65 |sterTMCloneTable| 00000560 00 00 00 00 00 00 02 00 02 00 02 00 02 00 00 00 |................| 00000570 03 00 00 00 02 00 00 00 01 00 02 00 01 00 00 00 |................| 00000580 10 00 00 00 00 00 00 00 17 69 69 0d 00 00 03 00 |.........ii.....| 00000590 4e 00 00 00 10 00 00 00 75 1a 69 09 00 00 02 00 |N.......u.i.....| 000005a0 58 00 00 00 00 00 00 00 a0 3d 00 00 00 00 00 00 |X........=......| 000005b0 08 00 00 00 00 00 00 00 a0 11 00 00 00 00 00 00 |................| 000005c0 a8 3d 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |.=..............| 000005d0 60 11 00 00 00 00 00 00 08 40 00 00 00 00 00 00 |`........@......| 000005e0 08 00 00 00 00 00 00 00 08 40 00 00 00 00 00 00 |.........@......| 000005f0 d8 3f 00 00 00 00 00 00 06 00 00 00 01 00 00 00 |.?..............| 00000600 00 00 00 00 00 00 00 00 e0 3f 00 00 00 00 00 00 |.........?......| 00000610 06 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 |................| 00000620 e8 3f 00 00 00 00 00 00 06 00 00 00 06 00 00 00 |.?..............| 00000630 00 00 00 00 00 00 00 00 f0 3f 00 00 00 00 00 00 |.........?......| 00000640 06 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 |................| 00000650 f8 3f 00 00 00 00 00 00 06 00 00 00 09 00 00 00 |.?..............| 00000660 00 00 00 00 00 00 00 00 b8 3f 00 00 00 00 00 00 |.........?......| 00000670 07 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 |................| 00000680 c0 3f 00 00 00 00 00 00 07 00 00 00 03 00 00 00 |.?..............| 00000690 00 00 00 00 00 00 00 00 c8 3f 00 00 00 00 00 00 |.........?......| 000006a0 07 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 |................| 000006b0 d0 3f 00 00 00 00 00 00 07 00 00 00 07 00 00 00 |.?..............| 000006c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00001000 f3 0f 1e fa 48 83 ec 08 48 8b 05 d9 2f 00 00 48 |....H...H.../..H| 00001010 85 c0 74 02 ff d0 48 83 c4 08 c3 00 00 00 00 00 |..t...H.........| 00001020 ff 35 82 2f 00 00 f2 ff 25 83 2f 00 00 0f 1f 00 |.5./....%./.....| 00001030 f3 0f 1e fa 68 00 00 00 00 f2 e9 e1 ff ff ff 90 |....h...........| 00001040 f3 0f 1e fa 68 01 00 00 00 f2 e9 d1 ff ff ff 90 |....h...........| 00001050 f3 0f 1e fa 68 02 00 00 00 f2 e9 c1 ff ff ff 90 |....h...........| 00001060 f3 0f 1e fa 68 03 00 00 00 f2 e9 b1 ff ff ff 90 |....h...........| 00001070 f3 0f 1e fa f2 ff 25 7d 2f 00 00 0f 1f 44 00 00 |......%}/....D..| 00001080 f3 0f 1e fa f2 ff 25 2d 2f 00 00 0f 1f 44 00 00 |......%-/....D..| 00001090 f3 0f 1e fa f2 ff 25 25 2f 00 00 0f 1f 44 00 00 |......%%/....D..| 000010a0 f3 0f 1e fa f2 ff 25 1d 2f 00 00 0f 1f 44 00 00 |......%./....D..| 000010b0 f3 0f 1e fa f2 ff 25 15 2f 00 00 0f 1f 44 00 00 |......%./....D..| 000010c0 f3 0f 1e fa 31 ed 49 89 d1 5e 48 89 e2 48 83 e4 |....1.I..^H..H..| 000010d0 f0 50 54 4c 8d 05 06 03 00 00 48 8d 0d 8f 02 00 |.PTL......H.....| 000010e0 00 48 8d 3d 39 02 00 00 ff 15 f2 2e 00 00 f4 90 |.H.=9...........| 000010f0 48 8d 3d 19 2f 00 00 48 8d 05 12 2f 00 00 48 39 |H.=./..H.../..H9| 00001100 f8 74 15 48 8b 05 ce 2e 00 00 48 85 c0 74 09 ff |.t.H......H..t..| 00001110 e0 0f 1f 80 00 00 00 00 c3 0f 1f 80 00 00 00 00 |................| 00001120 48 8d 3d e9 2e 00 00 48 8d 35 e2 2e 00 00 48 29 |H.=....H.5....H)| 00001130 fe 48 89 f0 48 c1 ee 3f 48 c1 f8 03 48 01 c6 48 |.H..H..?H...H..H| 00001140 d1 fe 74 14 48 8b 05 a5 2e 00 00 48 85 c0 74 08 |..t.H......H..t.| 00001150 ff e0 66 0f 1f 44 00 00 c3 0f 1f 80 00 00 00 00 |..f..D..........| 00001160 f3 0f 1e fa 80 3d a5 2e 00 00 00 75 2b 55 48 83 |.....=.....u+UH.| 00001170 3d 82 2e 00 00 00 48 89 e5 74 0c 48 8b 3d 86 2e |=.....H..t.H.=..| 00001180 00 00 e8 e9 fe ff ff e8 64 ff ff ff c6 05 7d 2e |........d.....}.| 00001190 00 00 01 5d c3 0f 1f 00 c3 0f 1f 80 00 00 00 00 |...]............| 000011a0 f3 0f 1e fa e9 77 ff ff ff f3 0f 1e fa 55 48 89 |.....w.......UH.| 000011b0 e5 48 83 ec 20 48 89 7d e8 48 8b 45 e8 48 89 c7 |.H.. H.}.H.E.H..| 000011c0 e8 cb fe ff ff 48 83 f8 31 74 16 48 8d 3d 2e 0f |.....H..1t.H.=..| 000011d0 00 00 e8 a9 fe ff ff b8 01 00 00 00 e9 3e 01 00 |.............>..| 000011e0 00 c7 45 fc 00 00 00 00 e9 17 01 00 00 8b 4d fc |..E...........M.| 000011f0 48 63 c1 48 69 c0 56 55 55 55 48 c1 e8 20 48 89 |Hc.Hi.VUUUH.. H.| 00001200 c2 89 c8 c1 f8 1f 89 d6 29 c6 89 f0 89 c2 01 d2 |........).......| 00001210 01 c2 89 c8 29 d0 85 c0 75 33 8b 45 fc 48 63 d0 |....)...u3.E.Hc.| 00001220 48 69 d2 56 55 55 55 48 c1 ea 20 c1 f8 1f 89 d6 |Hi.VUUUH.. .....| 00001230 29 c6 89 f0 48 98 48 8d 14 85 00 00 00 00 48 8d |)...H.H.......H.| 00001240 05 db 0d 00 00 8b 04 02 e9 88 00 00 00 8b 4d fc |..............M.| 00001250 48 63 c1 48 69 c0 56 55 55 55 48 c1 e8 20 48 89 |Hc.Hi.VUUUH.. H.| 00001260 c2 89 c8 c1 f8 1f 29 c2 89 d0 01 c0 01 d0 29 c1 |......).......).| 00001270 89 ca 83 fa 01 75 30 8b 45 fc 48 63 d0 48 69 d2 |.....u0.E.Hc.Hi.| 00001280 56 55 55 55 48 c1 ea 20 c1 f8 1f 89 d7 29 c7 89 |VUUUH.. .....)..| 00001290 f8 48 98 48 8d 14 85 00 00 00 00 48 8d 05 de 0d |.H.H.......H....| 000012a0 00 00 8b 04 02 eb 2e 8b 45 fc 48 63 d0 48 69 d2 |........E.Hc.Hi.| 000012b0 56 55 55 55 48 c1 ea 20 c1 f8 1f 89 d6 29 c6 89 |VUUUH.. .....)..| 000012c0 f0 48 98 48 8d 14 85 00 00 00 00 48 8d 05 ee 0d |.H.H.......H....| 000012d0 00 00 8b 04 02 88 45 fb 8b 45 fc 48 63 d0 48 8b |......E..E.Hc.H.| 000012e0 45 e8 48 01 d0 0f b6 00 38 45 fb 74 13 48 8d 3d |E.H.....8E.t.H.=| 000012f0 0c 0e 00 00 e8 87 fd ff ff b8 01 00 00 00 eb 1f |................| 00001300 83 45 fc 01 83 7d fc 30 0f 8e df fe ff ff 48 8d |.E...}.0......H.| 00001310 3d f8 0d 00 00 e8 66 fd ff ff b8 00 00 00 00 c9 |=.....f.........| 00001320 c3 f3 0f 1e fa 55 48 89 e5 48 83 ec 40 48 8d 3d |.....UH..H..@H.=| 00001330 e2 0d 00 00 b8 00 00 00 00 e8 62 fd ff ff 48 8d |..........b...H.| 00001340 45 c0 48 89 c6 48 8d 3d db 0d 00 00 b8 00 00 00 |E.H..H.=........| 00001350 00 e8 5a fd ff ff 48 8d 45 c0 48 89 c7 e8 47 fe |..Z...H.E.H...G.| 00001360 ff ff c9 c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 |....f.........f.| 00001370 f3 0f 1e fa 41 57 4c 8d 3d 23 2a 00 00 41 56 49 |....AWL.=#*..AVI| 00001380 89 d6 41 55 49 89 f5 41 54 41 89 fc 55 48 8d 2d |..AUI..ATA..UH.-| 00001390 14 2a 00 00 53 4c 29 fd 48 83 ec 08 e8 5f fc ff |.*..SL).H...._..| 000013a0 ff 48 c1 fd 03 74 1f 31 db 0f 1f 80 00 00 00 00 |.H...t.1........| 000013b0 4c 89 f2 4c 89 ee 44 89 e7 41 ff 14 df 48 83 c3 |L..L..D..A...H..| 000013c0 01 48 39 dd 75 ea 48 83 c4 08 5b 5d 41 5c 41 5d |.H9.u.H...[]A\A]| 000013d0 41 5e 41 5f c3 66 66 2e 0f 1f 84 00 00 00 00 00 |A^A_.ff.........| 000013e0 f3 0f 1e fa c3 00 00 00 f3 0f 1e fa 48 83 ec 08 |............H...| 000013f0 48 83 c4 08 c3 00 00 00 00 00 00 00 00 00 00 00 |H...............| 00001400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00002000 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00002010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00002020 63 00 00 00 34 00 00 00 63 00 00 00 5f 00 00 00 |c...4...c..._...| 00002030 75 00 00 00 62 00 00 00 5f 00 00 00 5f 00 00 00 |u...b..._..._...| 00002040 64 00 00 00 74 00 00 00 5f 00 00 00 72 00 00 00 |d...t..._...r...| 00002050 5f 00 00 00 31 00 00 00 5f 00 00 00 34 00 00 00 |_...1..._...4...| 00002060 7d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |}...............| 00002070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00002080 74 00 00 00 62 00 00 00 34 00 00 00 79 00 00 00 |t...b...4...y...| 00002090 5f 00 00 00 31 00 00 00 74 00 00 00 75 00 00 00 |_...1...t...u...| 000020a0 30 00 00 00 34 00 00 00 74 00 00 00 65 00 00 00 |0...4...t...e...| 000020b0 73 00 00 00 69 00 00 00 66 00 00 00 67 00 00 00 |s...i...f...g...| 000020c0 66 00 00 00 7b 00 00 00 6e 00 00 00 30 00 00 00 |f...{...n...0...| 000020d0 61 00 00 00 65 00 00 00 30 00 00 00 6e 00 00 00 |a...e...0...n...| 000020e0 5f 00 00 00 65 00 00 00 34 00 00 00 65 00 00 00 |_...e...4...e...| 000020f0 70 00 00 00 74 00 00 00 31 00 00 00 33 00 00 00 |p...t...1...3...| 00002100 49 6e 76 61 6c 69 64 20 46 4c 41 47 00 43 6f 72 |Invalid FLAG.Cor| 00002110 72 65 63 74 21 00 45 6e 74 65 72 20 74 68 65 20 |rect!.Enter the | 00002120 46 4c 41 47 3a 20 00 25 34 39 73 00 01 1b 03 3b |FLAG: .%49s....;| 00002130 48 00 00 00 08 00 00 00 f4 ee ff ff 7c 00 00 00 |H...........|...| 00002140 44 ef ff ff a4 00 00 00 54 ef ff ff bc 00 00 00 |D.......T.......| 00002150 94 ef ff ff 64 00 00 00 7d f0 ff ff d4 00 00 00 |....d...}.......| 00002160 f5 f1 ff ff f4 00 00 00 44 f2 ff ff 14 01 00 00 |........D.......| 00002170 b4 f2 ff ff 5c 01 00 00 14 00 00 00 00 00 00 00 |....\...........| 00002180 01 7a 52 00 01 78 10 01 1b 0c 07 08 90 01 00 00 |.zR..x..........| 00002190 14 00 00 00 1c 00 00 00 28 ef ff ff 2f 00 00 00 |........(.../...| 000021a0 00 44 07 10 00 00 00 00 24 00 00 00 34 00 00 00 |.D......$...4...| 000021b0 70 ee ff ff 50 00 00 00 00 0e 10 46 0e 18 4a 0f |p...P......F..J.| 000021c0 0b 77 08 80 00 3f 1a 3a 2a 33 24 22 00 00 00 00 |.w...?.:*3$"....| 000021d0 14 00 00 00 5c 00 00 00 98 ee ff ff 10 00 00 00 |....\...........| 000021e0 00 00 00 00 00 00 00 00 14 00 00 00 74 00 00 00 |............t...| 000021f0 90 ee ff ff 40 00 00 00 00 00 00 00 00 00 00 00 |....@...........| 00002200 1c 00 00 00 8c 00 00 00 a1 ef ff ff 78 01 00 00 |............x...| 00002210 00 45 0e 10 86 02 43 0d 06 03 6f 01 0c 07 08 00 |.E....C...o.....| 00002220 1c 00 00 00 ac 00 00 00 f9 f0 ff ff 43 00 00 00 |............C...| 00002230 00 45 0e 10 86 02 43 0d 06 7a 0c 07 08 00 00 00 |.E....C..z......| 00002240 44 00 00 00 cc 00 00 00 28 f1 ff ff 65 00 00 00 |D.......(...e...| 00002250 00 46 0e 10 8f 02 49 0e 18 8e 03 45 0e 20 8d 04 |.F....I....E. ..| 00002260 45 0e 28 8c 05 44 0e 30 86 06 48 0e 38 83 07 47 |E.(..D.0..H.8..G| 00002270 0e 40 6e 0e 38 41 0e 30 41 0e 28 42 0e 20 42 0e |.@n.8A.0A.(B. B.| 00002280 18 42 0e 10 42 0e 08 00 10 00 00 00 14 01 00 00 |.B..B...........| 00002290 50 f1 ff ff 05 00 00 00 00 00 00 00 00 00 00 00 |P...............| 000022a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00002da0 a0 11 00 00 00 00 00 00 60 11 00 00 00 00 00 00 |........`.......| 00002db0 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 00002dc0 0c 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................| 00002dd0 0d 00 00 00 00 00 00 00 e8 13 00 00 00 00 00 00 |................| 00002de0 19 00 00 00 00 00 00 00 a0 3d 00 00 00 00 00 00 |.........=......| 00002df0 1b 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00002e00 1a 00 00 00 00 00 00 00 a8 3d 00 00 00 00 00 00 |.........=......| 00002e10 1c 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00002e20 f5 fe ff 6f 00 00 00 00 a0 03 00 00 00 00 00 00 |...o............| 00002e30 05 00 00 00 00 00 00 00 b8 04 00 00 00 00 00 00 |................| 00002e40 06 00 00 00 00 00 00 00 c8 03 00 00 00 00 00 00 |................| 00002e50 0a 00 00 00 00 00 00 00 a9 00 00 00 00 00 00 00 |................| 00002e60 0b 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 |................| 00002e70 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00002e80 03 00 00 00 00 00 00 00 a0 3f 00 00 00 00 00 00 |.........?......| 00002e90 02 00 00 00 00 00 00 00 60 00 00 00 00 00 00 00 |........`.......| 00002ea0 14 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 |................| 00002eb0 17 00 00 00 00 00 00 00 68 06 00 00 00 00 00 00 |........h.......| 00002ec0 07 00 00 00 00 00 00 00 a8 05 00 00 00 00 00 00 |................| 00002ed0 08 00 00 00 00 00 00 00 c0 00 00 00 00 00 00 00 |................| 00002ee0 09 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 |................| 00002ef0 1e 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00002f00 fb ff ff 6f 00 00 00 00 01 00 00 08 00 00 00 00 |...o............| 00002f10 fe ff ff 6f 00 00 00 00 78 05 00 00 00 00 00 00 |...o....x.......| 00002f20 ff ff ff 6f 00 00 00 00 01 00 00 00 00 00 00 00 |...o............| 00002f30 f0 ff ff 6f 00 00 00 00 62 05 00 00 00 00 00 00 |...o....b.......| 00002f40 f9 ff ff 6f 00 00 00 00 03 00 00 00 00 00 00 00 |...o............| 00002f50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00002fa0 b0 3d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.=..............| 00002fb0 00 00 00 00 00 00 00 00 30 10 00 00 00 00 00 00 |........0.......| 00002fc0 40 10 00 00 00 00 00 00 50 10 00 00 00 00 00 00 |@.......P.......| 00002fd0 60 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |`...............| 00002fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00003000 00 00 00 00 00 00 00 00 08 40 00 00 00 00 00 00 |.........@......| 00003010 47 43 43 3a 20 28 55 62 75 6e 74 75 20 39 2e 34 |GCC: (Ubuntu 9.4| 00003020 2e 30 2d 31 75 62 75 6e 74 75 31 7e 32 30 2e 30 |.0-1ubuntu1~20.0| 00003030 34 2e 31 29 20 39 2e 34 2e 30 00 00 00 00 00 00 |4.1) 9.4.0......| 00003040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00003050 00 00 00 00 00 00 00 00 00 00 00 00 03 00 01 00 |................| 00003060 18 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00003070 00 00 00 00 03 00 02 00 38 03 00 00 00 00 00 00 |........8.......| 00003080 00 00 00 00 00 00 00 00 00 00 00 00 03 00 03 00 |................| 00003090 58 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |X...............| 000030a0 00 00 00 00 03 00 04 00 7c 03 00 00 00 00 00 00 |........|.......| 000030b0 00 00 00 00 00 00 00 00 00 00 00 00 03 00 05 00 |................| 000030c0 a0 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000030d0 00 00 00 00 03 00 06 00 c8 03 00 00 00 00 00 00 |................| 000030e0 00 00 00 00 00 00 00 00 00 00 00 00 03 00 07 00 |................| 000030f0 b8 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00003100 00 00 00 00 03 00 08 00 62 05 00 00 00 00 00 00 |........b.......| 00003110 00 00 00 00 00 00 00 00 00 00 00 00 03 00 09 00 |................| 00003120 78 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |x...............| 00003130 00 00 00 00 03 00 0a 00 a8 05 00 00 00 00 00 00 |................| 00003140 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0b 00 |................| 00003150 68 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |h...............| 00003160 00 00 00 00 03 00 0c 00 00 10 00 00 00 00 00 00 |................| 00003170 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0d 00 |................| 00003180 20 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ...............| 00003190 00 00 00 00 03 00 0e 00 70 10 00 00 00 00 00 00 |........p.......| 000031a0 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0f 00 |................| 000031b0 80 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000031c0 00 00 00 00 03 00 10 00 c0 10 00 00 00 00 00 00 |................| 000031d0 00 00 00 00 00 00 00 00 00 00 00 00 03 00 11 00 |................| 000031e0 e8 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000031f0 00 00 00 00 03 00 12 00 00 20 00 00 00 00 00 00 |......... ......| 00003200 00 00 00 00 00 00 00 00 00 00 00 00 03 00 13 00 |................| 00003210 2c 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |,!..............| 00003220 00 00 00 00 03 00 14 00 78 21 00 00 00 00 00 00 |........x!......| 00003230 00 00 00 00 00 00 00 00 00 00 00 00 03 00 15 00 |................| 00003240 a0 3d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.=..............| 00003250 00 00 00 00 03 00 16 00 a8 3d 00 00 00 00 00 00 |.........=......| 00003260 00 00 00 00 00 00 00 00 00 00 00 00 03 00 17 00 |................| 00003270 b0 3d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.=..............| 00003280 00 00 00 00 03 00 18 00 a0 3f 00 00 00 00 00 00 |.........?......| 00003290 00 00 00 00 00 00 00 00 00 00 00 00 03 00 19 00 |................| 000032a0 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.@..............| 000032b0 00 00 00 00 03 00 1a 00 10 40 00 00 00 00 00 00 |.........@......| 000032c0 00 00 00 00 00 00 00 00 00 00 00 00 03 00 1b 00 |................| 000032d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000032e0 01 00 00 00 04 00 f1 ff 00 00 00 00 00 00 00 00 |................| 000032f0 00 00 00 00 00 00 00 00 0c 00 00 00 02 00 10 00 |................| 00003300 f0 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00003310 0e 00 00 00 02 00 10 00 20 11 00 00 00 00 00 00 |........ .......| 00003320 00 00 00 00 00 00 00 00 21 00 00 00 02 00 10 00 |........!.......| 00003330 60 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |`...............| 00003340 37 00 00 00 01 00 1a 00 10 40 00 00 00 00 00 00 |7........@......| 00003350 01 00 00 00 00 00 00 00 46 00 00 00 01 00 16 00 |........F.......| 00003360 a8 3d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.=..............| 00003370 6d 00 00 00 02 00 10 00 a0 11 00 00 00 00 00 00 |m...............| 00003380 00 00 00 00 00 00 00 00 79 00 00 00 01 00 15 00 |........y.......| 00003390 a0 3d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.=..............| 000033a0 98 00 00 00 04 00 f1 ff 00 00 00 00 00 00 00 00 |................| 000033b0 00 00 00 00 00 00 00 00 01 00 00 00 04 00 f1 ff |................| 000033c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000033d0 9f 00 00 00 01 00 14 00 9c 22 00 00 00 00 00 00 |........."......| 000033e0 00 00 00 00 00 00 00 00 00 00 00 00 04 00 f1 ff |................| 000033f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00003400 ad 00 00 00 00 00 15 00 a8 3d 00 00 00 00 00 00 |.........=......| 00003410 00 00 00 00 00 00 00 00 be 00 00 00 01 00 17 00 |................| 00003420 b0 3d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.=..............| 00003430 c7 00 00 00 00 00 15 00 a0 3d 00 00 00 00 00 00 |.........=......| 00003440 00 00 00 00 00 00 00 00 da 00 00 00 00 00 13 00 |................| 00003450 2c 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |,!..............| 00003460 ed 00 00 00 01 00 18 00 a0 3f 00 00 00 00 00 00 |.........?......| 00003470 00 00 00 00 00 00 00 00 ed 01 00 00 02 00 0c 00 |................| 00003480 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00003490 03 01 00 00 12 00 10 00 e0 13 00 00 00 00 00 00 |................| 000034a0 05 00 00 00 00 00 00 00 13 01 00 00 20 00 00 00 |............ ...| 000034b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000034c0 ad 01 00 00 20 00 19 00 00 40 00 00 00 00 00 00 |.... ....@......| 000034d0 00 00 00 00 00 00 00 00 2f 01 00 00 12 00 00 00 |......../.......| 000034e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000034f0 41 01 00 00 11 00 12 00 c0 20 00 00 00 00 00 00 |A........ ......| 00003500 40 00 00 00 00 00 00 00 48 01 00 00 12 00 10 00 |@.......H.......| 00003510 a9 11 00 00 00 00 00 00 78 01 00 00 00 00 00 00 |........x.......| 00003520 56 01 00 00 11 00 12 00 20 20 00 00 00 00 00 00 |V....... ......| 00003530 44 00 00 00 00 00 00 00 5d 01 00 00 10 00 19 00 |D.......].......| 00003540 10 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.@..............| 00003550 0d 01 00 00 12 02 11 00 e8 13 00 00 00 00 00 00 |................| 00003560 00 00 00 00 00 00 00 00 64 01 00 00 12 00 00 00 |........d.......| 00003570 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00003580 78 01 00 00 12 00 00 00 00 00 00 00 00 00 00 00 |x...............| 00003590 00 00 00 00 00 00 00 00 8c 01 00 00 12 00 00 00 |................| 000035a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000035b0 ab 01 00 00 10 00 19 00 00 40 00 00 00 00 00 00 |.........@......| 000035c0 00 00 00 00 00 00 00 00 b8 01 00 00 20 00 00 00 |............ ...| 000035d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000035e0 c7 01 00 00 11 02 19 00 08 40 00 00 00 00 00 00 |.........@......| 000035f0 00 00 00 00 00 00 00 00 d4 01 00 00 11 00 12 00 |................| 00003600 00 20 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |. ..............| 00003610 e3 01 00 00 12 00 10 00 70 13 00 00 00 00 00 00 |........p.......| 00003620 65 00 00 00 00 00 00 00 b9 00 00 00 10 00 1a 00 |e...............| 00003630 18 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.@..............| 00003640 b1 01 00 00 12 00 10 00 c0 10 00 00 00 00 00 00 |................| 00003650 2f 00 00 00 00 00 00 00 f3 01 00 00 11 00 12 00 |/...............| 00003660 80 20 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |. ......@.......| 00003670 fa 01 00 00 10 00 1a 00 10 40 00 00 00 00 00 00 |.........@......| 00003680 00 00 00 00 00 00 00 00 06 02 00 00 12 00 10 00 |................| 00003690 21 13 00 00 00 00 00 00 43 00 00 00 00 00 00 00 |!.......C.......| 000036a0 0b 02 00 00 12 00 00 00 00 00 00 00 00 00 00 00 |................| 000036b0 00 00 00 00 00 00 00 00 25 02 00 00 11 02 19 00 |........%.......| 000036c0 10 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.@..............| 000036d0 31 02 00 00 20 00 00 00 00 00 00 00 00 00 00 00 |1... ...........| 000036e0 00 00 00 00 00 00 00 00 4b 02 00 00 22 00 00 00 |........K..."...| 000036f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00003700 00 63 72 74 73 74 75 66 66 2e 63 00 64 65 72 65 |.crtstuff.c.dere| 00003710 67 69 73 74 65 72 5f 74 6d 5f 63 6c 6f 6e 65 73 |gister_tm_clones| 00003720 00 5f 5f 64 6f 5f 67 6c 6f 62 61 6c 5f 64 74 6f |.__do_global_dto| 00003730 72 73 5f 61 75 78 00 63 6f 6d 70 6c 65 74 65 64 |rs_aux.completed| 00003740 2e 38 30 36 31 00 5f 5f 64 6f 5f 67 6c 6f 62 61 |.8061.__do_globa| 00003750 6c 5f 64 74 6f 72 73 5f 61 75 78 5f 66 69 6e 69 |l_dtors_aux_fini| 00003760 5f 61 72 72 61 79 5f 65 6e 74 72 79 00 66 72 61 |_array_entry.fra| 00003770 6d 65 5f 64 75 6d 6d 79 00 5f 5f 66 72 61 6d 65 |me_dummy.__frame| 00003780 5f 64 75 6d 6d 79 5f 69 6e 69 74 5f 61 72 72 61 |_dummy_init_arra| 00003790 79 5f 65 6e 74 72 79 00 6d 61 69 6e 2e 63 00 5f |y_entry.main.c._| 000037a0 5f 46 52 41 4d 45 5f 45 4e 44 5f 5f 00 5f 5f 69 |_FRAME_END__.__i| 000037b0 6e 69 74 5f 61 72 72 61 79 5f 65 6e 64 00 5f 44 |nit_array_end._D| 000037c0 59 4e 41 4d 49 43 00 5f 5f 69 6e 69 74 5f 61 72 |YNAMIC.__init_ar| 000037d0 72 61 79 5f 73 74 61 72 74 00 5f 5f 47 4e 55 5f |ray_start.__GNU_| 000037e0 45 48 5f 46 52 41 4d 45 5f 48 44 52 00 5f 47 4c |EH_FRAME_HDR._GL| 000037f0 4f 42 41 4c 5f 4f 46 46 53 45 54 5f 54 41 42 4c |OBAL_OFFSET_TABL| 00003800 45 5f 00 5f 5f 6c 69 62 63 5f 63 73 75 5f 66 69 |E_.__libc_csu_fi| 00003810 6e 69 00 5f 49 54 4d 5f 64 65 72 65 67 69 73 74 |ni._ITM_deregist| 00003820 65 72 54 4d 43 6c 6f 6e 65 54 61 62 6c 65 00 70 |erTMCloneTable.p| 00003830 75 74 73 40 40 47 4c 49 42 43 5f 32 2e 32 2e 35 |uts@@GLIBC_2.2.5| 00003840 00 66 6c 61 67 5f 32 00 76 61 6c 69 64 61 74 65 |.flag_2.validate| 00003850 5f 66 6c 61 67 00 66 6c 61 67 5f 30 00 5f 65 64 |_flag.flag_0._ed| 00003860 61 74 61 00 73 74 72 6c 65 6e 40 40 47 4c 49 42 |ata.strlen@@GLIB| 00003870 43 5f 32 2e 32 2e 35 00 70 72 69 6e 74 66 40 40 |C_2.2.5.printf@@| 00003880 47 4c 49 42 43 5f 32 2e 32 2e 35 00 5f 5f 6c 69 |GLIBC_2.2.5.__li| 00003890 62 63 5f 73 74 61 72 74 5f 6d 61 69 6e 40 40 47 |bc_start_main@@G| 000038a0 4c 49 42 43 5f 32 2e 32 2e 35 00 5f 5f 64 61 74 |LIBC_2.2.5.__dat| 000038b0 61 5f 73 74 61 72 74 00 5f 5f 67 6d 6f 6e 5f 73 |a_start.__gmon_s| 000038c0 74 61 72 74 5f 5f 00 5f 5f 64 73 6f 5f 68 61 6e |tart__.__dso_han| 000038d0 64 6c 65 00 5f 49 4f 5f 73 74 64 69 6e 5f 75 73 |dle._IO_stdin_us| 000038e0 65 64 00 5f 5f 6c 69 62 63 5f 63 73 75 5f 69 6e |ed.__libc_csu_in| 000038f0 69 74 00 66 6c 61 67 5f 31 00 5f 5f 62 73 73 5f |it.flag_1.__bss_| 00003900 73 74 61 72 74 00 6d 61 69 6e 00 5f 5f 69 73 6f |start.main.__iso| 00003910 63 39 39 5f 73 63 61 6e 66 40 40 47 4c 49 42 43 |c99_scanf@@GLIBC| 00003920 5f 32 2e 37 00 5f 5f 54 4d 43 5f 45 4e 44 5f 5f |_2.7.__TMC_END__| 00003930 00 5f 49 54 4d 5f 72 65 67 69 73 74 65 72 54 4d |._ITM_registerTM| 00003940 43 6c 6f 6e 65 54 61 62 6c 65 00 5f 5f 63 78 61 |CloneTable.__cxa| 00003950 5f 66 69 6e 61 6c 69 7a 65 40 40 47 4c 49 42 43 |_finalize@@GLIBC| 00003960 5f 32 2e 32 2e 35 00 00 2e 73 79 6d 74 61 62 00 |_2.2.5...symtab.| 00003970 2e 73 74 72 74 61 62 00 2e 73 68 73 74 72 74 61 |.strtab..shstrta| 00003980 62 00 2e 69 6e 74 65 72 70 00 2e 6e 6f 74 65 2e |b..interp..note.| 00003990 67 6e 75 2e 70 72 6f 70 65 72 74 79 00 2e 6e 6f |gnu.property..no| 000039a0 74 65 2e 67 6e 75 2e 62 75 69 6c 64 2d 69 64 00 |te.gnu.build-id.| 000039b0 2e 6e 6f 74 65 2e 41 42 49 2d 74 61 67 00 2e 67 |.note.ABI-tag..g| 000039c0 6e 75 2e 68 61 73 68 00 2e 64 79 6e 73 79 6d 00 |nu.hash..dynsym.| 000039d0 2e 64 79 6e 73 74 72 00 2e 67 6e 75 2e 76 65 72 |.dynstr..gnu.ver| 000039e0 73 69 6f 6e 00 2e 67 6e 75 2e 76 65 72 73 69 6f |sion..gnu.versio| 000039f0 6e 5f 72 00 2e 72 65 6c 61 2e 64 79 6e 00 2e 72 |n_r..rela.dyn..r| 00003a00 65 6c 61 2e 70 6c 74 00 2e 69 6e 69 74 00 2e 70 |ela.plt..init..p| 00003a10 6c 74 2e 67 6f 74 00 2e 70 6c 74 2e 73 65 63 00 |lt.got..plt.sec.| 00003a20 2e 74 65 78 74 00 2e 66 69 6e 69 00 2e 72 6f 64 |.text..fini..rod| 00003a30 61 74 61 00 2e 65 68 5f 66 72 61 6d 65 5f 68 64 |ata..eh_frame_hd| 00003a40 72 00 2e 65 68 5f 66 72 61 6d 65 00 2e 69 6e 69 |r..eh_frame..ini| 00003a50 74 5f 61 72 72 61 79 00 2e 66 69 6e 69 5f 61 72 |t_array..fini_ar| 00003a60 72 61 79 00 2e 64 79 6e 61 6d 69 63 00 2e 64 61 |ray..dynamic..da| 00003a70 74 61 00 2e 62 73 73 00 2e 63 6f 6d 6d 65 6e 74 |ta..bss..comment| 00003a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00003ac0 00 00 00 00 00 00 00 00 1b 00 00 00 01 00 00 00 |................| 00003ad0 02 00 00 00 00 00 00 00 18 03 00 00 00 00 00 00 |................| 00003ae0 18 03 00 00 00 00 00 00 1c 00 00 00 00 00 00 00 |................| 00003af0 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 00003b00 00 00 00 00 00 00 00 00 23 00 00 00 07 00 00 00 |........#.......| 00003b10 02 00 00 00 00 00 00 00 38 03 00 00 00 00 00 00 |........8.......| 00003b20 38 03 00 00 00 00 00 00 20 00 00 00 00 00 00 00 |8....... .......| 00003b30 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00003b40 00 00 00 00 00 00 00 00 36 00 00 00 07 00 00 00 |........6.......| 00003b50 02 00 00 00 00 00 00 00 58 03 00 00 00 00 00 00 |........X.......| 00003b60 58 03 00 00 00 00 00 00 24 00 00 00 00 00 00 00 |X.......$.......| 00003b70 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |................| 00003b80 00 00 00 00 00 00 00 00 49 00 00 00 07 00 00 00 |........I.......| 00003b90 02 00 00 00 00 00 00 00 7c 03 00 00 00 00 00 00 |........|.......| 00003ba0 7c 03 00 00 00 00 00 00 20 00 00 00 00 00 00 00 ||....... .......| 00003bb0 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |................| 00003bc0 00 00 00 00 00 00 00 00 57 00 00 00 f6 ff ff 6f |........W......o| 00003bd0 02 00 00 00 00 00 00 00 a0 03 00 00 00 00 00 00 |................| 00003be0 a0 03 00 00 00 00 00 00 24 00 00 00 00 00 00 00 |........$.......| 00003bf0 06 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00003c00 00 00 00 00 00 00 00 00 61 00 00 00 0b 00 00 00 |........a.......| 00003c10 02 00 00 00 00 00 00 00 c8 03 00 00 00 00 00 00 |................| 00003c20 c8 03 00 00 00 00 00 00 f0 00 00 00 00 00 00 00 |................| 00003c30 07 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00 |................| 00003c40 18 00 00 00 00 00 00 00 69 00 00 00 03 00 00 00 |........i.......| 00003c50 02 00 00 00 00 00 00 00 b8 04 00 00 00 00 00 00 |................| 00003c60 b8 04 00 00 00 00 00 00 a9 00 00 00 00 00 00 00 |................| 00003c70 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 00003c80 00 00 00 00 00 00 00 00 71 00 00 00 ff ff ff 6f |........q......o| 00003c90 02 00 00 00 00 00 00 00 62 05 00 00 00 00 00 00 |........b.......| 00003ca0 62 05 00 00 00 00 00 00 14 00 00 00 00 00 00 00 |b...............| 00003cb0 06 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 |................| 00003cc0 02 00 00 00 00 00 00 00 7e 00 00 00 fe ff ff 6f |........~......o| 00003cd0 02 00 00 00 00 00 00 00 78 05 00 00 00 00 00 00 |........x.......| 00003ce0 78 05 00 00 00 00 00 00 30 00 00 00 00 00 00 00 |x.......0.......| 00003cf0 07 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00 |................| 00003d00 00 00 00 00 00 00 00 00 8d 00 00 00 04 00 00 00 |................| 00003d10 02 00 00 00 00 00 00 00 a8 05 00 00 00 00 00 00 |................| 00003d20 a8 05 00 00 00 00 00 00 c0 00 00 00 00 00 00 00 |................| 00003d30 06 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00003d40 18 00 00 00 00 00 00 00 97 00 00 00 04 00 00 00 |................| 00003d50 42 00 00 00 00 00 00 00 68 06 00 00 00 00 00 00 |B.......h.......| 00003d60 68 06 00 00 00 00 00 00 60 00 00 00 00 00 00 00 |h.......`.......| 00003d70 06 00 00 00 18 00 00 00 08 00 00 00 00 00 00 00 |................| 00003d80 18 00 00 00 00 00 00 00 a1 00 00 00 01 00 00 00 |................| 00003d90 06 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................| 00003da0 00 10 00 00 00 00 00 00 1b 00 00 00 00 00 00 00 |................| 00003db0 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |................| 00003dc0 00 00 00 00 00 00 00 00 9c 00 00 00 01 00 00 00 |................| 00003dd0 06 00 00 00 00 00 00 00 20 10 00 00 00 00 00 00 |........ .......| 00003de0 20 10 00 00 00 00 00 00 50 00 00 00 00 00 00 00 | .......P.......| 00003df0 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 |................| 00003e00 10 00 00 00 00 00 00 00 a7 00 00 00 01 00 00 00 |................| 00003e10 06 00 00 00 00 00 00 00 70 10 00 00 00 00 00 00 |........p.......| 00003e20 70 10 00 00 00 00 00 00 10 00 00 00 00 00 00 00 |p...............| 00003e30 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 |................| 00003e40 10 00 00 00 00 00 00 00 b0 00 00 00 01 00 00 00 |................| 00003e50 06 00 00 00 00 00 00 00 80 10 00 00 00 00 00 00 |................| 00003e60 80 10 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |........@.......| 00003e70 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 |................| 00003e80 10 00 00 00 00 00 00 00 b9 00 00 00 01 00 00 00 |................| 00003e90 06 00 00 00 00 00 00 00 c0 10 00 00 00 00 00 00 |................| 00003ea0 c0 10 00 00 00 00 00 00 25 03 00 00 00 00 00 00 |........%.......| 00003eb0 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 |................| 00003ec0 00 00 00 00 00 00 00 00 bf 00 00 00 01 00 00 00 |................| 00003ed0 06 00 00 00 00 00 00 00 e8 13 00 00 00 00 00 00 |................| 00003ee0 e8 13 00 00 00 00 00 00 0d 00 00 00 00 00 00 00 |................| 00003ef0 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |................| 00003f00 00 00 00 00 00 00 00 00 c5 00 00 00 01 00 00 00 |................| 00003f10 02 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 |......... ......| 00003f20 00 20 00 00 00 00 00 00 2c 01 00 00 00 00 00 00 |. ......,.......| 00003f30 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 |........ .......| 00003f40 00 00 00 00 00 00 00 00 cd 00 00 00 01 00 00 00 |................| 00003f50 02 00 00 00 00 00 00 00 2c 21 00 00 00 00 00 00 |........,!......| 00003f60 2c 21 00 00 00 00 00 00 4c 00 00 00 00 00 00 00 |,!......L.......| 00003f70 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |................| 00003f80 00 00 00 00 00 00 00 00 db 00 00 00 01 00 00 00 |................| 00003f90 02 00 00 00 00 00 00 00 78 21 00 00 00 00 00 00 |........x!......| 00003fa0 78 21 00 00 00 00 00 00 28 01 00 00 00 00 00 00 |x!......(.......| 00003fb0 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00003fc0 00 00 00 00 00 00 00 00 e5 00 00 00 0e 00 00 00 |................| 00003fd0 03 00 00 00 00 00 00 00 a0 3d 00 00 00 00 00 00 |.........=......| 00003fe0 a0 2d 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |.-..............| 00003ff0 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00004000 08 00 00 00 00 00 00 00 f1 00 00 00 0f 00 00 00 |................| 00004010 03 00 00 00 00 00 00 00 a8 3d 00 00 00 00 00 00 |.........=......| 00004020 a8 2d 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |.-..............| 00004030 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00004040 08 00 00 00 00 00 00 00 fd 00 00 00 06 00 00 00 |................| 00004050 03 00 00 00 00 00 00 00 b0 3d 00 00 00 00 00 00 |.........=......| 00004060 b0 2d 00 00 00 00 00 00 f0 01 00 00 00 00 00 00 |.-..............| 00004070 07 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00004080 10 00 00 00 00 00 00 00 ab 00 00 00 01 00 00 00 |................| 00004090 03 00 00 00 00 00 00 00 a0 3f 00 00 00 00 00 00 |.........?......| 000040a0 a0 2f 00 00 00 00 00 00 60 00 00 00 00 00 00 00 |./......`.......| 000040b0 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 000040c0 08 00 00 00 00 00 00 00 06 01 00 00 01 00 00 00 |................| 000040d0 03 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 |.........@......| 000040e0 00 30 00 00 00 00 00 00 10 00 00 00 00 00 00 00 |.0..............| 000040f0 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................| 00004100 00 00 00 00 00 00 00 00 0c 01 00 00 08 00 00 00 |................| 00004110 03 00 00 00 00 00 00 00 10 40 00 00 00 00 00 00 |.........@......| 00004120 10 30 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |.0..............| 00004130 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 00004140 00 00 00 00 00 00 00 00 11 01 00 00 01 00 00 00 |................| 00004150 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |0...............| 00004160 10 30 00 00 00 00 00 00 2b 00 00 00 00 00 00 00 |.0......+.......| 00004170 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 00004180 01 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 |................| 00004190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000041a0 40 30 00 00 00 00 00 00 c0 06 00 00 00 00 00 00 |@0..............| 000041b0 1d 00 00 00 2e 00 00 00 08 00 00 00 00 00 00 00 |................| 000041c0 18 00 00 00 00 00 00 00 09 00 00 00 03 00 00 00 |................| 000041d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000041e0 00 37 00 00 00 00 00 00 67 02 00 00 00 00 00 00 |.7......g.......| 000041f0 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 00004200 00 00 00 00 00 00 00 00 11 00 00 00 03 00 00 00 |................| 00004210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00004220 67 39 00 00 00 00 00 00 1a 01 00 00 00 00 00 00 |g9..............| 00004230 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 00004240 00 00 00 00 00 00 00 00 |........| 00004248
このようになりました。フラグが無いか探すと
00002020 63 00 00 00 34 00 00 00 63 00 00 00 5f 00 00 00 |c...4...c..._...| 00002030 75 00 00 00 62 00 00 00 5f 00 00 00 5f 00 00 00 |u...b..._..._...| 00002040 64 00 00 00 74 00 00 00 5f 00 00 00 72 00 00 00 |d...t..._...r...| 00002050 5f 00 00 00 31 00 00 00 5f 00 00 00 34 00 00 00 |_...1..._...4...| 00002060 7d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |}...............| 00002070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00002080 74 00 00 00 62 00 00 00 34 00 00 00 79 00 00 00 |t...b...4...y...| 00002090 5f 00 00 00 31 00 00 00 74 00 00 00 75 00 00 00 |_...1...t...u...| 000020a0 30 00 00 00 34 00 00 00 74 00 00 00 65 00 00 00 |0...4...t...e...| 000020b0 73 00 00 00 69 00 00 00 66 00 00 00 67 00 00 00 |s...i...f...g...| 000020c0 66 00 00 00 7b 00 00 00 6e 00 00 00 30 00 00 00 |f...{...n...0...| 000020d0 61 00 00 00 65 00 00 00 30 00 00 00 6e 00 00 00 |a...e...0...n...| 000020e0 5f 00 00 00 65 00 00 00 34 00 00 00 65 00 00 00 |_...e...4...e...| 000020f0 70 00 00 00 74 00 00 00 31 00 00 00 33 00 00 00 |p...t...1...3...|
この部分を並び替えてあげることによって、ctf4b{… の文字列が出てきそうです。
順番通りに並び替えてあげると
ctf4b{c4n_y0u_ab1e_t0_und0_t4e_t4ree_sp1it_f14g3}
フラグを見つけることができました。
Poker(medium)
そして、Pokerです。問題文は以下の通りです。
みんなでポーカーで遊ぼう!点数をたくさん獲得するとフラグがもらえるみたい! でもこのバイナリファイル、動かしてみると...?実行しながら中身が確認できる専門のツールを使ってみよう!
配布ファイルはPoker.tar.gzでした。
問題文から動的解析をして値を書き換える必要があるということがわかります。
ではこれも展開して実行してみましょう。
実行すると、ポーカーゲームが始まり、特定の点数以上にいくとフラグが貰えるようです。
██╗███╗ ██╗██████╗ ██╗ █████╗ ███╗ ██╗ ██████╗ ██████╗ ██╗ ██╗███████╗██████╗ ██║████╗ ██║██╔══██╗██║██╔══██╗████╗ ██║ ██╔══██╗██╔═══██╗██║ ██╔╝██╔════╝██╔══██╗ ██║██╔██╗ ██║██║ ██║██║███████║██╔██╗ ██║ ██████╔╝██║ ██║█████╔╝ █████╗ ██████╔╝ ██║██║╚██╗██║██║ ██║██║██╔══██║██║╚██╗██║ ██╔═══╝ ██║ ██║██╔═██╗ ██╔══╝ ██╔══██╗ ██║██║ ╚████║██████╔╝██║██║ ██║██║ ╚████║ ██║ ╚██████╔╝██║ ██╗███████╗██║ ██║ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═ ================ | Score : 0 | ================ [?] Enter 1 or 2:
さっそく動的解析を行っていきます。動的解析にはgdb-pedaを使用しました。
gdb上でrunコマンド実行して、プログラムが始まると一回1か2を選択して、ctrl+c
でプログラムを中止させます。
するとデバッグ画面が出てきます。
gdb-peda$ run
nextコマンドで先に進めていきましょう。
gdb-peda$ n
しばらくするとcmp DWORD PTR [rbp-0x4],0x63
という命令が見えてきます。
この命令から99回ポーカーで勝利するとフラグが表示されるようです。
レジスタに買った回数が記録されているときに、その値を書き換えてあげるとフラグが出ました。
ctf4b{4ll_w3_h4v3_70_d3cide_1s_wh4t_t0_d0_w1th_7he_71m3_7h47_i5_g1v3n_u5}
ELFの実行可能ヘッダーについて
実行可能ヘッダーを詳しく見ていこうと思います。
実行可能ヘッダーの定義
ターミナルでman elf
を入力することで確認することができます。
#define EI_NIDENT 16 typedef struct { unsigned char e_ident[EI_NIDENT]; uint16_t e_type; uint16_t e_machine; uint32_t e_version; ElfN_Addr e_entry; ElfN_Off e_phoff; ElfN_Off e_shoff; uint32_t e_flags; uint16_t e_ehsize; uint16_t e_phentsize; uint16_t e_phnum; uint16_t e_shentsize; uint16_t e_shnum; uint16_t e_shstrndx; } ElfN_Ehdr;
e_ident配列
e_identは16バイトの配列です。この配列の先頭にはELFファイルであることを示す、0x7f454c46という値が入っています。
続いて、このELFファイルが何ビットのアーキテクチャで構成されているかを表す値が入ります。
- 32ビット => 1
- 64ビット => 2
その後にはバイトオーダーを示すビット列が並びます。
次のバイトには、ELFのバージョンが入ります。現在のバージョンは1しかありません。
最後は、ABI(Application Binary Interface)とOSの情報を示す値が格納されます。ここは難しくてよく分かりませんでしたが、デフォルトの値は0入るそうです。
e_typeフィールド
このフィールドには、バイナリの種類が入ります。
- ET_NONE(ファイルタイプが存在しない) => 0
- ET_REL(再配置可能ファイル) => 1
- ET_EXEC(実行可能ファイル) => 2
- ET_DYN(共有オブジェクトファイル) => 3
- ET_CORE(コアファイル) => 4
e_machineフィールド
このフィールドには、バイナリを実行するアーキテクチャが入ります。下記に有名なものを抜粋しました。
- ARM 32-bit architecture => 40(0x28)
- AMD x86-64 architecture => 62(0x3E)
- ARM 64-bit architecture => 183(0xB7)
e_versionフィールド
ここには、e_ident配列にも記述されていたELFファイルのバージョンが入ります。
現状は1しかありません。
e_entryフィールド
このフィールドには、バイナリのエントリポイントと呼ばれる、実行を開始すべき場所の仮想アドレスが入ります。
環境によって入る値が変わります。
例:0x400100
e_phoffフィールド
これは、プログラムヘッダーテーブルのファイルオフセットを示します。64ビットアーキテクチャの場合、64(0x40)となります。
※ ファイルオフセット‥ヘッダーにたどり着くまでにファイルから読み取らなければならないバイト数のこと
e_shoffフィールド
ここは、セクションヘッダーテーブルのファイルオフセットを示します。環境によって大きく値が違ってきます。
セクションヘッダーテーブルが存在しない場合、0が入ります。
e_flagsフィールド
このフィールドには、プロセッサ固有のフラグが入ります。
x86バイナリの場合は、基本的に0が入るそうです。
e_ehsizeフィールド
実行可能ヘッダーの大きさを表します。
e_phentsizeフィールド
ELFファイルのプログラムヘッダーテーブルのエントリサイズをバイト単位で示します。
例:56バイト(0x38)
e_phnumフィールド
このフィールドは、プログラムヘッダテーブルのエントリ数を表します。
例:9
e_phentsizeフィールドとe_phnumフィールドの値を掛けることによって、プログラムヘッダーテーブル内の合計サイズを求めることができます。
e_shentsizeフィールド
このフィールドには、セクションヘッダーテーブルのエントリサイズをバイト単位で示します。
例:64バイト(0x40)
e_shnumフィールド
ここには、セクションヘッダーテーブルのエントリ数が入ります。
例:31(0x1F)
e_shentsizeフィールドとe_shnumフィールドの値を掛けることによって、セクションヘッダーテーブルの内の合計サイズを求めることができます。
e_shstrndxフィールド
このフィールドには、セクションヘッダー文字列テーブルのインデックスが記述されています。
例:28(0x1C)
まとめ
最初の方はイメージしやすかったのですが、後半のフィールド値の役割や意味をあまり理解できませんでした。 しかし、プログラムヘッダーやセクションヘッダーについて少し触れることができました。
次は、セクションヘッダーについて詳しく勉強していこうと思います。
WaniCTF 2023 Writeup
Reversingのfermatという問題のWriteupを書きます。
様子を見る
zipファイルを解凍し、fileコマンドでファイル形式を確認します。
fermat: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=163a577f34700eab526e54e030d57fe930b0aa76, for GNU/Linux 3.2.0, not stripped
ELFの実行ファイルであることがわかりました。
実行すると、Input a>
と出てきたので適当にeを入力すると
Input b> Input c> (a, b, c) = (0, 0, 0) Invalid value :(
このような文字が返ってきました。
stringsコマンドで表示可能な文字列を見てもフラグは無さそうです。
Ghidraで静的解析をする
続いてGhidraで静的解析を行います。
Symbol Treeを確認すると、checkという怪しそうな関数名がありました。
check関数の中身を確認すると
undefined8 check(uint param_1,uint param_2,uint param_3) { undefined8 uVar1; if (((param_1 < 3) || (param_2 < 3)) || (param_3 < 3)) { uVar1 = 0; } else if (param_1 * param_1 * param_1 + param_2 * param_2 * param_2 == param_3 * param_3 * param_ 3) { uVar1 = 1; } else { uVar1 = 0; } return uVar1; }
と書かれていました。どうやら、x3+y3=z3を満たす3以上の引数3つを入力するといいっぽいです。
しかし、フェルマーの最終定理によりこれを満たすx, y, zは存在しません。デバッガを利用するしかなさそうです。
GDBで動的解析をする
次はデバッガであるgdbを使って、動的解析をします。
gdb fermat
でgdbを立ち上げます。
check関数の動きを見たいので、b check
でbreak pointを設定します。
run
で動かすと入力を求められるのでとりあえず、5を3回入力します。
Input a> 5 Input b> 5 Input c> 5 (a, b, c) = (5, 5, 5)
次にGhidraのcheck関数のアセンブラから対象のジャンプ命令の箇所を探します。
gdbに戻ってこの命令の箇所まで飛ばしましょう。
ここでinfo registers
を入力してレジスタの状態を確認します。
eflagsにZFが立っていません。JZはZFが立っていないとジャンプしないため、ここでZFを立たせます。
ZFを立たせればよいので、適当にset $eflags=0x246
を入力します。
もう一度レジスタの状態を確認すると
eflagsにZFが立っています。このまま進めてみましょう。
何回か進めると無事にフラグが出てきました。
ELFのことを少し勉強した
ELFについて
ELFとは、Executable and Linkable Format のことです。Linuxのシステムにおいて標準のバイナリフォーマットになっています。
ELFの構成
ELFは大きく以下の4つに分けることができます。
- 実行可能ヘッダー
- プログラムヘッダー
- セクション
- セクションヘッダー
ELFの定義を見る
ターミナルでman elf
を入力すると見ることができます。
↓実行可能ヘッダーのみ抜粋
#define EI_NIDENT 16 typedef struct { unsigned char e_ident[EI_NIDENT]; uint16_t e_type; uint16_t e_machine; uint32_t e_version; ElfN_Addr e_entry; ElfN_Off e_phoff; ElfN_Off e_shoff; uint32_t e_flags; uint16_t e_ehsize; uint16_t e_phentsize; uint16_t e_phnum; uint16_t e_shentsize; uint16_t e_shnum; uint16_t e_shstrndx; } ElfN_Ehdr;
準備
#inlucde <stdio.h> void main() { printf("Hello World!\n"); }
このプログラムをgcc hello.c
でコンパイルします。
実行可能ヘッダーを見る
hello.cをコンパイルした時に作られたa.outの実行可能ヘッダーを見てみます。
実行可能ヘッダーを見るときはreadelf -h a.out
を打ちます。
ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: DYN (Shared object file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x1060 Start of program headers: 64 (bytes into file) Start of section headers: 14712 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 13 Size of section headers: 64 (bytes) Number of section headers: 31 Section header string table index: 30
実行可能ヘッダーでは、このバイナリファイルの種類やアーキテクチャのビット数、バイトオーダーなどを確認することができます。
プログラムヘッダー
次はプログラムヘッダーを確認しましょう。readelf -l -W a.out
を入力してください。
Elf file type is DYN (Shared object file) Entry point 0x1060 There are 13 program headers, starting at offset 64 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align PHDR 0x000040 0x0000000000000040 0x0000000000000040 0x0002d8 0x0002d8 R 0x8 INTERP 0x000318 0x0000000000000318 0x0000000000000318 0x00001c 0x00001c R 0x1 [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x0005f8 0x0005f8 R 0x1000 LOAD 0x001000 0x0000000000001000 0x0000000000001000 0x0001e5 0x0001e5 R E 0x1000 LOAD 0x002000 0x0000000000002000 0x0000000000002000 0x000160 0x000160 R 0x1000 LOAD 0x002db8 0x0000000000003db8 0x0000000000003db8 0x000258 0x000260 RW 0x1000 DYNAMIC 0x002dc8 0x0000000000003dc8 0x0000000000003dc8 0x0001f0 0x0001f0 RW 0x8 NOTE 0x000338 0x0000000000000338 0x0000000000000338 0x000020 0x000020 R 0x8 NOTE 0x000358 0x0000000000000358 0x0000000000000358 0x000044 0x000044 R 0x4 GNU_PROPERTY 0x000338 0x0000000000000338 0x0000000000000338 0x000020 0x000020 R 0x8 GNU_EH_FRAME 0x002014 0x0000000000002014 0x0000000000002014 0x000044 0x000044 R 0x4 GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x10 GNU_RELRO 0x002db8 0x0000000000003db8 0x0000000000003db8 0x000248 0x000248 R 0x1 Section to Segment mapping: Segment Sections... 00 01 .interp 02 .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt 03 .init .plt .plt.got .plt.sec .text .fini 04 .rodata .eh_frame_hdr .eh_frame 05 .init_array .fini_array .dynamic .got .data .bss 06 .dynamic 07 .note.gnu.property 08 .note.gnu.build-id .note.ABI-tag 09 .note.gnu.property 10 .eh_frame_hdr 11 12 .init_array .fini_array .dynamic .got
プログラムヘッダーはELFを実行するための情報を持っています。
セクションヘッダー
続いてセクションヘッダーです。readelf -S -W a.out
を入力してください。
There are 31 section headers, starting at offset 0x3978: Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 [ 1] .interp PROGBITS 0000000000000318 000318 00001c 00 A 0 0 1 [ 2] .note.gnu.property NOTE 0000000000000338 000338 000020 00 A 0 0 8 [ 3] .note.gnu.build-id NOTE 0000000000000358 000358 000024 00 A 0 0 4 [ 4] .note.ABI-tag NOTE 000000000000037c 00037c 000020 00 A 0 0 4 [ 5] .gnu.hash GNU_HASH 00000000000003a0 0003a0 000024 00 A 6 0 8 [ 6] .dynsym DYNSYM 00000000000003c8 0003c8 0000a8 18 A 7 1 8 [ 7] .dynstr STRTAB 0000000000000470 000470 000082 00 A 0 0 1 [ 8] .gnu.version VERSYM 00000000000004f2 0004f2 00000e 02 A 6 0 2 [ 9] .gnu.version_r VERNEED 0000000000000500 000500 000020 00 A 7 1 8 [10] .rela.dyn RELA 0000000000000520 000520 0000c0 18 A 6 0 8 [11] .rela.plt RELA 00000000000005e0 0005e0 000018 18 AI 6 24 8 [12] .init PROGBITS 0000000000001000 001000 00001b 00 AX 0 0 4 [13] .plt PROGBITS 0000000000001020 001020 000020 10 AX 0 0 16 [14] .plt.got PROGBITS 0000000000001040 001040 000010 10 AX 0 0 16 [15] .plt.sec PROGBITS 0000000000001050 001050 000010 10 AX 0 0 16 [16] .text PROGBITS 0000000000001060 001060 000175 00 AX 0 0 16 [17] .fini PROGBITS 00000000000011d8 0011d8 00000d 00 AX 0 0 4 [18] .rodata PROGBITS 0000000000002000 002000 000011 00 A 0 0 4 [19] .eh_frame_hdr PROGBITS 0000000000002014 002014 000044 00 A 0 0 4 [20] .eh_frame PROGBITS 0000000000002058 002058 000108 00 A 0 0 8 [21] .init_array INIT_ARRAY 0000000000003db8 002db8 000008 08 WA 0 0 8 [22] .fini_array FINI_ARRAY 0000000000003dc0 002dc0 000008 08 WA 0 0 8 [23] .dynamic DYNAMIC 0000000000003dc8 002dc8 0001f0 10 WA 7 0 8 [24] .got PROGBITS 0000000000003fb8 002fb8 000048 08 WA 0 0 8 [25] .data PROGBITS 0000000000004000 003000 000010 00 WA 0 0 8 [26] .bss NOBITS 0000000000004010 003010 000008 00 WA 0 0 1 [27] .comment PROGBITS 0000000000000000 003010 00002b 01 MS 0 0 1 [28] .symtab SYMTAB 0000000000000000 003040 000618 18 29 46 8 [29] .strtab STRTAB 0000000000000000 003658 000203 00 0 0 1 [30] .shstrtab STRTAB 0000000000000000 00385b 00011a 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings), I (info), L (link order), O (extra OS processing required), G (group), T (TLS), C (compressed), x (unknown), o (OS specific), E (exclude), l (large), p (processor specific)
ELFは、バイナリのコードとデータをセクションに分割します。セクションの構造自体はその内容によって異なり、各セクションの説明はセクションヘッダーに記載されています。
セクション
セクションヘッダーに書かれていたセクションには、具体的にどのようなものがあるのでしょうか。
- .initセクション
このセクションには、初期化を行う実行可能コードが含まれています。 - .textセクション
プログラムのメインコードを含んでいるセクションです。 - .rodata
定数値の格納を目的とするセクションです。
上記で紹介したのはセクションの一部です。
おわりに
ELFの勉強目的でこのブログを書いてみましたが、まだまだわからないことだらけです。各ヘッダーの詳しいことなどは今後書いていこうと思います。
SecHack365 2022 体験記
SecHack365 2022を修了したので体験記を書きました。
自己紹介
- 金沢工業大学 工学部 情報工学科 2年(2022年度)
- 開発駆動コース 仲山ゼミ 修了
- SecHackで作ったもの
応募しようと思ったきっかけ
大学1年の時から情報セキュリティに興味があったのですが、イベントに応募しようと思ったことはありませんでした。なぜなら、イベントに応募しても受かるわけないと考えていたからです。高校からPCを触っていたわけではなく、大学入学からプログラミングを始めました。
そんなプログラミング経験1年も満たないような私が、SecHackに応募しようと思ったきっかけは、セキュリティ・キャンプフォーラム2022でした。セキュリティ・キャンプフォーラムはオンラインだったので、何となく視聴してみただけでした。すると、同世代くらいの人たちが楽しそうにセキュリティの話で盛り上がっていました。自分もこういった交流や技術的な話ができるようになりたいと思い、セキュリティイベントに参加したいと考えるようになりました。
課題応募時のプロフィール
応募課題を書いていた時の私の状況はこんな感じでした。
プログラミング歴:1年
技術:HTML, CSS, Python, Java(授業のみ), Linux
コース選び
私はネットワークに興味があり、ネットワークとセキュリティを組み合わせたものを作りたいと思っていたので、一番合っていそうな仲山ゼミを選択しました。
応募課題について
応募課題の内容については詳しく書くことはできませんが、技術では他の応募者には勝てないので、とにかくやる気重視で自分の今までやってきたことをすべて書きました。
確か応募課題の期限が2~3週間くらいだったかと思いますが、その間ずっとSecHackの応募課題のことを考えて、ギリギリまで粘りました。
合格通知
通知が来るまではずっとSecHackのことが頭から離れず、夢でSecHackの合格を見るくらいでした。
合格通知が来た時の嬉しさは今でも忘れません。
第1回イベントデイ(6月11日, 12日)
1回目のイベントデイはオンラインでの開催でした。合格通知が来てすぐのイベントデイだったと思います。このイベントデイでSecHackの他のトレーニーと初の顔合わせになります。トレーニーは中学生から大学院生、社会人といった幅広い年齢層でとても驚きました。応募する前は自分が最年少ぐらいだろうと思っていたのですが、全然そんなことはありませんでした。
第1回イベントデイでは自分の作りたいものを何となく想像していたぐらいで、具体的な仕様や機能などは決まっていませんでした。
集合イベントレポート
第2回イベントデイ(7月9日, 10日)
2回目はオフラインでの開催でした。このイベントデイでは、自分の作りたいものをLT形式で発表しました。私は作りたいものとそれを作りたいと思った理由、システム構成図などをスライドで作成しました。
第2回イベントで一番良かったと感じたところは、放課後の時間です。イベントデイは特定の時間までコースワークや講義があるのですが、それらがすべて終わると好きなことをしてもいい時間があります。この時間ではトレーニー同士でSecHackの開発の話や各コースの話、技術的な話などたくさん話しました。SecHack以外にもたくさんのことに取り組んでいるトレーニーの話を聞いて、自分の時間の使い方が下手だということを実感し、習慣化をすることを決意しました。
集合イベントレポート
番外編(習慣化)
SecHackの各イベントデイでは、必ず習慣化セッションというものが行われます。SecHackは1年間という長い期間活動するので、習慣化を行うことが大切です。
私は夏休みの間、オンライン上で朝活を行いました。朝活では、作品作りで使用する言語の勉強をしたり、技術書を読んだりしました。
第3回イベントデイ(8月24日, 25日)
3回目のイベントデイは新型コロナウイルスの陽性者数が多く、予定ではオフライン開催でしたが、オンラインでの開催となりました。
1日目は自分の作品についての発表を行い、トレーニーやトレーナーからたくさんの質問や意見をいただきました。表現方法のアイディアや現時点での問題点など、自分だけでは思い付かないようなフィードバックを得ることができました。また、他のトレーニーの進捗状況なんかも知ることができ、作品作りに対するモチベーションが高まりました。
2日目の午前は講演が中心で、自分が知らなかった分野の最先端のお話を聞くことができました。午後からは「縁日」というトレーナー提供のワークショップがあり、トレーナーの技術レベルの高さを知るとともに楽しく色々なことを学ぶことができました。
個人的な作品作りの進捗ですが、このあたりから本格的に手を動かして作品作りを行っていました。 実際に作ってみないと分からないということもあり、作りたいものを具体化しつつC#・Unityの勉強をしていました。
集合イベントレポート
第4回イベントデイ(10月1日, 2日)
4回目のイベントデイもオンラインでの開催でした。
このイベントデイでは、自分の作品について5分間の動画を作成して発表を行いました。動画で発表を行う経験自体が無かったので、動画用のスライド作りやデザインなどを勉強しました。動画発表を通して、作品の「魅せ方」の難しさを学ぶことができました。
第5回イベントデイ(11月11日, 12日, 13日)
続いて5回目のイベントデイです。このイベントデイは3日間に渡って開催されました。
前回は5分間の作品紹介動画を作成しての発表でしたが、今回はポスターを用いての発表でした。ポスターを作る前は、動画用のスライド作りと大して変わらないではないかと思っていたのですが、作ってみるとポスターのならではの表現方法があり、とても大変でした。現在、SecHackのWebサイトに私のポスターが載っていると思いますが、この頃のポスターはとにかく中身がスカスカでした。このぐらいから最終的に提出するポスターのデザインのことを考え始めました。
そして、今回のイベントデイは久々のオフライン開催ということでたくさんのトレーニーと交流をしました。イベントデイにはトレーニーが自由に活動できる放課後の時間があるのですが、そこでは作品の進捗やポスター、大学などの話をしました。オフラインだからこそ得られた交流の場だったと思います。
トレーナー主催の縁日の時間も初のオフライン開催でした。実機を用いたハンズオン的な講義が多く、めちゃくちゃ楽しかったです。
ちなみにですが、この時期が自分的には一番キツかったです。SecHack関係では自分の技術不足で作品作りに行き詰ったり、作品の方向性で悩んだりしていました。それ以外では、大学で参加している課外活動やその他諸々の締切が重なっていて睡眠時間がなかなか取れていませんでした。肉体的にも精神的にも厳しかったですが、なんとか乗り越えることができました。SecHackに参加する際は、睡眠時間を確保できるような予定の組み方しましょう。
集合イベントレポート
第6回イベントデイ(1月27日, 28日, 29日)
第6回イベントデイはSecHack内部での発表会でした。
この発表会では、SecHackの成果を15分の動画にまとめて発表します。この成果発表会で優秀修了生が決定します。15分の動画と聞くと長く感じるかもしれませんが、SecHackの1年間の活動を振り返ると案外15分くらいいきます。
SecHackで唯一後悔があるのがこの動画です。作品作りの方が自分の想定したよりも掛かってしまい、動画作りに全力を出すことができませんでした。成果発表会までの進捗予定は、12月の初めくらいに立てておきましょう。
成果発表会(3月4日)
SecHackの最後がこの成果発表会になります。
SecHackの1年間の成果として、外部の人に対して発表を行います。基本はポスターでの発表で、優秀修了生はポスター+動画での発表でした。今までの発表はSecHack内で、作品の内容や背景などが分かっている人に対してでした。しかし、この成果発表会では自分の作品ついて何も知らない人に対して説明をしました。この場でもたくさんの人から作品のフィードバックをいただきました。
集合イベントレポート
SecHack365を通して
SecHack365では、たくさんのことを学ぶことができました。技術面での成長はもちろん、習慣化やゼミ活動で人間的にも成長できたと感じています。特にセキュリティに興味のある同年代との交流が、一番成長に繋がったと思います。
私はSecHack365というコミュニティからたくさんのものを貰いました。それを今後何かしらの形で返していけたらと思っています。
応募するか迷ったら
応募するだけタダなので、迷ったら応募しましょう。私もダメもとで応募して受かることができました。とりあえず行動することが大切だと思います。