DLL注入和API 攔截

2021-06-19 11:19:30 字數 1517 閱讀 1057

一.登錄檔注入

hkey_local_machine\software\microsoft\windows nt\currentversion\windows

在此值中指定的所有 dll 都被載入的每個基於 windows 的應用程式中。當user32.dll被影射到乙個新的程序的時候,會收到dll_process_attach通知。user32.dl會取得上述登錄檔鍵的值,並呼叫loadlibrary 來載入這個字串中制定的所有dll。只有載入user32.dll的應用程式才會使用到上述的登錄檔來注入dll 。u

我們的dll只會被影射到那些使用了user32.dll的程序中,所有基於gui的應用程式都使用了user32.dll,但大多數cui應用程式沒有使用user32.dll。

二.使用windows掛鉤(hook)注入

呼叫setwindowshookex函式來安裝掛鉤:

ex: hhook hhook = setwindowshookex(wh_getmessage,getmsgproc,hinstdll,0);

第乙個引數表示安裝掛鉤型別:可以參考: 

hook

scope

wh_callwndproc

thread or global

wh_callwndprocret

thread or global

wh_cbt

thread or global

wh_debug

thread or global

wh_foregroundidle

thread or global

wh_getmessage

thread or global

wh_journalplayback

global only

wh_journalrecord

global only

wh_keyboard

thread or global

wh_keyboard_ll

global only

wh_mouse

thread or global

wh_mouse_ll

global only

wh_msgfilter

thread or global

wh_shell

thread or global

wh_sysmsgfilter

global only

第二個引數是乙個函式的位址,第三個引數標示乙個dll,這個dll包含這第二個引數指定的函式,第四個引數為執行緒id。

例:程序pa安裝了掛鉤,當第乙個引數為wh_getmessage,當程序pb中的乙個執行緒準備向乙個視窗傳送訊息會:

系統檢測該程序是否安裝了wh_getmessage掛鉤

系統檢測getmsgproc所在的dll是否被影射到該程序(pb)的位址空間中

如果尚未被影射,那麼系統會強制將該dll影射到該程序(pb)中並將該程序中該dll的鎖計數器遞增

dll注入與API攔截

dll注入 1.登錄檔注入 為所有的程序注入我們自己編寫的dll,然後通過另乙個程序改變訊息接收函式。此種方式由於沒有細粒度的控制,不推薦使用。2.掛鉤注入 通過setwindowhook 函式將訊息型別 處理函式 所在的dllmodule和所要安裝鉤子的執行緒 0代表作業系統內所有的執行緒 g h...

遊戲注入教程(三) Hook攔截系統Api

一 新建乙個用於攔截的mfc的dll,如下 不同instance共享的該變數hinst pragma data seg shared static hinstance hinst null 本dll的例項控制代碼 injectdll.dll pragma data seg pragma commen...

API攔截教程

對於程式設計師來講,api攔截技術是一種重要的基礎技術。這項技能為編寫某些工具軟體提供了可能,並可以大大提高我們對第三方應用程式的控制能力。不過,目前 api 攔截的技術資料往往侷限於原理方面的論述,很少有文章涉及到如何具體地編譯乙個 api 攔截程式。我在尋找相關資料的時候,就走了不少彎路,如果當...