0

DetourXS という関数 detour パッケージを使用するコードを見ています。私のアプリケーションは、Microsoft Server オペレーティング システムを対象としています。Microsoft Research にも Detours パッケージがあり、その仕組みに関する記事があります。メモリにロードされたマシン コードにパッチを適用し、新しく挿入されたコードに無条件でジャンプするコードを挿入します。

実行時にマシン コードを変更することでこのコードが機能する場合、オペレーティング システムによるセキュリティ制限に直面しているはずです。これは、kernel32 などの重要な DLL を変更してやりたいことを何でもできるため、OS の重大なセキュリティ違反になります。私の理解では、ユーザー プロセスが既にメモリにロードされている dll のコードを変更しようとすると、OS によって停止される必要があります。このチェックを有効/無効にする Widows Server OS の設定はありますか?

彼らはこれをどのように克服しますか?

エンタープライズ実稼働環境のアプリケーションで、この種の迂回パッケージを使用した経験のある人はいますか?

4

2 に答える 2

1

最初に重要なことは、回り道を使用して、独自のプロセスの指示を変更することです。あなたのプロセスでは - とにかくやりたいことは何でもできますし、OS の観点から見ると、ユーザー空間コード (たとえば、DLL 内のコードとプロセスにロードされるシステムの kernel32.dll 内のコード) はまさにセキュリティの観点からは同じです。理由は簡単です。OS のセキュリティをハッキングすることは、ユーザー空間でプロセスのコードを変更することと同じではありません。OS は、(管理者として実行している場合を除いて) プロセスに過度の電力を与えないことで、それ自体を保護します。セキュリティ上の理由から、別のプロセスのコードを変更する方法 (その特権またはパスワードなどの興味深いデータを取得するため) はより興味深いものですが、それは別の議論の主題です。

次に、detouring再起動せずに重要なシステム サービスにパッチを適用するなど、ホット パッチを実装する方法として考えられていました。それが現在 Microsoft によって使用/サポートされているかどうかはわかりませんが (Googleによるとjmp)、標準のプロローグの長さが 5 バイトであることは偶然ではありません (はい、命令を入れるのに理想的です)。

于 2011-03-04T00:26:36.107 に答える
1

その名前にもかかわらず、実際にはカーネルでkernel32.dllはありません。これには、Win32 の NT システム コールへのインターフェイスを実装する Win32 API 関数へのエントリ ポイントが含まれています。

さらに、Windows (最新の OS と同様) はコピー オン ライトをサポートしているため、回り道を使用して のような共有 DLL にパッチを適用するkernel32.dllと、OS は最初にプロセスのプライベート コピーを作成し、それにパッチを適用します。NT カーネル自体は完全に安全です。

于 2011-03-04T00:29:56.267 に答える