注入專題二:遠(yuǎn)線程注入CreateRemoteThread--論注入的多種方式
01遠(yuǎn)線程注入
?
? ? 今天 咱們來聊聊遠(yuǎn)線程注入,這種注入方式也是最常見 最方便的一種方式,他的原理是通過 使用 API ?CreateRemoteThread 這個(gè)函數(shù)來實(shí)現(xiàn)往某個(gè)程序里面注入一個(gè)線程。成功后 咱們就可以把被注入程序當(dāng)成自己家了。但是也是有缺點(diǎn)的,有可能檢測(cè)你代碼段的地址位置,你是自己獨(dú)立啟動(dòng)的線程,和正常走的流程肯定是不一樣的。
02實(shí)現(xiàn)代碼
HANDLE
WINAPI
CreateRemoteThread(
? ? _In_ HANDLE hProcess,
? ? _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
? ? _In_ SIZE_T dwStackSize,
? ? _In_ LPTHREAD_START_ROUTINE lpStartAddress,
? ? _In_opt_ LPVOID lpParameter,
? ? _In_ DWORD dwCreationFlags,
? ? _Out_opt_ LPDWORD lpThreadId
? ? );
上面是API原型
第一個(gè)參數(shù) 傳入進(jìn)程句柄
第二個(gè)參數(shù) 可以傳入安全描述符的結(jié)構(gòu)體的,所有內(nèi)核對(duì)象的通性,當(dāng)然也可以NULL
第三個(gè)參數(shù) ??臻g大小,可以默認(rèn)0
第四個(gè)參數(shù) 填寫要注入的函數(shù)地址
第五個(gè)參數(shù) 函數(shù)的參數(shù)
第六個(gè)參數(shù) 標(biāo)志位相關(guān)
第七個(gè)參數(shù) 線程ID
說到底 注入其實(shí)就是這個(gè)API 調(diào)用一下就實(shí)現(xiàn)了,但是大家可以先去思考一個(gè)問題 :我們是在A程序里面 寫CreateRemoteThread函數(shù)的,那我們填寫的函數(shù)地址和參數(shù)都是A程序里面的。 但是創(chuàng)建線程之后呢?
這個(gè)線程是要在B程序里面執(zhí)行的。B程序 怎么能夠獲取到A空間地址里面的函數(shù)地址和內(nèi)容呢?
解決了這個(gè)問題 遠(yuǎn)線程注入 這個(gè)事情就算是搞定了!??!

1 進(jìn)程句柄 沒啥好說的把。。??梢杂肙penProcess獲取 窗口類目 標(biāo)題 句柄啥的 各種方式都可以獲取到
2.VirtualAllocEx 這個(gè)函數(shù)是在目標(biāo)程序里面申請(qǐng)一段內(nèi)存空間,然后用WriteProcessMemory寫入 目的是為了存放咱們遠(yuǎn)線程的參數(shù)的 也就是為了存放我們要注入的是哪個(gè)DLL呀
3.我們啟動(dòng)的這個(gè)線程的函數(shù)地址就是Loadlibrary ,這個(gè)函數(shù)就是加載DLL 并且運(yùn)行他,他是在kernel32.dll里面的,所以所有的程序都是有他的函數(shù)地址的
4 用完記得還原釋放?
這也是最輕松的方式了
核心代碼也就這么些行 理解有問題的話可以來找我要源碼或者和我探討
公眾號(hào):微塵網(wǎng)絡(luò)安全
專注分享網(wǎng)絡(luò)安全 x64 c++ 逆向 反匯編 反調(diào)試 HOOK 注入 封包 內(nèi)存等技術(shù)
感興趣的人多我會(huì)繼續(xù)更新此系列,把每種注入方式都講一遍 并且附上源碼