AppDomain.CreateInstanceFromAndUnwrap - Transparenter Proxy kann nicht umgewandelt werden

Ich schreibe eine .NET-Bibliothek, um verwaltete DLLs in externe Prozesse einzufügen. Mein aktueller Ansatz ist:

BenutzenCreateRemoteThread um den Aufruf des Zielprozesses zu erzwingenLoadLibrary auf einer nicht verwalteten Bootstrap-DLL. Ab diesem Zeitpunkt führen wir Code im Zielprozess aus.Meine Bootstrap-DLL erstellt dann eine Instanz der CLR und ruft aufExecuteInDefaultAppDomain darauf, das eine Methode in einer verwalteten Hilfsprogramm-DLL ausführt.Diese Methode erstellt eine neue AppDomain und ruft aufAppDomain.CreateInstanceFromAndUnwrap um die Ausführung in meine Payload-DLL zu übergeben und das Ergebnis alsIInjectionPayload.Die Idee ist, dass meine Payload-DLL eine Klasse verfügbar macht, die implementiert wirdIInjectionPayload, so kann die Hilfsprogramm-DLL einfach aufrufenpayload.Run().

Ich mache das so, dass der Payload-Code durch einfaches Aufrufen komplett entladen werden kannAppDomain.Unload (nachdem es signalisiert wurde, aufzuräumen).

Dieser Ansatz funktioniert - die Klasse in meiner Payload-DLL wird im Zielprozess instanziiert, also Codekönnen ausgeführt werden - aber ich kann das Objekt, das von zurückgegeben wurde, nicht werfenCreateInstanceFromAndUnwrap zu einemIInjectionPayload; Es wird die folgende Ausnahme ausgelöst:

Transparenter Proxy kann nicht in "blah.Blah.IInjectionPayload" umgewandelt werden.

Ich habe versucht mitCreateInstanceAndUnwrap, undActivator.CreateInstanceFrom gefolgt vonObject.UnwrapBei beiden Methoden wird jedoch auch dieselbe Ausnahme ausgelöst.

Die Signatur meiner Nutzlastklasse lautet:

public class Program : MarshalByRefObject, IInjectionPayload

Ich bin ratlos, weil die Payload-DLL definitiv geladen wird und die Klasse wie beabsichtigt instanziiert wird. Jede Hilfe wäre sehr dankbar.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage