新聞中心
能否使用C#實現(xiàn)遠程線程插入嗎?

成都創(chuàng)新互聯(lián)公司企業(yè)建站,十余年網(wǎng)站建設經(jīng)驗,專注于網(wǎng)站建設技術,精于網(wǎng)頁設計,有多年建站和網(wǎng)站代運營經(jīng)驗,設計師為客戶打造網(wǎng)絡企業(yè)風格,提供周到的建站售前咨詢和貼心的售后服務。對于網(wǎng)站制作、做網(wǎng)站中不同領域進行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準市場調(diào)研,為客戶提供的解決方案。
使用嚴格的C#,不借助任何其它技術。遠程線程插入是不能在.NET平臺上實現(xiàn)的。然而在shellcode技術和遠程線程插入之代碼插入的基礎上。完全可以實現(xiàn)基于.NET平臺的混合型遠程線程插入。
最終效果是這樣的:用于將線程插入到其它進程的可執(zhí)行程序是.NET程序(混合幾百字節(jié)的機器碼),用于被插入到其它進程的DLL或EXE也是純.NET實現(xiàn)的。
可被插入的對象是所有有權限進程WriteProcessMemory操作的本機進程。
C#實現(xiàn)遠程線程插入需要的技術:.NET進程寄宿遠程線程插入之代碼插入
所謂的C#實現(xiàn)遠程線程插入,其核心就是將一個.NET程序集寄宿到一個本機上的任意目標進程中并以線程方式運行。CLR環(huán)境其根本就是一個COM服務器。我們寫的.NET程序集都是在這個COM服務器的支持下運行的。如果想讓一個.NET程序集在任意的本機進程中運行。那么首先那個進程需要具有.NET環(huán)境時環(huán)境。因為我們在遠程線程插入時就需要用到。 NET環(huán)境時環(huán)境。沒有這個環(huán)境,我們的.NET程序集就沒有辦法被加載執(zhí)行。如果本機進程是WIN32的,沒有.NET運行時環(huán)境怎么辦呢?我們需要給它一個,代碼如下:
- 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);- }
以上代碼的最后一句是用于在默認程序域內(nèi)執(zhí)行一個.NET程序集。這段代碼是用C++寫的。
如果是自己寫了一個WIN32程序,因為某種原因需要加載一個.NET程序集并執(zhí)行它的功能。你就可以像以上那樣寫。但我們是做遠程線程插入,那么如何在被插入的進程中執(zhí)行上數(shù)代碼呢?高手已經(jīng)明白了。就是將這些代碼編譯成像SHELLCODE一樣的裸的可執(zhí)行代碼。然后使用遠程線程插入的代碼插入就可以 CLR環(huán)境加載到其它進程中并使其執(zhí)行我們想要的.NET程序集里的代碼。
如果你已經(jīng)有辦法將上述代碼編譯成裸的可執(zhí)行本機代碼了。你就可以將這些本機代碼作為資源加到你的C#項目中。備用。
在C#中執(zhí)行遠程線程插入和在C++中是一樣的。
網(wǎng)站名稱:C#實現(xiàn)遠程線程插入
標題來源:http://www.5511xx.com/article/dpsjoei.html


咨詢
建站咨詢
