質問:
Win7とWin8PEローダーの違いは?
Lars Brinkhoff
2015-12-18 18:36:53 UTC
view on stackexchange narkive permalink

Windows7とWindows8のPEローダーの違いはわかっていますか?

単純な実行可能PEイメージファイルを手作りしようとしています。 Windows 7で正常に動作しますが、Windows8では拒否されます。

ファイルは次の場所にリンクされています: http://lars.nocrew.org/tmp/W7-ok.exe

  Microsoft(R)COFF / PE Dumperバージョン8.00.50727.762ファイルのダンプW7-ok.exePE署名が見つかりましたファイルタイプ:実行可能イメージファイルヘッダー値14Cマシン(x86)0セクション数0時間日付スタンプThuJan 01 00:00:00 19700シンボルテーブルへのファイルポインタ0シンボルの数E0オプションのヘッダーのサイズ10F特性再配置が削除されました実行可能行番号が削除されましたシンボルが削除されました32ビットワードmachineオプションのヘッダー値10Bマジック#(PE32)0.00リンカーバージョン0コードのサイズ0初期化されたデータのサイズ0初期化されていないデータのサイズ24Cエントリポイント(0040024C)0コードのベース0データベース400000イメージベース(00400000〜0040025B)4セクションアラインメント4ファイルアラインメント0.00オペレーティングシステムバージョン0.00イメージバージョン4.00サブシステムバージョン0Win32バージョン25Cサイズのイメージ230ヘッダーのサイズ0チェックサム3サブシステム(Windows CUI)0DLLの特性0スタックリザーブのサイズ0スタックコミットのサイズ0ヒープリザーブのサイズ0ヒープコミットのサイズ0ローダーフラグ2ディレクトリの数0 [0]エクスポートディレクトリのRVA [サイズ] 1B8 [0]インポートディレクトリのRVA [サイズ]の概要 
1 回答:
peter ferrie
2015-12-25 00:02:49 UTC
view on stackexchange narkive permalink

違いは、Windows 8では、すべての通常の構造(エクスポート、インポート、TLS、例外ハンドラー、再配置...つまり、データディレクトリエントリによって記述されるすべて)を完全にセクション内に配置する必要があることです。唯一の例外は、バインドされたインポートテーブルのデータが使用後に破棄されるため、コンテンツの「汚染」を回避するために、任意のセクションの外部に保存されるバインドされたインポートテーブルです。とにかく、ASLRが存在する場合、アドレスが一致することはほとんどないため、バインドされたインポートテーブルも無意味です。

セクションがない場合は、DLLベースを見つけて、インポートを自分で解決する必要があります。

インポートテーブルを保持する単一のセクションを作成すると、両方の環境で読み込まれます。

すべてのコード、データ、およびインポートテーブルを保持する単一の.textセクションを追加しました。私はまだWindows8でそれをテストしていません。
これでWindows8の問題が修正されることを確認しました。
また、データディレクトリの数を2から増やす必要がありました。IAT以外のすべてのポインタは0ですが、16は機能します。
はい、私はカウントを見落としました。ローダーによってもチェックされるIATディレクトリーをカバーするには、少なくとも13でなければなりません。


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...