純 C# 無法直接實現遠程執行緒注入 (需非託管 Shellcode)。但可採用混合模式:C# 主程式注入極小非託管 Stub,Stub 啟動 CLR 並載入 .NET 組件於目標進程執行。
// C++ Stub 核心邏輯 (編譯為位置無關 Shellcode)
DWORD __stdcall ClrFunc()
{
ICLRRuntimeHost* pClrHost;
CorBindToRuntimeEx(NULL, NULL, 0, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (PVOID*)&pClrHost);
pClrHost->Start();
DWORD retVal = 0;
pClrHost->ExecuteInDefaultAppDomain(assemblyPath, className, methodName, NULL, &retVal);
return retVal;
}
CorBindToRuntimeEx 綁定特定 CLR 版本。ExecuteInDefaultAppDomain 在預設應用程式域執行靜態方法 (簽章 int MethodName(string))。VirtualAllocEx 分配目標進程記憶體 → WriteProcessMemory 寫入 Shellcode → CreateRemoteThread 執行。WriteProcessMemory 權限 (通常同用戶進程可行)。CorBindToCurrentRuntime)。此混合模式展示 .NET 與非託管世界互操作的極限能力。