アイジア

CTF, 情報セキュリティの学んだことメモ

crkme09

http://doomo.xyz/crack/crkme09.exe

前↓

aithea.hatenablog.com

前回と同じく名前とパスワードを入力する問題だったので同じ要領で解析しようと思ったけどなにかおかしい。

f:id:favoritte15:20180725110821p:plain

DB文がたくさん羅列していて、ラベル名にも関数が少ない。

 

前にやった問題で似たようなコードがあった。圧縮されているらしいのは確かだが、[右クリック] - [分析(Analysis)] - [コードを分析(Analyse code)]しても変わらない。

 

 

f:id:favoritte15:20180725111944p:plain

↑UPXでアンパックできるみたい。

 

アンパックした後もう一度Ollyで開くと今度はちゃんとしたアセンブリが表示されている。

f:id:favoritte15:20180725112438p:plain

00401255 > 83F8 16 CMP EAX,16

今回のパスは0x16(=22)文字。長い。

 

f:id:favoritte15:20180725112934p:plain

その後2つのサブルーチンに飛んで、

TEST EAX, EAXによる比較が行われる。この時点でEAXが0なら正解処理に飛ぶため2つのサブルーチンを実行し終わった後のEAXは1でなければならない。

 

先に下の関数(00401329)から解析していく。

 

f:id:favoritte15:20180725114817p:plain

パスワードの先頭4文字のアスキーコード - 0x283A4132 = 0x11111111でないと関数が終了してしまう。

0x283A4132 + 0x11111111 = 0x394B5243 = 9KRC

トルエンディアンなので逆にしてCRK9。

 

f:id:favoritte15:20180725115605p:plain

その次の処理。ECXに5文字目のパスワードを入れて0x2D(-)だったらOK。

 

f:id:favoritte15:20180725120524p:plain

それ以降の文字列は「MI5GQ51I-7V9WW2NT」と後ろから比較しているのでこれの逆を当てはめる。

f:id:favoritte15:20180725120832p:plain

 

 「MI5GQ51I-7V9WW2NT」の部分はNameによって変わると思う。