
Inyecta ensamblados C# EXE o DLL en cada runtime de CLR y AppDomain de otro proceso.
Inyecta un ensamblado EXE o DLL de C# en cualquier runtime CLR y AppDomain de otro proceso. El ensamblado inyectado puede entonces acceder a instancias estáticas de las clases del proceso infectado y por lo tanto afectar su estado interno.
clrinject-cli.exe -p <processId/processName> -a <assemblyFile>
Abre el proceso con id <processId> o nombre <processName>, inyecta el EXE <assemblyFile> y ejecuta el método Main.
-e Enumera todos los runtimes CLR cargados y los AppDomains creados.-d <#> Inyecta solo en el AppDomain número <#>. Si no se especifica número o es cero, el ensamblado se inyecta en todos los AppDomains.-i <namespace>.<className> Crea una instancia de la clase <className> del namespace <namespace>.clrinject-cli.exe -p victim.exe -e (Enumera runtimes y AppDomains de victim.exe)clrinject-cli.exe -p 1234 -a "C:\Path\To\invader.exe" -d 2 (Inyecta invader.exe en el segundo AppDomain del proceso con id 1234)clrinject-cli.exe -p victim.exe -a "C:\Path\To\invader.dll" -i "Invader.Invader" (Crea una instancia de Invader dentro de cada AppDomain en victim.exe)clrinject-cli64.exe -p victim64.exe -a "C:\Path\To\invader64.exe" (Inyecta ensamblado x64 en proceso x64)El siguiente código puede compilarse como ejecutable de C# y luego inyectarse en un proceso de PowerShell. Este código accede a instancias estáticas de clases internas de PowerShell para cambiar el color del texto de la consola a verde.
using System;
using System.Reflection;
using Microsoft.PowerShell;
using System.Management.Automation.Host;
namespace Invader
{
class Invader
{
static void Main(string[] args)
{
try
{
var powerShellAssembly = typeof(ConsoleShell).Assembly;
var consoleHostType = powerShellAssembly.GetType("Microsoft.PowerShell.ConsoleHost");
var consoleHost = consoleHostType.GetProperty("SingletonInstance", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
var ui = (PSHostUserInterface)consoleHostType.GetProperty("UI").GetValue(consoleHost);
ui.RawUI.ForegroundColor = ConsoleColor.Green;
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
Comando de inyección:
clrinject-cli64.exe -p powershell.exe -a "C:\Path\To\invader64.exe"
Resultado:
