home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

技術/Windows/PE(Portable Executable)フォーマットの実験 (v1)

技術/Windows/PE(Portable Executable)フォーマットの実験 (v1)

技術 / Windows / PE(Portable Executable)フォーマットの実験 (v1)
id: 708 所有者: msakamoto-sf    作成日: 2010-07-14 21:42:15
カテゴリ: Assembler Windows hacks 

Windowsで使われている実行ファイルのフォーマット、PE(Portable Executable)関連のトピック集。




これからPEフォーマットを学びたい人向けの進め方ガイド

PEフォーマットを使って色々げへへな世界を味わいたい人向けに、どういう順番で学習を進めていけば良いのか簡単にまとめてみました。

STEP 0 : (option) OllyDbgを使ってみよう!

(興味のある人だけ)
別にOllyDbgに限定する必要はなく、マシン語レベルでデバッグできるソフトがあれば、それの使い方を簡単でもよいので学んでおこう!アセンブラも勉強しておくと尚良し!
プロセスのメモリ空間に展開されたPEフォーマットをじっくりと観察出来るので、理解も進むよ!
マシン語レベルのデバッガを使えるようになると、今まで見えなかったOSやCPUの挙動が見えてくるので楽しさも倍増!

STEP 1 : PEフォーマットを覗いてみよう!

まずはPEフォーマットの概要を掴み、WinNT.hを頼りにPythonやC/C++でPEフォーマットをダンプするプログラムを作ってみよう!視界がグンと広がるよ!

※「アレ用の何か」ではAPI HookingやDLL Injectionまで扱ってますが、STEP 1の段階でそこまで突っ込まなくても大丈夫だよ!慌てずに・・・。

STEP 2 : COFF ObjectファイルやCOFF LIBファイルを覗いてみよう!

PEフォーマットを覗けるようになったら、その一歩手前のオブジェクト(COFF Object)ファイルも簡単に覗けるようになるよ!併せてCOFF LIBファイルのフォーマットも理解しちゃおう!コンパイラやリンカの仕組みも絡んでくるディープな世界へようこそ!

※「アレ用の何か」ではCRT(C RunTime library)の関数のhookingを題材にしていますが、そこまで突っ込まなくてもOK!まずはPythonやC/C++で簡単なユーティリティを作って、自力で覗けるようになることを目指そう!

STEP 3 : 仕上げ:"Tiny PE"でアセンブラを駆使して小さな実行ファイルを作れるようになろう!

そろそろPEファイルのHEXダンプも見慣れてきた頃かな?
では「仕上げ」として、アセンブラを使ってPEファイルの各種ヘッダーを自分で用意し、100バイト前後の小さな(Tiny)実行ファイルを作ってみよう!
トリッキーなテクニックも使うので、理解するのは大変だろうけど、これまでの知識の総動員となるので復習も兼ねた腕試しだ!

※アセンブラの知識が必須だよ!

STEP 4 : IATの書き換え、Hook、DLL Injectionの世界へ・・・

ちょっと怪しげな香りが漂ってきたね。
「アレ用の何か」やcodeprojectのサイトで、IATの書き換えやHook、DLL Injection、PEファイル(DLL)の疑似ロードなどを学ぼう!

STEP 5 : PEフォーマットの助けを使わずにAPIを使う。

どういうことかというと、IATを使わず、純粋に実行コードが自力でプロセスにロードされているDLLのエキスポート情報からAPIのアドレスを取得し、呼び出してみようということ。
これを応用すると、任意の実行コードをPEフォーマットに挿入することが出来るようになる。悪用厳禁!

STEP 6 : リバースエンジニアリング(バイナリ解析)対抗技術を学ぶ。

ここまで来たら行けるところまで行ってみる?
バイナリ解析で必ず出くわす、アンチリバースエンジニアリングの世界を覗いてみよう!

お仕事で「二重起動を防止したい」「シリアルナンバーの入力を回避されたくない」等の依頼が来ても、もう困らない・・・ようになる?かも!



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-07-14 22:29:05
md5:ccf93e7490740109100e45eb35b58aa0
sha1:c7be010423ebe7db05520716b0fadd388a2eea7c
コメント
コメントを投稿するにはログインして下さい。