1. 程式人生 > >DLL注入技術之劫持程序建立注入

DLL注入技術之劫持程序建立注入

劫持程序建立注入原理是利用Windows系統中CreateProcess()這個API建立一個程序,並將第6個引數設為CREATE_SUSPENDED,進而建立一個掛起狀態的程序,利用這個程序狀態進行遠端執行緒注入DLL,然後用ResumeThread()函式恢復程序。

1.建立掛起的程序
    下面是建立一個掛起的計算器程式程序的主要程式碼:
  1. STARTUPINFO si = {0};  
  2. si.cb = sizeof si;  
  3. si.dwFlags = STARTF_USESHOWWINDOW;  
  4. si.wShowWindow = SW_SHOW;  
  5. PROCESS_INFORMATION pi;  
  6. TCHAR cmdline[MAXBYTE] =_T("calc.exe");  
  7. BOOL bRet = ::CreateProcess(  
  8.     NULL,  
  9.     cmdline,  
  10.     NULL,  
  11.     NULL,  
  12.     FALSE,  
  13.     CREATE_SUSPENDED, //需要注意的引數
  14.     NULL,  
  15.     NULL,  
  16.     &si,  
  17.     &pi);  

2.向掛起的程序中進行遠端執行緒注入DLL
    關於遠端執行緒注入在這裡就不重複講述了,但是這裡需要注意一個問題,那就是CreateRemoteThread()中第6個引數,需要設為CREATE_SUSPENDED,主要引數如下:
  1. //4. 建立遠端執行緒
  2. m_hInjecthread = ::CreateRemoteThread(hProcess,      //遠端程序控制代碼
  3.     NULL,                                            //安全屬性
  4.     0,                                               //棧大小
  5.     (LPTHREAD_START_ROUTINE)LoadLibrary,             //程序處理函式    
  6.     pszDllName,                                      //傳入引數
  7.     CREATE_SUSPENDED,                                //預設建立後的狀態
  8.     NULL);                                           //執行緒ID

3.啟用程序中的執行緒
    這裡主要用的是ResumeThread()的這個API,需要注意的是先啟用主要執行緒,再啟用注入的執行緒。

    劫持程序建立注入其實就是遠端執行緒注入的前期加強版,他可以在程序啟動前進行注入,由於程序的執行緒沒有啟動,這樣就可以躲過待注入程序的檢測,提高的注入的成功率。