1.使用程序pid開啟程序,獲得控制代碼
2.使用程序控制代碼申請記憶體空間
3.把dll路徑寫入記憶體
4.建立遠端執行緒,呼叫loadlibrary
5.釋放收尾工作或者解除安裝dll
**實現:
bool cinjectdlg::
zwcreatethreadexinjectdll
(dword dwprocessid,
char
* pszdllfilename)
else
//在注入的程序中申請記憶體
dwsize =
strlen
(pszdllfilename)+1
;//分配空間,儲存dll
//使用程序控制代碼申請記憶體空間
pdlladdr =
virtualallocex
(hprocess,
null
, dwsize, mem_commit, page_readwrite);if
(pdlladdr ==
null
)else
//向申請的記憶體中寫入資料
//把dll路徑寫入記憶體
bool bissucess =
writeprocessmemory
(hprocess, pdlladdr, pszdllfilename, dwsize,
null);
if(bissucess == false)
else
//獲得
//載入ntdll.dll
hmodule hntdll =
loadlibrarya
("ntdll.dll");
if(hntdll ==
null
)else
//獲取loadlibrarya函式位址
建立遠端執行緒,呼叫loadlibrary
pfunprocaddr =
getprocaddress
(getmodulehandlea
("kernel32.dll"),
"loadlibrarya");
if(pfunprocaddr ==
null
)else
//獲取zwcreatethread函式位址 zwcreatethread在64位和32位下的函式宣告不一樣
#ifdef _win64
typedef
dword
(winapi *typedef_zwcreatethreadex)
( phandle threadhandle,
access_mask desiredaccess,
lpvoid objectattributes,
handle processhandle,
lpthread_start_routine lpstartaddress,
lpvoid lpparameter,
ulong createthreadflags,
size_t zerobits,
size_t stacksize,
size_t maximumstacksize,
lpvoid punkown)
;#else
typedef
dword
(winapi *typedef_zwcreatethreadex)
( phandle threadhandle,
//執行緒控制代碼
access_mask desiredaccess,
lpvoid objectattributes,
handle processhandle,
//程序控制代碼
lpthread_start_routine lpstartaddress,
lpvoid lpparameter,
bool createsuspended,
dword dwstacksize,
dword dw1,
dword dw2,
lpvoid punkown)
;#endif
typedef_zwcreatethreadex zwcreatethreadex =
(typedef_zwcreatethreadex)
getprocaddress
(hntdll,
"zwcreatethreadex");
if(zwcreatethreadex ==
null
)else
//使用zwcreatethreadex函式建立遠端執行緒 實現dll注入
dwstatus =
zwcreatethreadex
(&hremotethread,
thread_all_access,
null
, hprocess,
(lpthread_start_routine)pfunprocaddr,
pdlladdr,0,
0,0,
0,null);
if(hremotethread ==
null
)else
//關閉控制代碼
closehandle
(hprocess)
;freelibrary
(hntdll)
;return true;
}
執行緒遠端注入
執行緒遠端注入的技術並不複雜,主要用到createremotethread這個api。難點有個地方,由於要注入其他程序的空間,因此,注入用的那個執行緒中的 必須使用和被注入程序的記憶體空間一致。換句話講,就是需要找到執行緒中使用的函式在遠端程序中的位址。明白這個,問題就沒有了。下面是乙個完整的執行緒...
遠端執行緒注入
本文記錄了最普通的一種dll注入方式 遠端執行緒注入,以便日後複習用。首先準備乙個要注入的dll 步驟略 準備乙個32位程式,本文使用掃雷。將掃雷和dll放在同一目錄,執行掃雷。然後編寫程式,將dll載入到掃雷的記憶體中。多位元組字符集 include include bool enabledebu...
遠端執行緒注入
dll程式 1 獲取程序控制代碼 2 計算dll路徑名長度,並且要加上0結尾的長度 3 在目標程序分配記憶體 4 拷貝dll路徑名到目標程序的記憶體 5 獲取模組位址 6 獲取loadlibrarya函式位址 7 建立遠端執行緒,載入dll 8 關閉控制代碼 1 獲取程序控制代碼 獲取程序控制代碼 ...