前回と同じくghidraでMalwareTechのCTFを解いていく。
今回は、[Shellcode]に挑戦していく。
前回の[Hide and Seek]を解いてみた記事はこちら
↓
Shellcode1
このプログラムのmain関数の役割はentry関数が果たしているので、entry関数に絞ります。
すると、右の逆コンパイルにentry関数がやっていることが表示されます。
今回は、ここに注目して進めていきます。
これを見ると、HeapAllocによってヒープ割り当てが18行目に行われていて、
それがlocal_8に代入されています。そして、そのまま下に降りてくると19行目に*local_8が0x404040とされていて、
20行目にstrlenが&AT_00404040の文字数をsVArlに格納しています。
そして最後にlpText内に格納して、それをメッセージボックス内で表示するようになっています。
明らかに0x404040が怪しいです。
そのため、0x404040を見てみると
暗号化されていますが、何やら文字列が出てきました。
おそらくこれがflagなのでしょう。
次はどのように暗号化されているかを見てみます。
文字列だと思われる部分を選択して、dを押してアセンブリを表示します。
0040406dでROL命令をしています。
このコードは、文字列の各バイトを5回左シフトローテーションするだけです。
FLAG{SHELLCODE-ISNT-JUST-FOR-EXPLOITS}