マネージ 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 が確実にロードされ、クラスがインスタンス化されているため、困惑しています。どんな助けでも大歓迎です。