DLL注入和API 攔截

一.註冊表注入

AppInit_DLLs值在以下註冊表項中找到:

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中的一個線程準備向一個窗口發送消息會:

  1. 系統檢測該進程是否安裝了WH_GETMESSAGE掛鉤
  2. 系統檢測GetMsgProc所在的DLL是否被影射到該進程(pb)的地址空間中
  3. 如果尚未被影射,那麼系統會強制將該DLL影射到該進程(pb)中並將該進程中該DLL的鎖計數器遞增



發佈了18 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章