首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實現遠程執行緒注入:.NET 程式集寄宿於非託管進程

     編輯:關於C語言

核心挑戰

純 C# 無法直接實現遠程執行緒注入 (需非託管 Shellcode)。但可採用混合模式:C# 主程式注入極小非託管 Stub,Stub 啟動 CLR 並載入 .NET 組件於目標進程執行。

關鍵技術:CLR 寄宿 API


// 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))。

實現步驟

  1. 將上述 C++ 代碼編譯為無相依的機器碼 (Shellcode 風格)。
  2. C# 程式將機器碼作為資源內嵌。
  3. 注入時:VirtualAllocEx 分配目標進程記憶體 → WriteProcessMemory 寫入 Shellcode → CreateRemoteThread 執行。
  4. Shellcode 啟動 CLR → 載入指定 .NET 組件 → 執行進入點方法。

條件與限制

  • 目標進程需具備 WriteProcessMemory 權限 (通常同用戶進程可行)。
  • 注入組件為純 .NET,無非託管相依。
  • CLR 版本需與目標機器相容 (可用 CorBindToCurrentRuntime)。
  • 屬進階/敏感技術,僅供安全研究、除錯器開發、熱修補等合法用途。

此混合模式展示 .NET 與非託管世界互操作的極限能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved