Вопрос по appdomain, code-injection, c# – AppDomain.CreateInstanceFromAndUnwrap - Невозможно привести прозрачный прокси

19

Я пишу библиотеку .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   ответ
23

http://www.west-wind.com/WebLog/posts/601200.aspx

Похоже, ошибка в .NET Framework. Решение состоит в том, чтобы добавить обработчикAppDomain.CurrentDomain.AssemblyResolve который вручную загружает и возвращает сборку вargs.Name, Тогда вы можете позвонитьCreateInstanceFromAndUnwrap без этого исключение.

Это просто спасло мою задницу. Кажется, моя проблема заключается в загрузке сборки AppDomain из каталога, отличного от того, в котором выполняется исполняемый файл. Объект удаленного взаимодействия возвращается нормально, но когда я его отменяю (), он утверждает, что это неправильный тип. Его уловка обработчика-обработчика прекрасно работает. Clinton Pierce

Похожие вопросы