AppDomain.CreateInstanceFromAndUnwrap - Невозможно привести прозрачный прокси
Я пишу библиотеку .NET для внедрения управляемых DLL во внешние процессы. Мой текущий подход:
использованиеCreateRemoteThread
заставить целевой процесс вызватьLoadLibrary
на неуправляемой загрузочной DLL. С этого момента мыповторное выполнение кода в целевом процессе.Моя библиотека начальной загрузки затем создает экземпляр CLR и вызываетExecuteInDefaultAppDomain
на нем, который выполняет метод в управляемой вспомогательной DLL.Этот метод создает новый домен приложений и вызываетAppDomain.CreateInstanceFromAndUnwrap
передать выполнение в мою DLL полезной нагрузки, приведя результат как.IInjectionPayload
Идея состоит в том, что моя полезная DLL предоставляет класс, который реализуетIInjectionPayload
, поэтому вспомогательная DLL может просто вызвать .I 'payload.Run()
Я делаю это таким образом, чтобы код полезной нагрузки мог быть полностью выгружен, просто вызываяAppDomain.Unload
(после того, как подал сигнал на очистку).
Этот подход работает - класс в моей DLL полезной нагрузки создается в целевом процессе, поэтому кодМожно быть казненным - но я могубросил объект, возвращенныйCreateInstanceFromAndUnwrap
дляIInjectionPayload
; он выбрасывает следующее исключение:
Невозможно привести прозрачный прокси к типу 'blah.Blah.IInjectionPayload'.I»
мы пытались использоватьCreateInstanceAndUnwrap
, а такжеActivator.CreateInstanceFrom
с последующимObject.Unwrap
, но оба эти метода также вызывают одно и то же исключение.
Подпись моего класса полезной нагрузки: I '
public class Program : MarshalByRefObject, IInjectionPayload
Я озадачен, потому что DLL полезной нагрузки определенно загружается и создается экземпляр класса, как и предполагалось. Любая помощь приветствуется.