#navi_header|技術| Windowsで使われている実行ファイルのフォーマット、PE(Portable Executable)関連のトピック集。 #more|| ---- #ls|| ---- #outline ---- * これからPEフォーマットを学びたい人向けの進め方ガイド PEフォーマットを使って色々げへへな世界を味わいたい人向けに、どういう順番で学習を進めていけば良いのか簡単にまとめてみました。 ** STEP 0 : (option) OllyDbgを使ってみよう! (興味のある人だけ) 別にOllyDbgに限定する必要はなく、マシン語レベルでデバッグできるソフトがあれば、それの使い方を簡単でもよいので学んでおこう!アセンブラも勉強しておくと尚良し! プロセスのメモリ空間に展開されたPEフォーマットをじっくりと観察出来るので、理解も進むよ! マシン語レベルのデバッガを使えるようになると、今まで見えなかったOSやCPUの挙動が見えてくるので楽しさも倍増! ** STEP 1 : PEフォーマットを覗いてみよう! まずはPEフォーマットの概要を掴み、WinNT.hを頼りにPythonやC/C++でPEフォーマットをダンプするプログラムを作ってみよう!視界がグンと広がるよ! - アレ用の何か -- http://hp.vector.co.jp/authors/VA050396/index.html --- PEファイルフォーマット その1 ~ その5 - Matt Pietrek氏によるPEフォーマット解説, "Inside Windows: An In-Depth Look into the Win32 Portable Executable File Format" -- Part1 : http://msdn.microsoft.com/en-us/magazine/cc301805.aspx -- Part2 : http://msdn.microsoft.com/en-us/magazine/cc301808.aspx ※「アレ用の何か」ではAPI HookingやDLL Injectionまで扱ってますが、STEP 1の段階でそこまで突っ込まなくても大丈夫だよ!慌てずに・・・。 ** STEP 2 : COFF ObjectファイルやCOFF LIBファイルを覗いてみよう! PEフォーマットを覗けるようになったら、その一歩手前のオブジェクト(COFF Object)ファイルも簡単に覗けるようになるよ!併せてCOFF LIBファイルのフォーマットも理解しちゃおう!コンパイラやリンカの仕組みも絡んでくるディープな世界へようこそ! - アレ用の何か -- http://hp.vector.co.jp/authors/VA050396/index.html --- PEファイルフォーマット その1 ~ その5 - Matt Pietrek氏によるMicrosoft System Journal(MSJ), "Under the Hood"シリーズ -- July 1997, OBJファイルフォーマットとリンカの仕組み --- http://www.microsoft.com/msj/0797/hood0797.aspx -- April 1998, LIBファイルフォーマット --- http://www.microsoft.com/msj/0498/hood0498.aspx ※「アレ用の何か」ではCRT(C RunTime library)の関数のhookingを題材にしていますが、そこまで突っ込まなくてもOK!まずはPythonやC/C++で簡単なユーティリティを作って、自力で覗けるようになることを目指そう! ** STEP 3 : 仕上げ:"Tiny PE"でアセンブラを駆使して小さな実行ファイルを作れるようになろう! そろそろPEファイルのHEXダンプも見慣れてきた頃かな? では「仕上げ」として、アセンブラを使ってPEファイルの各種ヘッダーを自分で用意し、100バイト前後の小さな(Tiny)実行ファイルを作ってみよう! トリッキーなテクニックも使うので、理解するのは大変だろうけど、これまでの知識の総動員となるので復習も兼ねた腕試しだ! - Tiny PE -- http://www.phreedom.org/solar/code/tinype/ ※アセンブラの知識が必須だよ! ** STEP 4 : IATの書き換え、Hook、DLL Injectionの世界へ・・・ ちょっと怪しげな香りが漂ってきたね。 「アレ用の何か」やcodeprojectのサイトで、IATの書き換えやHook、DLL Injection、PEファイル(DLL)の疑似ロードなどを学ぼう! - アレ用の何か -- http://hp.vector.co.jp/authors/VA050396/index.html --- PEファイルフォーマット その3, その5 - APIHijack - A Library for easy DLL function hooking. - CodeProject -- http://www.codeproject.com/kb/dll/apihijack.aspx ** STEP 5 : PEフォーマットの助けを使わずにAPIを使う。 どういうことかというと、IATを使わず、純粋に実行コードが自力でプロセスにロードされているDLLのエキスポート情報からAPIのアドレスを取得し、呼び出してみようということ。 これを応用すると、任意の実行コードをPEフォーマットに挿入することが出来るようになる。悪用厳禁! - Wizard Bible vol.17 (2005,4,29), 第1章 -- http://wizardbible.org/17/17.txt - Wizard Bible vol.19 (2005,7,31), 第10章 -- http://wizardbible.org/19/19.txt - Inject your code to a Portable Executable file - CodeProject -- http://www.codeproject.com/KB/system/inject2exe.aspx ** STEP 6 : リバースエンジニアリング(バイナリ解析)対抗技術を学ぶ。 ここまで来たら行けるところまで行ってみる? バイナリ解析で必ず出くわす、アンチリバースエンジニアリングの世界を覗いてみよう! - Wizard Bible vol.32 (2007,4,6), 第2章, 第3章, 第4章 -- http://wizardbible.org/32/32.txt - Wizard Bible vol.33 (2007,5,8), 第3章 -- http://wizardbible.org/33/33.txt - An Anti-Reverse Engineering Guide - CodeProject -- http://www.codeproject.com/KB/security/AntiReverseEngineering.aspx お仕事で「二重起動を防止したい」「シリアルナンバーの入力を回避されたくない」等の依頼が来ても、もう困らない・・・ようになる?かも! #navi_footer|技術|