ウィンドウズ:カスタム appcompat shim (アプリケーション修正) を作成するにはどうすればよいですか?
-
19-09-2019 - |
質問
Windows には適用する機能があります シム 不正な動作をするアプリケーションに対して. 。Shim は、API 呼び出しをインターセプトして変更するために使用されます。たとえば、シムは次の目的で使用できます。
- 受信パラメータを変更する
- 戻り値について嘘をつく
- 別のものを呼び出すように変更します
の アプリケーション互換性ツールキット には、誤動作する独自のアプリケーションに適用できる既存の shim が多数あります。API 呼び出しを無視し、代わりにまったく別の API を呼び出す例を次に示します。
Microsoft がすでに作成した何百もの shim の 1 つではない shim が必要です。 カスタムシムが必要です.
私の場合、次の呼び出しをインターセプトしたいと考えています。
GetSystemMetrics(0x1000)
それが戻るように 0
. 。必要な修正を含む独自の DLL を Windows に提供する方法に関する情報が見つかりません。あなたかどうかさえわかりません できる カスタムシムを作成します。
Windows はカスタム シムをサポートしていますか?
解決
私は、MicrosoftがAPPCOMPATシムを実装する以外の人のいずれかの方法を認識していないよ。
あなたは迂回を調査したいかもしれませんが、それが機能を提供するかもしれないあなた欲しいます。
他のヒント
あなたは、ビューのレイモンド陳氏の視点からこれを考えなければなりません。マイクロソフト以外の誰かが、互換性のシムを書くすることが可能であった場合を想像してみてください。 Microsoftが破壊変更を行うその後いつでも、すべての他の互換性の仕事に加えて、彼らはまた、間違ったことをしたサードパーティ製のシムのためのシムを記述する必要があります。下位互換性を維持することは、そのままでは十分に懸命である。
それは可能だが、それはいくつかの作業を必要とします。
あなたはシムを適用する独自のランチャープログラムを使用してアプリケーションを起動します。あなたのランチャーは、そのメモリを編集するための十分な権限を持つプロセスを作成させることによってこれを行います。ほとんどのAPI関数は、より多くのNOPが先行する2バイトのNOPで始まります。あなたが行きたい、これまで長いジャンプショートジャンプと、前のnopに2バイトのNOPを変更することができます。
私は過去に使用した別の解決策は、DLLとして、実行可能ファイルをロードすることですが、それはアプリケーションがどのように細心の注意に依存するので、より多くの作業が発生する可能性があります。私の状況では、私はデータのみのDLLとして実行可能ファイルをロードし、すべての私の自身の輸入をしなければならなかったが、残念ながら以前のソリューションは、私のためのオプションではありませんでした。
私もかつて同様の原理を使用してフックDLLを書かれているが、それはあなたがDLLをロードするために、ソースを変更したり、プロセスがDLLのプラグインをサポートしているかのどちらかの場合のみのオプションです。
あなたはいつも、:)それを修正あなたがそれを持つ任意の助けが必要な場合は私が知っているように、リバースエンジニアリングを使用することができます。