• Solves: 154
  • To get you started :)

    files: Link

    difficulty: easy

解凍したファイルのファイルタイプをfileコマンドで確認します。Linux用の64bit実行ファイルです。
$ file morph
morph: 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),%rax
 ae9: 48 83 c0 08          add    $0x8,%rax
 aed: 48 8b 00              mov    (%rax),%rax
 af0: 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')を比較しています。
no title


さらにステップ実行を進めていくと、下図の場所で5文字目と95(文字の’_’)を比較しています。
2

このようにステップ実行を進めていくと、コマンドライン引数の各文字を”34C3_M1GHTY_M0RPh1nG_g0”と比較していることが分かります。
コマンドライン引数に”34C3_M1GHTY_M0RPh1nG_g0”を指定して実行してみると下記のとおり表示されフラグであることが確認できます。
$ ./morph 34C3_M1GHTY_M0RPh1nG_g0
What are you waiting for, go submit that flag!
フラグは、
34C3_M1GHTY_M0RPh1nG_g0
です。

モーフィング入門―DOS/Vで体験するCGマジック
スコット アンダーソン
海文堂出版
1994-12