Este proyecto implementa una biblioteca de inyección de ensamblaje .NET (está inspirada en el proyecto snoopwpf). El proceso remoto puede ser administrado o no administrado.
Cuando quieras inyectar un ensamblado en un proceso remoto debes considerar los siguientes aspectos:
Si se cumplen las condiciones previas anteriores, puede inyectar un ensamblaje e invocar un método de activación. Hay tres posibilidades para invocar el método de activación:
Shed también utiliza esta biblioteca para inyectar una DLL en un proceso remoto. Puedes ver un vídeo aquí.
Para ver ejemplos prácticos, consulte el proyecto TestRunner.
Si el ensamblado inyectado tiene dependencias de ensamblados .NET no estándar, puede agregar esas dependencias con el método AddDependency
.
Si el ensamblaje inyectado necesita cargar algún archivo externo para funcionar correctamente (como un archivo de configuración), puede especificarlo con el método AddFile
. Este método copiará el archivo especificado en el directorio de trabajo del proceso inyectado.
En algunos casos es necesario pasar un argumento al método llamado en el ensamblado inyectado. Esto se logra pasando un objeto context
al método Inject
. Luego, el método Injected
necesita convertir el objeto context
al tipo real (consulte AssemblyWithMethodAcceptingAnArgument
para ver un ejemplo). El marco utiliza la clase BinaryFormatter
para serializar el objeto context
, así que asegúrese de que el objeto especificado se pueda serializar.
Consideremos el siguiente código:
using System;
namespace InjectedAssembly
{
public class Main
{
// we use a default injection method name in order to execute our code in the remote process
private static void Inject()
{
Console.WriteLine("Hello world from the injected process!");
}
}
}
Para inyectar el ensamblado generado a partir del código anterior basta con utilizar el siguiente código:
var pid = 1234;
var injector = new Injector(pid, Assembly.LoadFile("AssemblyToInject.dll"));
var injectionResult = injector.Inject();
Para ver más ejemplos, consulte la carpeta de ejemplos.
ManagedInjector se desarrolla actualmente con VisualStudio 2017 Community Edition (asegúrese de tener instalada la última versión). Para compilar el código fuente, asegúrese de:
build.bat
Usamos SemVer para el control de versiones. Para conocer las versiones disponibles, consulte las etiquetas en este repositorio.
Managed Injector tiene licencia Creative Commons.