マネージ DLL を外部プロセスに挿入する .NET ライブラリを作成しています。私の現在のアプローチは次のとおりです。
CreateRemoteThread
ターゲット プロセスがLoadLibrary
アンマネージ ブートストラップ DLLを強制的に呼び出すために使用します。この時点から、ターゲット プロセスでコードを実行します。- 次に、ブートストラップ DLL は CLR のインスタンスを作成し、それを呼び出し
ExecuteInDefaultAppDomain
ます。これにより、マネージ ヘルパー DLL のメソッドが実行されます。 - このメソッドは、新しい AppDomain を作成
AppDomain.CreateInstanceFromAndUnwrap
し、ペイロード DLL に実行を渡すために呼び出し、結果をIInjectionPayload
. - ペイロード DLL は を実装するクラスを公開する
IInjectionPayload
ので、ヘルパー DLL は単純に を呼び出すことができますpayload.Run()
。
このようにして、ペイロードコードを呼び出すだけで完全にアンロードできるようにしていますAppDomain.Unload
(クリーンアップするように信号を送った後)。
このアプローチは機能します - ペイロード DLL のクラスはターゲット プロセスでインスタンス化されるため、コードを実行できCreateInstanceFromAndUnwrap
ます - しかし、返されたオブジェクトをIInjectionPayload
;にキャストすることはできません。次の例外がスローされます。
透過プロキシをタイプ「blah.Blah.IInjectionPayload」にキャストできません。
CreateInstanceAndUnwrap
を使用してみましActivator.CreateInstanceFrom
たObject.Unwrap
が、これらの方法の両方で同じ例外がスローされます。
私のペイロード クラスの署名は次のとおりです。
public class Program : MarshalByRefObject, IInjectionPayload
意図したとおり、ペイロード DLL が確実にロードされ、クラスがインスタンス化されているため、困惑しています。どんな助けでも大歓迎です。