-3

一部のプロセスのアドレス空間での dll インジェクションをブロックするセキュリティ アプリを開発しています。サスペンド状態 (まだ初期化されていない) のプロセスがあるとしましょう。プロセスがロードしようとしている DLL の「リスト」にアクセスすることは可能ですか? EnumProcessModules 関数を試してみましたが、うまくいかないようです (プロセスがまだ中断状態にあり、DLL をまだロードしていないため、かなり明白だと思います)。さらに、DLL の読み込みで何かを変更したいと思います。たとえば、プロセスが X.dll、Y.dll、Z.dll を読み込むとします。Y.dll の読み込みを回避することは可能ですか?

よろしくお願いします=)

4

3 に答える 3

0

あなたのコメントによると、改ざん防止プログラムを作成しようとしている場合...完全に改ざん防止にすることはできません。コード インジェクションをセットアップするのに十分なアクセス権を持つコンピューターにログインするためのアクセス権を持っている人間がいる場合、遅かれ早かれ彼らは好きなことを何でもできるようになります。挿入されたコードは、確かにローダーを混乱させ、dll を置き換えたり、dll をブロックしたりする可能性があります。何でもできます。

于 2012-06-24T19:12:56.253 に答える
0

プログラムの制御下で Dll をロードする場合は、動的リンカーを使用して Dll を自動的にロードしないでください。あなたはコンパイラの設計と戦っています。

Dll とリンクするのではなく、ヘッダーだけをインクルードし、「LoadLibrary」で手動で Dll をロードしてから、「GetProcAddress」で各関数を取得します。

于 2012-06-24T17:36:20.480 に答える
0

ロードされるライブラリのリストを取得するには (遅延ロードを含む)、Windows ローダーと同じように、プロセスに使用されるバイナリの pe をたどる必要があります。

特定のリンクされたライブラリのロードを回避することは、ライブラリからロードされたシンボルへの参照を何らかの方法で修正する必要があるため、はるかに複雑になります。これには、IAT を変更してリンクを消去し、pe から dll リンクを削除する必要があります。次に、削除された IAT エントリを参照するものをすべて調整します。

これは、LordPE などのオフライン ツールを使用すると少し簡単になりますが、最終的にその成功と複雑さは、dll の読み込みを停止する必要がある理由に依存します...

別の方法として、Windows デバッガー API を使用して dll の読み込みを一時停止し、読み込まれない場合は強制的にアンロードします (ただし、これも問題が多く、システムのロックや bsod が発生する可能性があります)。

于 2012-06-24T17:50:18.077 に答える