1

CreateProcess() (C++ の場合) を使用してプロセス内から子プロセスを作成し、引き続き ReadProcessMemory を使用してメモリを読み取り、特定のものを検索します。

プロセスは独自の仮想空間にロードされるため、そのプロセスのエントリ ポイントから検索を開始したいと思います。この時点では、コード自体のエントリ ポイントを見つける方法がわかりません (他のセクションは気にしません)。 PE ファイルの 'AddressOfEntryPoint' フィールドを認識しており、既にそれを持っていますが、そのプロセスがロードされるアドレスがわからないため、エントリ ポイント自体を計算するにはどうすればよいですか?

私が望むものを示すために、たとえば OllyDbg でプロセスを開くと、コードのエントリポイントにすぐに到達します。そのアドレスが必要です

これは私が作成した子プロセスであることを覚えておいてください。

そのアドレスを見つけるために、そのアプリケーションにコードやDLLを挿入したくないことを述べさせてください

4

3 に答える 3

1

HMODULEがNULLのPSAPIのGetModuleInformationを使用します。これにより、実行可能ファイルのエントリポイントとメモリ内の合計サイズがわかります(残念ながら、ベースアドレスは設定されていません)。

エントリポイントは必ずしもmain()関数である必要はないことに注意してください。おそらく、CRTのエントリポイントがmain()を呼び出します。

EnumProcessModulesを使用して、プロセス内のすべてのモジュールとそのベースアドレスを取得することもできます。

于 2009-09-01T18:34:50.273 に答える
0

AddressOfEntryPointは、画像のベースアドレス(同じIMAGE_OPTIONAL_HEADER構造体のImageBaseメンバー)を基準にしています。すべての実行可能ファイルには独自の仮想アドレス空間があるため、実行可能ファイルの場合、イメージベースはほとんどの場合PEヘッダーに設定されているものです。

実際、再配置セクションが削除されたexeは、PEにあるベースでのみロードできます。

例外があるかどうか、実行中のプロセスのイメージベースを取得できるかどうかはわかりません...

于 2009-09-01T18:34:03.800 に答える
0

正確にはわかりませんが...私の知る限り、.exe/.dll の PE ヘッダーに EntryPoint アドレスを見つけることができますか?

または....それは固定のものです

それが私が覚えているすべてです

于 2009-09-01T18:21:47.883 に答える