轉自:黑客反病毒
劫持進程創建注入原理是利用Windows系統中CreateProcess()這個API創建一個進程,並將第6個參數設爲CREATE_SUSPENDED,進而創建一個掛起狀態的進程,利用這個進程狀態進行遠程線程注入DLL,然後用ResumeThread()函數恢復進程。
1.創建掛起的進程
下面是創建一個掛起的計算器程序進程的主要代碼:
STARTUPINFO si = {0};
si.cb = sizeof si;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
PROCESS_INFORMATION pi;
TCHAR cmdline[MAXBYTE] =_T("calc.exe");
BOOL bRet = ::CreateProcess(
NULL,
cmdline,
NULL,
NULL,
FALSE,
CREATE_SUSPENDED, //需要注意的參數
NULL,
NULL,
&si,
&pi);
2.向掛起的進程中進行遠程線程注入DLL
關於遠程線程注入在這裏就不重複講述了,但是這裏需要注意一個問題,那就是CreateRemoteThread()中第6個參數,需要設爲CREATE_SUSPENDED,主要參數如下:
//4. 創建遠程線程
m_hInjecthread = ::CreateRemoteThread(hProcess, //遠程進程句柄
NULL, //安全屬性
0, //棧大小
(LPTHREAD_START_ROUTINE)LoadLibrary, //進程處理函數
pszDllName, //傳入參數
CREATE_SUSPENDED, //默認創建後的狀態
NULL); //線程ID
3.激活進程中的線程
這裏主要用的是ResumeThread()的這個API,需要注意的是先激活主要線程,再激活注入的線程。
劫持進程創建注入其實就是遠程線程注入的前期加強版,他可以在進程啓動前進行注入,由於進程的線程沒有啓動,這樣就可以躲過待注入進程的檢測,提高的注入的成功率。