AppDomain.CreateInstanceFromAndUnwrap - Nie można rzutować przezroczystego proxy
Piszę bibliotekę .NET, aby wprowadzić zarządzane biblioteki DLL do procesów zewnętrznych. Moje obecne podejście to:
Posługiwać sięCreateRemoteThread
aby wymusić wywołanie docelowego procesuLoadLibrary
na niezarządzanym pliku DLL ładowania początkowego. Od tego momentu wykonujemy kod w docelowym procesie.Moja biblioteka DLL bootstrapu tworzy następnie wystąpienie CLR i wywołaniaExecuteInDefaultAppDomain
na niej, która wykonuje metodę w zarządzanej bibliotece pomocniczej DLL.Ta metoda tworzy nową domenę aplikacji i wywołaniaAppDomain.CreateInstanceFromAndUnwrap
przekazać wykonanie do mojej biblioteki DLL ładunku, rzucając wynik jakoIInjectionPayload
.Pomysł polega na tym, że moja biblioteka DLL ładunków ujawnia klasę, która implementujeIInjectionPayload
, więc DLL pomocnika może po prostu wywołaćpayload.Run()
.Robię to w ten sposób, aby kod ładunku mógł zostać całkowicie rozładowany po prostu wywołującAppDomain.Unload
(po zasygnalizowaniu tego, aby posprzątać).
Takie podejście działa - klasa w mojej bibliotece DLL ładunków jest tworzona w procesie docelowym, więc kodujmogą być wykonane - ale nie mogę rzucić obiektu zwróconego przezCreateInstanceFromAndUnwrap
doIInjectionPayload
; rzuca następujący wyjątek:
Nie można przesłać przezroczystego proxy do typu „blah.Blah.IInjectionPayload”.
Próbowałem użyćCreateInstanceAndUnwrap
, iActivator.CreateInstanceFrom
śledzony przezObject.Unwrap
, ale obie te metody powodują również zgłoszenie tego samego wyjątku.
Podpisem mojej klasy ładunku jest:
public class Program : MarshalByRefObject, IInjectionPayload
Jestem zakłopotany, ponieważ DLL ładunków jest ładowany i klasa jest tworzona zgodnie z przeznaczeniem. Każda pomoc byłaby bardzo mile widziana.