注入系列 遠端執行緒注入

2021-10-04 08:05:03 字數 2711 閱讀 8362

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 獲取程序控制代碼 獲取程序控制代碼 ...