shinobi CTF

HTBとCTF頑張る

SECCON CTF 2016 Binary 100

Challenge

Anti-Debugging
Reverse it.
bin (SHA1: 690c72681b1cd2bb9fe01efe0bfb71b44f7838d3)
may some AV will alert,but no problem.

私の環境ではAVに引っかからなかったです。気を利かせてくれたのか、役立たずなのか、、、

Solution

与えられたのは32bitのPEファイルです。まずは、実行してみます。
パスワードなんて知らないですけど、パスワードを入手しなくてはならないようです。

\> .\bin  
Input password >abcde  
password is wrong.

IDA demoを使います。
“Input password >"をprintfした後、strcmpをしているところがあるので、ここら辺が怪しいなぁと思い、ここにbreakpointを指定して実行します。ここのstrcmpではEAXとECXの値を比べているので、それぞれのアドレスの先を見ます。passwordには先ほどと同じ"abcde"を渡しました。
f:id:grapeBiscuit:20170708132837p:plain

EAXとECXの値は次の通りです。
f:id:grapeBiscuit:20170708133020p:plain

それぞれのstackには次のように値が入っていました。
f:id:grapeBiscuit:20170708133256p:plain

ECXのアドレス(0019FED8)には、"0x61 0x62, 0x63, 0x64, 0x65"が並んでおり、これは先ほどpasswordとして渡した “abcde"をasciiコードにしたものです。EAXのアドレス(0019FEC4)には、"0x49, 0x29, …, 0x6E,0x2E"が並んでおり、同様にasciiコード表と見比べると"I have a pen."がpasswordだと分かリます。
passwordで"I have a pen."と入力し、再度プログラムを実行します。IsDebbugerPresent関数を使って弾かれてしまいます。
f:id:grapeBiscuit:20170708172553p:plain

その先のコードを見ると、その他wiresharkvmwareでも弾かれるようです。諸々のプロセスを見た後、怪しい部分を見つけたのでここまでジャンプします。ジャンプしたい先で、(右クリック) -> (Set IP), (Jump to IP)でジャンプできました。
f:id:grapeBiscuit:20170708172852p:plain

ジャンプ後、そのまま実行すると、ポップアップでflagが出てきます。

Answer

SECCON{check_Ascii85}

Sweets

  • 今回はジャンプしても目的は達成されたのだが、ジャンプして飛ばした部分に重要な処理があった場合は、どうなるのだろうか。
  • Anti debugに関してまだリバースエンジニアリングバイブルで勉強中なので、早く読み進めなくては。