防止全域性鉤子的侵入

2021-04-15 11:31:08 字數 1389 閱讀 4869

windows訊息鉤子一般都很熟悉了。它的用處很多,耳熟能詳的就有――利用鍵盤鉤子獲取目標程序的鍵盤輸入,從而獲得各類密碼以達到不可告人的目的。朋友想讓他的軟體不被別人的全域性鉤子監視,有沒有辦法實現呢?答案是肯定的,不過缺陷也是有的。

首先簡單看看全域性鉤子如何注入別的程序。

訊息鉤子是由win32子系統提供,其核心部分通過ntusersetwindowshookex為使用者提供了設定訊息鉤子的系統服務,使用者通過它註冊全域性鉤子。當系統獲取某些事件,比如使用者按鍵,鍵盤driver將掃瞄碼等傳入win32k的keyevent處理函式,處理函式判斷有無相應hook,有則callhook。此時,系統取得hook物件資訊,若目標程序沒有裝載對應的dll,則裝載之(利用keusermodecallback「呼叫」使用者例程,它與apc呼叫不同,它是仿製中斷返回環境,其呼叫是「立即」性質的)。

進入使用者態的kiusercallbackdispatcher後,kiusercallbackdispatcher根據傳遞的資料獲取所需呼叫的函式、引數等,隨後呼叫。針對上面的例子,為裝載hook dll,得到呼叫的是loadlibraryexw,隨後進入ldrloaddll,裝載完畢後返回,後面的步驟就不敘述了。

從上面的討論我們可以得出乙個最簡單的防侵入方案:在載入hook dll之前hook相應api使得載入失敗,不過有乙個缺陷:系統並不會因為一次的失敗而放棄,每次有訊息產生欲call hook時系統都會試圖在你的程序載入dll,這對於效能有些微影響,不過應該感覺不到。剩下乙個問題就是不是所有的loadlibraryexw都應攔截,這個容易解決,比如判斷返回位址。下面給出乙個例子片斷,可以新增一些判斷使得某些允許載入的hook dll被載入。

這裡hook api使用了微軟的detours庫,可自行修改。

以下內容為程式**:

防止全域性鉤子的侵入

防止全域性鉤子的侵入 windows訊息鉤子一般都很熟悉了。它的用處很多,耳熟能詳的就有 利用鍵盤鉤子獲取目標程序的鍵盤輸入,從而獲得各類密碼以達到不可告人的目的。朋友想讓他的軟體不被別人的全域性鉤子監視,有沒有辦法實現呢?答案是肯定的,不過缺陷也是有的。首先簡單看看全域性鉤子如何注入別的程序。訊息...

轉載 防止全域性鉤子的侵入

windows訊息鉤子一般都很熟悉了。它的用處很多,耳熟能詳的就有 利用鍵盤鉤子獲取目標程序的鍵盤輸入,從而獲得各類密碼以達到不可告人的目的。朋友想讓他的軟體不被別人的全域性鉤子監視,有沒有辦法實現呢?答案是肯定的,不過缺陷也是有的 首先簡單看看全域性鉤子如何注入別的程序。訊息鉤子是由win32子系...

指令碼侵入概述和防止指令碼侵入

從瀏覽器的角度來看,網頁只是乙個長字串。瀏覽器會按順序處理這個字串,在此過程中,會顯示某些字元,同時按特殊規則解釋其他字元 如和 如果惡意使用者可以將某些特殊字元插入到頁中,則瀏覽器將不知道這些字元不應該處於該位置,將作為頁的一部分處理它們。4 當第二個使用者的瀏覽器顯示此頁時,它將遇到 塊並執行它...