
Injecte l'Assembly C# EXE ou DLL dans chaque runtime CLR et AppDomain d'un autre processus
Injecte un assembly C# (EXE ou DLL) dans tout runtime CLR et AppDomain d'un autre processus. L'assembly injecté peut alors accéder aux instances statiques des classes du processus injecté et ainsi affecter son état interne.
clrinject-cli.exe -p <processId/processName> -a <assemblyFile>
Ouvre le processus avec l'identifiant <processId> ou le nom <processName>, injecte l'assembly <assemblyFile> EXE et exécute la méthode Main.
-e Énumère tous les runtimes CLR chargés et les AppDomains créés.-d <#> Injecte uniquement dans le <#>-ième AppDomain. Si aucun nombre ou zéro n'est spécifié, l'assembly est injecté dans chaque AppDomain.-i <namespace>.<className> Crée une instance de la classe <className> du namespace <namespace>.clrinject-cli.exe -p victim.exe -e (Énumère les runtimes et AppDomains de victim.exe)clrinject-cli.exe -p 1234 -a "C:\Path\To\invader.exe" -d 2 (Injecte invader.exe dans le deuxième AppDomain du processus avec l'identifiant 1234)clrinject-cli.exe -p victim.exe -a "C:\Path\To\invader.dll" -i "Invader.Invader" (Crée une instance d'Invader dans chaque AppDomain de victim.exe)clrinject-cli64.exe -p victim64.exe -a "C:\Path\To\invader64.exe" (Injecte un assembly x64 dans un processus x64)Le code suivant peut être compilé en exécutable C# puis injecté dans un processus PowerShell. Ce code accède aux instances statiques des classes internes de PowerShell pour changer la couleur du texte de la console en vert.
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());
}
}
}
}
Commande d'injection :
clrinject-cli64.exe -p powershell.exe -a "C:\Path\To\invader64.exe"
Résultat :
