
Inietta assembly C# EXE o DLL in ogni runtime CLR e AppDomain di un altro processo.
Inietta assembly C# EXE o DLL in qualsiasi runtime CLR e AppDomain di un altro processo. L'assembly iniettato può quindi accedere alle istanze statiche delle classi del processo iniettato e quindi influenzare il suo stato interno.
clrinject-cli.exe -p <processId/processName> -a <assemblyFile>
Apre il processo con id <processId> o nome <processName>, inietta l'EXE <assemblyFile> ed esegue il metodo Main.
-e Enumera tutti i runtime CLR caricati e gli AppDomain creati.-d <#> Inietta solo nel <#>-esimo AppDomain. Se non viene specificato alcun numero o zero, l'assembly viene iniettato in ogni AppDomain.-i <namespace>.<className> Crea un'istanza della classe <className> dal namespace <namespace>.clrinject-cli.exe -p victim.exe -e (Enumera runtime e AppDomain da victim.exe)clrinject-cli.exe -p 1234 -a "C:\Path\To\invader.exe" -d 2 (Inietta invader.exe nel secondo AppDomain del processo con id 1234)clrinject-cli.exe -p victim.exe -a "C:\Path\To\invader.dll" -i "Invader.Invader" (Crea un'istanza di Invader in ogni AppDomain in victim.exe)clrinject-cli64.exe -p victim64.exe -a "C:\Path\To\invader64.exe" (Inietta assembly x64 in un processo x64)Il codice seguente può essere compilato come eseguibile C# e poi iniettato in un processo PowerShell. Questo codice accede a istanze statiche di classi interne di PowerShell per cambiare il colore del testo della console in 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 di iniezione:
clrinject-cli64.exe -p powershell.exe -a "C:\Path\To\invader64.exe"
Risultato:
