
حقن تجميع C# EXE أو DLL في كل بيئة تشغيل CLR و AppDomain لعملية أخرى.
يحقن Assembly من C# (EXE أو DLL) في أي CLR Runtime و AppDomain لعملية أخرى. يمكن للـ Assembly المحقون بعد ذلك الوصول إلى static instances لفئات العملية المحقونة وبالتالي التأثير على حالتها الداخلية.
clrinject-cli.exe -p <processId/processName> -a <assemblyFile>
يفتح العملية بالمعرّف <processId> أو الاسم <processName>، ويحقن <assemblyFile> EXE وينفّذ الطريقة Main.
-e يُعدّد جميع CLR Runtimes المُحمّلة و AppDomains المُنشأة.-d <#> يحقن فقط في AppDomain رقم <#>. إذا لم يُحدد رقم أو تم تحديد صفر، يُحقن الـ Assembly في كل AppDomain.-i <namespace>.<className> يُنشئ مثيلًا للفئة <className> من namespace <namespace>.clrinject-cli.exe -p victim.exe -e (تعداد Runtimes و AppDomains من victim.exe)clrinject-cli.exe -p 1234 -a "C:\Path\To\invader.exe" -d 2 (حقن invader.exe في AppDomain الثاني من العملية ذات المعرف 1234)clrinject-cli.exe -p victim.exe -a "C:\Path\To\invader.dll" -i "Invader.Invader" (إنشاء مثيل من Invader داخل كل AppDomain في victim.exe)clrinject-cli64.exe -p victim64.exe -a "C:\Path\To\invader64.exe" (حقن Assembly x64 في عملية x64)يمكن تجميع الكود التالي كملف تنفيذي C# ثم حقنه في عملية PowerShell. يصل هذا الكود إلى static instances لفئات PowerShell الداخلية لتغيير لون نص وحدة التحكم إلى الأخضر.
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());
}
}
}
}
أمر الحقن:
clrinject-cli64.exe -p powershell.exe -a "C:\Path\To\invader64.exe"
النتيجة:
