程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#實現遠程線程插入

C#實現遠程線程插入

編輯:關於C#

使用。NET可以實現遠程線程插入嗎?

使用嚴格的C#,不借助任何其它技術。遠程線程插入是不能在。NET平台上實現的。然而在shellcode技術和遠程線程插入之代碼插入的基礎上。完全可以實現基於。NET平台的混合型遠程線程插入。

最終效果是這樣的:用於將線程插入到其它進程的可執行程序是。NET程序(混合幾百字節的機器碼),用於被插入到其它進程的DLL或EXE也是純。NET實現的。

可被插入的對象是所有有權限進程WriteProcessMemory操作的本機進程。

實現C#下的遠程線程插入需要的技術:。NET進程寄宿遠程線程插入之代碼插入

我所所謂的C#實現遠程線程插入,其核心就是將一個。NET程序集寄宿到一個本機上的任意目標進程中並以線程方式運行。CLR環境其根本就是一個COM服務器。我們寫的。NET程序集都是在這個COM服務器的支持下運行的。如果想讓一個。NET程序集在任意的本機進程中運行。那麼首先那個進程需要具有。NET環境時環境。因為我們在遠程線程插入時就需要用到。NET環境時環境。沒有這個環境,我們的。NET程序集就沒有辦法被加載執行。如果本機進程是WIN32的,沒有。NET運行時環境怎麼辦呢?我們需要給它一個,代碼如下:

DWORD __stdcall clrfunclocal()
  {
  ICLRRuntimeHost * pClrHost;CorBindToRuntimeEx(NULL,NULL,0,CLSID_CLRRuntimeHost,IID_ICLRRuntimeHost,(PVOID*)&pClrHost);pClrHost->Start();DWORD retVal=0;hr=pClrHost->ExecuteInDefaultAppDomain(s_asmpath),s_class,s_method,NULL,&retVal);
}

以上代碼的最後一句是用於在默認程序域內執行一個。NET程序集。這段代碼是用C++寫的。

如果是自己寫了一個WIN32程序,因為某種原因需要加載一個。NET程序集並執行它的功能。你就可以像以上那樣寫。但我們是做遠程線程插入,那麼如何在被插入的進程中執行上數代碼呢?高手已經明白了。就是將這些代碼編譯成像SHELLCODE一樣的裸的可執行代碼。然後使用遠程線程插入的代碼插入就可以CLR環境加載到其它進程中並使其執行我們想要的。NET程序集裡的代碼。

如果你已經有辦法將上述代碼編譯成裸的可執行本機代碼了。你就可以將這些本機代碼作為資源加到你的C#項目中備用。

在C#中執行遠程線程插入和在C++中是一樣的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved