アイジア

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

crkme08

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

※前

aithea.hatenablog.com

 

実行

f:id:favoritte15:20180723102700p:plain

名前とパスワードを聞かれる。もちろんどちらもわからないので今回は2つの情報をリバースエンジニアリングで見つける必要がある。

 

解析

f:id:favoritte15:20180723103302p:plain

「GetDlgItemTextA」にBPを仕掛けて、適当に名前とパスワードを入力して実行する。

上図のアセンブリから分かることは

・正解パスワードは8文字であること

・入力したNameを引数として関数004012A8を呼び出していること

 その返り値をEDXに格納していること

・パスワードを引数として関数004012D0を呼び出していること

・EAXとEDXが等しいなら正解処理(0040128F)へ進むこと

 

004012A8の解析

f:id:favoritte15:20180723104129p:plain

①EAXに入力した1文字のASCIIコードを足す

②EAXを2乗する

③①~②を入力文字分やる

だいたいこんな感じ。

EAXの値は入力するNameの値によってさまざま。

004012D0の解析

f:id:favoritte15:20180723130401p:plain

 

見た感じ、

・パスワードが16進数で使う文字(0~9とA~F)

 その数値がそのままEBXに代入される

・それ以外の文字が入ってたらEBXを0xFFFFFFFFにする。

最終的にEBXはEAXに代入されて戻り値になる。

 

このEAXが関数004012A8で生成された値と同じになればよい。NameがAの時に生成される値は

f:id:favoritte15:20180723131735p:plain

0x183FB4ACなので、これが正解のパスワード。