一.登錄檔注入
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 攔截程式。我在尋找相關資料的時候,就走了不少彎路,如果當...