transparente servidor que para internet externo configurar cache c# appdomain code-injection

c# - servidor - AppDomain.CreateInstanceFromAndUnwrap-No se puede convertir el proxy transparente



squid configurar proxy transparente (1)

Encontró la solución para este problema aquí: http://www.west-wind.com/WebLog/posts/601200.aspx

Parece un error en el marco .NET. La solución es agregar un controlador a AppDomain.CurrentDomain.AssemblyResolve que carga y devuelve manualmente el ensamblado en args.Name . Luego puede llamar a CreateInstanceFromAndUnwrap sin que se lance una excepción.

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

  1. Use CreateRemoteThread para forzar que el proceso de destino llame a LoadLibrary en una DLL de LoadLibrary de LoadLibrary no administrada. Desde este punto estamos ejecutando código en el proceso objetivo.
  2. Mi bootstrap DLL luego crea una instancia del CLR y llama a ExecuteInDefaultAppDomain en él, lo que ejecuta un método en una DLL de ayuda administrada.
  3. Este método crea un nuevo AppDomain y llama a AppDomain.CreateInstanceFromAndUnwrap para pasar la ejecución a mi DLL de carga útil, IInjectionPayload el resultado como IInjectionPayload .
  4. La idea es que mi DLL de carga útil expone una clase que implementa IInjectionPayload , por lo que la DLL auxiliar puede simplemente llamar a payload.Run() .

Lo hago de esta manera para que el código de carga útil pueda descargarse completamente simplemente llamando a AppDomain.Unload (después de indicarlo para que se limpie).

Este enfoque funciona: la clase en mi DLL de carga útil se está instanciando en el proceso objetivo, por lo que se puede ejecutar el código, pero no puedo convertir el objeto devuelto por CreateInstanceFromAndUnwrap a un IInjectionPayload ; lanza la siguiente excepción:

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

He intentado usar CreateInstanceAndUnwrap y Activator.CreateInstanceFrom seguido de Object.Unwrap , pero ambos métodos también hacen que se Object.Unwrap 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.