
Injeta Assembly C# (EXE ou DLL) em todos os runtimes CLR e AppDomains de outro processo.
Injeta Assembly EXE ou DLL em C# em qualquer runtime CLR e AppDomain de outro processo. O assembly injetado pode então acessar instâncias estáticas das classes do processo injetado e, portanto, afetar seu estado interno.
clrinject-cli.exe -p <processId/nomeProcesso> -a <arquivoAssembly>
Abre o processo com id <processId> ou nome <processName>, injeta o assembly <assemblyFile> EXE e executa o método Main.
-e Enumera todos os Runtimes CLR carregados e AppDomains criados.-d <#> Injeta apenas no <#>-ésimo AppDomain. Se nenhum número ou zero for especificado, o assembly é injetado em todos os AppDomains.-i <namespace>.<className> Cria uma instância da classe <className> do namespace <namespace>.clrinject-cli.exe -p victim.exe -e (Enumera Runtimes e AppDomains do victim.exe)clrinject-cli.exe -p 1234 -a "C:\Path\To\invader.exe" -d 2 (Injeta invader.exe no segundo AppDomain do processo com id 1234)clrinject-cli.exe -p victim.exe -a "C:\Path\To\invader.dll" -i "Invader.Invader" (Cria uma instância de Invader dentro de cada AppDomain em victim.exe)clrinject-cli64.exe -p victim64.exe -a "C:\Path\To\invader64.exe" (Injeta assembly x64 em processo x64)O código a seguir pode ser compilado como executável C# e então injetado em um processo PowerShell. Este código acessa instâncias estáticas de classes internas do PowerShell para alterar a cor do texto do console para 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 injeção:
clrinject-cli64.exe -p powershell.exe -a "C:\Path\To\invader64.exe"
Resultado:
