注入專題一:鉤子注入SetWindowsHookEx--論注入的多種方式
01DLL注入方式
?
?外掛的注入方式有很多種,針對(duì)不同場(chǎng)景需求使用不同方式,咱們就來搞個(gè)專題 探討下。dll一旦成功注入進(jìn)目標(biāo)進(jìn)程,就可以隨意讀寫 目標(biāo)進(jìn)程的內(nèi)存(比如讀取血量或者修改某些值或者地址從而實(shí)現(xiàn)某些變態(tài)功能或者HOOK)還可以調(diào)用call 注入自己的代碼等等 。消息鉤子、遠(yuǎn)程進(jìn)程注入、入口點(diǎn)注入等等。注入方式可謂十幾種,大家感興趣的話支持一下。下此繼續(xù)更新此系列
02鉤子注入
?今天我們講的是鉤子注入,算是比較簡(jiǎn)單的一種了。但是網(wǎng)上看了一遍 都有很多錯(cuò)誤的寫法 而且基本都是全局的鉤子,咱們今天重點(diǎn)來講下針對(duì)目標(biāo)進(jìn)程的鉤子注入,很多外掛也是用這種方式來做界面控制臺(tái)的收費(fèi)端的
首先我們來看下SetWindowsHookExA這個(gè) api
HHOOK SetWindowsHookExA( ?[in] int ? ? ? idHook, ?[in] HOOKPROC ?lpfn, ?[in] HINSTANCE hmod, ?[in] DWORD ? ? dwThreadId );
參數(shù)1: 表示你要HOOK的消息類型 是鍵盤還是鼠標(biāo) 還是其他的
參數(shù)2:HOOK的消息回調(diào)函數(shù)
參數(shù)3:目標(biāo)的句柄
參數(shù)4:目標(biāo)的線程ID
了解了API后 我們來思考幾個(gè)問題:
1鉤子注入的流程
2參數(shù)2的 消息回調(diào)函數(shù)是哪個(gè)進(jìn)程的,是不是應(yīng)該是目標(biāo)進(jìn)程的消息回調(diào),總不能是咱們注入程序的把
3既然是目標(biāo)程序的,我們?nèi)绾潍@取他的消息回調(diào)函數(shù)
以上三個(gè)問題解決了,咱們就可以實(shí)現(xiàn)局部鉤子注入了
03鉤子注入流程
鉤子注入流程是這樣的:
1 在要被注入的dll 里面寫好消息回調(diào)函數(shù)

并且寫個(gè)導(dǎo)出函數(shù)


2注入程序:用loadlibrary() 加載一次 要被注入的dll 從而獲取到模塊句柄

GetProcAddress可以獲取到導(dǎo)出函數(shù)的地址 這樣就可以取到要被注入的dll 里面的回調(diào)函數(shù)的地址了。
????這樣的方式 咱們就可以在目標(biāo)程序內(nèi)部實(shí)現(xiàn)鍵盤注入 比如按HOME 呼出界面。 而不是全局鉤子了
核心代碼也就這么些行 理解有問題的話可以來找我要源碼或者和我探討
微塵網(wǎng)絡(luò)安全專注分享網(wǎng)絡(luò)安全 x64 c++ 逆向 反匯編 反調(diào)試 HOOK 注入 封包 內(nèi)存等技術(shù)公眾號(hào)
感興趣的人多我會(huì)繼續(xù)更新此系列,把每種注入方式都講一遍 并且附上源碼