DLL注入技術之劫持程序建立注入
阿新 • • 發佈:2019-01-29
劫持程序建立注入原理是利用Windows系統中CreateProcess()這個API建立一個程序,並將第6個引數設為CREATE_SUSPENDED,進而建立一個掛起狀態的程序,利用這個程序狀態進行遠端執行緒注入DLL,然後用ResumeThread()函式恢復程序。
1.建立掛起的程序
下面是建立一個掛起的計算器程式程序的主要程式碼:
2.向掛起的程序中進行遠端執行緒注入DLL
關於遠端執行緒注入在這裡就不重複講述了,但是這裡需要注意一個問題,那就是CreateRemoteThread()中第6個引數,需要設為CREATE_SUSPENDED,主要引數如下:
3.啟用程序中的執行緒
這裡主要用的是ResumeThread()的這個API,需要注意的是先啟用主要執行緒,再啟用注入的執行緒。
劫持程序建立注入其實就是遠端執行緒注入的前期加強版,他可以在程序啟動前進行注入,由於程序的執行緒沒有啟動,這樣就可以躲過待注入程序的檢測,提高的注入的成功率。
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,需要注意的是先啟用主要執行緒,再啟用注入的執行緒。
劫持程序建立注入其實就是遠端執行緒注入的前期加強版,他可以在程序啟動前進行注入,由於程序的執行緒沒有啟動,這樣就可以躲過待注入程序的檢測,提高的注入的成功率。