PE形式は、最も一般的に使用されるWindowsの実行ファイルフォーマット、唯一のオペレーティングシステムをロードするためのプロセスを理解することはできませんPEファイル形式を理解するだけでなく、プロセスの理解とオペレーティングシステムのメモリ管理関連の知識であり、いくつかの技術は、理解に基づいていなければなりませんこのようなファイルの暗号化と復号化のようなPEファイルフォーマット、ウイルス分析、プラグ技術に基づいて、この実験の目的は、手動絞り面積を増加させ、プログラムを実行し、自己起動シェルコードを達成するために実行可能なシェルコードコードを挿入するために修正することです。
シェルコードは、単にテキストセクションを挿入します
まずは、あなたのコードインジェクションの技術の(ツールなし)簡単な手作りをお見せしましょう、私たちは、それぞれの負荷後のプログラムポップアップのように最初の実装、指定されたプログラムの中に注入ポップのシンプルな作品も、その後、通常の手順を実行しますコード。
まず、我々は画像のみのベースアドレスに次の青のコメントに焦点を当てる必要がありますバイナリファイル、オープンはイメージがロードされた後、黄色の注釈RVAを相殺することが示唆WinHEXを使用して開かれました。
私たちと組み合わせることができるショットマップ上PEファイル構造0000158B
続いてメモリに画像後オフセットRVA、00400000
それは絶対的ではなく、推奨される理由ベースアドレスは、ロードされたイメージをお勧めしますか?しかし、説明するために遅いの後ろに待機します。
我々は、実際のプログラム・エントリ・アドレスは、以下の式、上記の公知の条件によってメモリにロードされて計算することができる:
VA(実負荷アドレス)= IMAGEBASE(ベースアドレス)+ RVA(オフセット)=> 00400000 + 0000158B = 0040158B
OEPプログラムが後、我々は、このものを決定する必要が見つかった0040158B
祭り領域の一部を例として断面積を.TEXTために、我々は、オレンジ色の最初の位置は、次の図は断面を示す観察し00000B44 (节区尺寸)
、紫色の位置で第二00001000 (节区RVA)
、第三位00000C00 (文件对齐尺寸)
4位00000400 (文件中的偏移)
、5位60000020 (节区属性)
。
テキストセクション上で得られたデータは、我々は次のように計算され、ここでは一例として.textセクションでは、端部領域に入るOEPプロセスを決定することができます。
仮想アドレスの開始位置:ベースアドレス+神経節神経節のRVA => 00400000 + 00001000 = 00401000
仮想アドレス終了位置:テキスト領域セクションアドレスのセクションのサイズ+ => 00401000 + 00000B44 = 00401B44
間隔(401000 - 401B44)セクション.textの計算の後にあなたのアドレスVA 0040158B
このセクションゾーンに証明長い間隔は、VAのアドレスはここにある401000 - 401B44
範囲内に、それは.textセクションに属し。
今、あなたが私たちのOEPは.textセクションに落ちたことを知って、あなたは興奮して、オープンx64DBGが予期せずテストしたい、ニマ!このアドレスはどのような地獄、ああ、ないですか?
状況上記のこの数字発生はランダムベースアドレスの問題について、あなたはランダムなベースアドレスを有効にしたい場合は、上記のVS2013でのオプションが存在することであるベースアドレスとして、デフォルトで有効になって、その後投機の役割は、バッファオーバーフローを防ぐためかもしれ7頭のまたは8悪い腐ったクラス。
> IMAGE_OPTIONAL_HEADER - -利便性私たちは、デバッグのために、私たちは手動でPEファイル構造IMAGE_NT_HEADERSに対応し、それを取り除く必要がある> DllCharacteristicsはPEに対してオフセットヘッド90バイトであり、あなただけがマーカーを変更する必要があり、修正x64:6081 改 2081
相対x86:4081 改 0081
X86プログラムするためには、例えば、以下に示すように変更。
新断面積とリバウンドシェルコードを挿入
継続するには。。。。
再現し、ソースを追加してください。。。
11111