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