最近、DLLインジェクションに関する記事を読んでいて、かなりよく理解しています。
しかし、私が理解していないのは、CreateRemoteThread、WriteProcessMemory(別のプロセスのメモリに書き込むことができる)、VirtualAllocEx(別のプロセスのコンテキストでメモリを割り当てることができる)などのAPIが最初に実装された理由です場所。
そのようなAPIの本来の必要性は何でしたか?ちょっと興味があるんだけど。
最近、DLLインジェクションに関する記事を読んでいて、かなりよく理解しています。
しかし、私が理解していないのは、CreateRemoteThread、WriteProcessMemory(別のプロセスのメモリに書き込むことができる)、VirtualAllocEx(別のプロセスのコンテキストでメモリを割り当てることができる)などのAPIが最初に実装された理由です場所。
そのようなAPIの本来の必要性は何でしたか?ちょっと興味があるんだけど。
WriteProcessMemory
プロセスメモリを安全に書き込む必要があるring3デバッガー用に作成されました。最も一般的なのは、INT 3
ブレークポイントまたはユーザー提供のメモリ編集用です。
同じCreateRemoteThread
ように、デバッグ目的にも使用できますが、MSDNはCreateRemoteThread
もう少し詳しく教えてくれます。
この関数の一般的な使用法は、デバッグ中のプロセスにスレッドを挿入してブレークを発行することです。ただし、この使用はお勧めしません。これは、余分なスレッドがアプリケーションのデバッグ担当者を混乱させ、この手法を使用することにはいくつかの副作用があるためです。
- シングルスレッドアプリケーションをマルチスレッドアプリケーションに変換します。
- プロセスのタイミングとメモリレイアウトを変更します。
- その結果、プロセス内の各DLLのエントリポイントが呼び出されます。
IIRCCreateRemoteThread
は、デバッガーによって使用され、アプリケーションのネイティブ期待値ハンドラーをフックします。これは通常、によって設定されますSetExceptionHandler
。ハンドラーはPEBに格納されるため、ターゲットプロセスからの呼び出しが必要です。
VirtualAllocEx
これは、Windows仮想メモリシステムの動作方法であり、現在のプロセス、子プロセス、またはリモートプロセスのいずれであっても、割り当てるためのコンテキストが必要です。VirtualAlloc
実際には、Exバリアントのパススルーラッパーにすぎず、呼び出し元プロセスのハンドルが使用されることを示す特別な定数を渡すだけです。