AppDomain.CreateInstanceFromAndUnwrap - No se puede convertir el proxy transparente

Estoy escribiendo una biblioteca .NET para inyectar DLL administradas en procesos externos. Mi enfoque actual es:

UtilizarCreateRemoteThread forzar el proceso de destino para llamarLoadLibrary en un archivo DLL de arranque no administrado. Desde este punto estamos ejecutando código en el proceso objetivo.Mi bootstrap DLL luego crea una instancia del CLR y llamaExecuteInDefaultAppDomain en él, que ejecuta un método en una DLL de ayuda administrada.Este método crea un nuevo dominio de aplicación y llamaAppDomain.CreateInstanceFromAndUnwrap para pasar la ejecución a mi DLL de carga útil, emitiendo el resultado como unIInjectionPayload.La idea es que mi DLL de carga útil expone una clase que implementaIInjectionPayload, por lo que el DLL ayudante puede simplemente llamarpayload.Run().

Lo hago de esta manera para que el código de carga útil se pueda descargar completamente simplemente llamandoAppDomain.Unload (Después de indicarlo para que limpie).

Este enfoque funciona: la clase en mi DLL de carga útil se está instanciando en el proceso objetivo, por lo que el códigopuede ser ejecutado - pero no puedo lanzar el objeto devuelto porCreateInstanceFromAndUnwrap a unaIInjectionPayload; lanza la siguiente excepción:

No se puede convertir el proxy transparente para escribir 'blah.Blah.IInjectionPayload'.

He intentado usarCreateInstanceAndUnwrapyActivator.CreateInstanceFrom seguido porObject.Unwrap, pero ambos métodos también hacen que se lance la misma excepción.

La firma de mi clase de carga útil es:

public class Program : MarshalByRefObject, IInjectionPayload

Estoy perplejo porque la DLL de carga útil definitivamente se está cargando y la clase está siendo instanciada, según lo previsto. Cualquier ayuda sería muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta