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.Unwrap
Bei 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.