注入專題二:遠(yuǎn)線程注入CreateRemoteThread--論注入的多種方式

01

遠(yuǎn)線程注入


? ? 今天 咱們來聊聊遠(yuǎn)線程注入,這種注入方式也是最常見 最方便的一種方式,他的原理是通過 使用 API ?CreateRemoteThread 這個函數(shù)來實(shí)現(xiàn)往某個程序里面注入一個線程。成功后 咱們就可以把被注入程序當(dāng)成自己家了。但是也是有缺點(diǎn)的,有可能檢測你代碼段的地址位置,你是自己獨(dú)立啟動的線程,和正常走的流程肯定是不一樣的。

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原型

第一個參數(shù) 傳入進(jìn)程句柄

第二個參數(shù) 可以傳入安全描述符的結(jié)構(gòu)體的,所有內(nèi)核對象的通性,當(dāng)然也可以NULL

第三個參數(shù) 棧空間大小,可以默認(rèn)0

第四個參數(shù) 填寫要注入的函數(shù)地址

第五個參數(shù) 函數(shù)的參數(shù)

第六個參數(shù) 標(biāo)志位相關(guān)

第七個參數(shù) 線程ID

說到底 注入其實(shí)就是這個API 調(diào)用一下就實(shí)現(xiàn)了,但是大家可以先去思考一個問題 :我們是在A程序里面 寫CreateRemoteThread函數(shù)的,那我們填寫的函數(shù)地址和參數(shù)都是A程序里面的。 但是創(chuàng)建線程之后呢?

這個線程是要在B程序里面執(zhí)行的。B程序 怎么能夠獲取到A空間地址里面的函數(shù)地址和內(nèi)容呢?

解決了這個問題 遠(yuǎn)線程注入 這個事情就算是搞定了?。。?/p>

1 進(jìn)程句柄 沒啥好說的把。。??梢杂肙penProcess獲取 窗口類目 標(biāo)題 句柄啥的 各種方式都可以獲取到

2.VirtualAllocEx 這個函數(shù)是在目標(biāo)程序里面申請一段內(nèi)存空間,然后用WriteProcessMemory寫入 目的是為了存放咱們遠(yuǎn)線程的參數(shù)的 也就是為了存放我們要注入的是哪個DLL呀

3.我們啟動的這個線程的函數(shù)地址就是Loadlibrary ,這個函數(shù)就是加載DLL 并且運(yùn)行他,他是在kernel32.dll里面的,所以所有的程序都是有他的函數(shù)地址的

4 用完記得還原釋放?

這也是最輕松的方式了

核心代碼也就這么些行 理解有問題的話可以來找我要源碼或者和我探討

公眾號? 微塵網(wǎng)絡(luò)安全

專注分享網(wǎng)絡(luò)安全 x64 c++ 逆向 反匯編 反調(diào)試 HOOK 注入 封包 內(nèi)存等技術(shù)


感興趣的人多我會繼續(xù)更新此系列,把每種注入方式都講一遍 并且附上源碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容