熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#實現遠程線程插入

2013-11-13 09:50:53  來源: .NET編程 

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

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

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

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

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

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

  DWORD __stdcall clrfunclocal()

  {

  ICLRRuntimeHost * pClrHostCorBindToRuntimeEx(NULLNULLCLSID_CLRRuntimeHostIID_ICLRRuntimeHost(PVOID*)&pClrHost)pClrHost>Start()DWORD retVal=hr=pClrHost>ExecuteInDefaultAppDomain(s_asmpath)s_classs_methodNULL&retVal)}以上代碼的最後一句是用於在默認程序域內執行一個NET程序集這段代碼是用C++寫的

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

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

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


From:http://tw.wingwit.com/Article/program/net/201311/11724.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.