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 полезной нагрузки определенно загружается и создается экземпляр класса, как и предполагалось. Любая помощь приветствуется.

Ответы на вопрос(1)

Ваш ответ на вопрос