- Solves: 154
To get you started :)
files: Link
difficulty: easy
解凍したファイルのファイルタイプをfileコマンドで確認します。Linux用の64bit実行ファイルです。
$ file morphmorph: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1c81eb4bc8b981ed39ef79801d6fef03d4d81056, stripped
実行してみますが何も表示されません。
$ ./morph
objdumpコマンドで逆アセンブルします。
$ objdump -s -D morph >aaa.txt
下記の部分でコマンドライン引数の入力文字列の長さをチェックしています。23文字以外だと終了します。
ae5: 48 8b 45 d0 mov -0x30(%rbp),%raxae9: 48 83 c0 08 add $0x8,%raxaed: 48 8b 00 mov (%rax),%raxaf0: 48 89 c7 mov %rax,%rdi #%rax=コマンドライン引数af3: e8 60 fc ff ff callq 0x758 #<strlen>af8: 48 83 f8 17 cmp $0x17,%rax #23と比較afc: 74 0a je 0xb08
それでは、34C3_で始まる23文字の文字列をコマンドライン引数に指定してedbでデバッグ実行します。ステップ実行していくと下記の場所でコマンドライン引数に指定した文字列の1文字目と51(文字の'3')を比較しています。
さらにステップ実行を進めていくと、下図の場所で5文字目と95(文字の’_’)を比較しています。
このようにステップ実行を進めていくと、コマンドライン引数の各文字を”34C3_M1GHTY_M0RPh1nG_g0”と比較していることが分かります。
コマンドライン引数に”34C3_M1GHTY_M0RPh1nG_g0”を指定して実行してみると下記のとおり表示されフラグであることが確認できます。
$ ./morph 34C3_M1GHTY_M0RPh1nG_g0What are you waiting for, go submit that flag!
フラグは、
34C3_M1GHTY_M0RPh1nG_g0