CoGetClassObjectおよび/またはCoCreateInstance呼び出しをフックまたはインターセプトする方法はありますか?
-
05-07-2019 - |
質問
COMをインターセプトしたい CoCreateInstanceEx および/または CoGetClassObject 関数が単体テストでクラスをテストシムに置き換えます。これは、単一のCLSIDのみに適用されます。他のすべては変更せずに通過できます。恐ろしい邪悪なハッキングなしでこれを行う方法はありますか?
解決
それはまさにあなたが望むものに依存します。
そのクラスをロードしているユーザーを検出する場合、またはクラスがロードされているかどうかを確認する場合は、プロセスモニター。 CoGetClassObject()
(または CoCreateInstanceEx()
)を呼び出すと、 HKCR \ CLSID \ {対象クラスID}
キーが読み取られますプロセスモニターでは、どのプロセスがいつ実行され、どの程度成功したかが表示されます。
既存のクラスを自分のものに置き換える場合-同じクラスIDのクラスのバージョンでライブラリをコンパイルし、 HKCR \ CLSID \ {対象のID}内のCOMサーバーへのパスを変更します
を使用して、ライブラリを使用してそのIDを持つクラスを提供します。手動またはregsvr32を使用してこれを行うことができます。最初に元のライブラリを登録し、次に自分のライブラリを登録して目的のクラスを上書きします。 COMはクラスIDを実行します->コンシューマが CoGetClassObject()
または CoCreateInstanceEx()
を呼び出したときに、そのキーを介したライブラリマッピング。
他のヒント
常に CoTreatAsClass
関数があります。
http://msdn.microsoft.com/en-us /library/ms693452(VS.85).aspx
しかし、あなたが述べたように、それはローカルな変更ではなく、システム全体のクラスの置き換えになります。
別の方法として、Shay Erlichmenのコメントが参照している投稿で提案されているように、CoCreateInstanceのフックを調べることもできます。