Windowsで使われている実行ファイルのフォーマット、PE(Portable Executable)関連のトピック集。
PEフォーマットを使って色々げへへな世界を味わいたい人向けに、どういう順番で学習を進めていけば良いのか簡単にまとめてみました。
(興味のある人だけ)
別にOllyDbgに限定する必要はなく、マシン語レベルでデバッグできるソフトがあれば、それの使い方を簡単でもよいので学んでおこう!アセンブラも勉強しておくと尚良し!
プロセスのメモリ空間に展開されたPEフォーマットをじっくりと観察出来るので、理解も進むよ!
マシン語レベルのデバッガを使えるようになると、今まで見えなかったOSやCPUの挙動が見えてくるので楽しさも倍増!
まずはPEフォーマットの概要を掴み、WinNT.hを頼りにPythonやC/C++でPEフォーマットをダンプするプログラムを作ってみよう!視界がグンと広がるよ!
※「アレ用の何か」ではAPI HookingやDLL Injectionまで扱ってますが、STEP 1の段階でそこまで突っ込まなくても大丈夫だよ!慌てずに・・・。
PEフォーマットを覗けるようになったら、その一歩手前のオブジェクト(COFF Object)ファイルも簡単に覗けるようになるよ!併せてCOFF LIBファイルのフォーマットも理解しちゃおう!コンパイラやリンカの仕組みも絡んでくるディープな世界へようこそ!
※「アレ用の何か」ではCRT(C RunTime library)の関数のhookingを題材にしていますが、そこまで突っ込まなくてもOK!まずはPythonやC/C++で簡単なユーティリティを作って、自力で覗けるようになることを目指そう!
そろそろPEファイルのHEXダンプも見慣れてきた頃かな?
では「仕上げ」として、アセンブラを使ってPEファイルの各種ヘッダーを自分で用意し、100バイト前後の小さな(Tiny)実行ファイルを作ってみよう!
トリッキーなテクニックも使うので、理解するのは大変だろうけど、これまでの知識の総動員となるので復習も兼ねた腕試しだ!
※アセンブラの知識が必須だよ!
ちょっと怪しげな香りが漂ってきたね。
「アレ用の何か」やcodeprojectのサイトで、IATの書き換えやHook、DLL Injection、PEファイル(DLL)の疑似ロードなどを学ぼう!
どういうことかというと、IATを使わず、純粋に実行コードが自力でプロセスにロードされているDLLのエキスポート情報からAPIのアドレスを取得し、呼び出してみようということ。
これを応用すると、任意の実行コードをPEフォーマットに挿入することが出来るようになる。悪用厳禁!
ここまで来たら行けるところまで行ってみる?
バイナリ解析で必ず出くわす、アンチリバースエンジニアリングの世界を覗いてみよう!
お仕事で「二重起動を防止したい」「シリアルナンバーの入力を回避されたくない」等の依頼が来ても、もう困らない・・・ようになる?かも!