AppDomain.CreateInstanceFromAndUnwrap - Невозможно привести прозрачный прокси
Я пишу библиотеку .NET для внедрения управляемых DLL во внешние процессы. Мой текущий подход:
использованиеCreateRemoteThread
заставить целевой процесс вызватьLoadLibrary
на неуправляемой загрузочной DLL. С этого момента мы выполняем код в целевом процессе.Моя библиотека начальной загрузки затем создает экземпляр CLR и вызываетExecuteInDefaultAppDomain
на нем, который выполняет метод в управляемой вспомогательной DLL.Этот метод создает новый домен приложений и вызывает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 полезной нагрузки определенно загружается и создается экземпляр класса, как и предполагалось. Любая помощь приветствуется.