Windows驅動學習(六)-- FSD鉤子
教程參考自:https://www.bilibili.com/video/av26193169/?p=8
程式碼地址:https://github.com/G4rb3n/Windows-Driver/tree/master/MT_FSDHook
1. 概述
FSD鉤子是一種較實用的過濾方法,對比於上一章的新增鍵盤過濾裝置,這種方法更顯得簡單高效。
2. 驅動編寫
2.1 驅動入口函式
入口函式簡單明瞭,先獲取鍵盤驅動的物件,然後將鍵盤驅動的讀派遣函式替換我們自己的函式,這樣當我們按下一個按鍵時,系統的鍵盤驅動就會呼叫我們的函式來處理按鍵資訊,有種偷樑換柱的感覺。當然,在替換之前別忘了先儲存原函式的指標。
2.2 Hook函式
我們的派遣函式很簡單,僅作演示效果列印一句話,你要加啥過濾監聽的操作的話在這裡加。實現完自己的功能後要呼叫回原始的派遣函式,以實現鍵盤的正常功能。
2.3 解除安裝函式
最後是解除安裝函式,主要功能是把鍵盤驅動的派遣函式還原回來。
3. 驅動測試
只要我們按下一個鍵,就會彈出兩個提示語句,證明我們的Hook函式的確被呼叫了,為什麼是兩個,相比大家也清楚,因為一個是鍵按下的操作,一個是鍵彈起的操作。
使用PCHunter也能看到我們掛的鉤子。
相關推薦
Windows驅動學習(六)-- FSD鉤子
教程參考自:https://www.bilibili.com/video/av26193169/?p=8 程式碼地址:https://github.com/G4rb3n/Windows-Driver/tree/master/MT_FSDHook 1. 概述 FSD鉤子是一種較實用
Linux 網卡驅動學習(六)(應用層、tcp 層、ip 層、設備層和驅動層作用解析)
local acc 每次 letter auto sizeof style article inode 本文將介紹網絡連接建立的過程、收發包流程,以及當中應用層、tcp層、ip層、設備層和驅動層各層發揮的作用。 1、應用層 對於使用socket進行網絡連接的serv
Windows驅動學習(三)-- 殺死程序
1. 概述 我們常常遇到這種棘手的情況,使用工作管理員或一些應用程式無法將某一程序殺死。出現這種現象的原因一般是因為許可權不夠,若我們在驅動層呼叫ZwTerminateProcess來殺死這些程序,那麼成功率將大大增加。 2. 驅動編寫 2.1 初始化變數 2
Windows驅動學習(四)-- 雙機除錯
1. 概述 跟除錯應用層程式不同,驅動不穩定,可能會導致藍屏,所以我們不能在本機除錯。一般的操作是在一個虛擬機器中載入驅動,然後通過串列埠對該虛擬機器的驅動進行除錯。 2. 虛擬機器配置 2.1 開啟除錯選項 以管理員身份執行cmd。 鍵入bcdedit命令
Windows驅動學習(七)-- 核心執行緒
1. 概述 核心開發少不了執行緒的建立呼叫,這章就來實現執行緒的程式設計。 2. 驅動編寫 2.1 驅動入口函式 入口函式沒啥程式碼,就是呼叫CreateThread函式。 2.2 CreateThread函式 CreateThread的主要功能就是建立執行
Windows驅動學習(八)-- 通過InlineHook實現變速齒輪
教程參考自:https://www.bilibili.com/video/av26193169/?p=9 程式碼地址:https://github.com/G4rb3n/Windows-Driver/tree/master/MT_InlineHook 1. 概述 之前的章節我們介
Linux 網卡驅動學習(二)(網絡驅動接口小結)
-a key 頻率 網絡 上網 ren 網絡設備 ews 入口 【摘要】前文我們分析了一個虛擬硬件的網絡驅動樣例。從中我們看到了網絡設備的一些接口。事實上網絡設備驅動和塊設備驅動的功能比較相似,都是發送和接收數據包(數據請求)。當然它們實際是有非常多不同
java學習(六)面向對象 final關鍵字
hello int java學習 xtend 最終 .sh 方法 div ext 1.被fnial修飾的方法不能被重寫,常見的為修飾類,方法,變量 /* final可以修飾類,方法,變量 特點: final可以修飾類,該類不能被繼
線程學習--(六)單例和多線程、ThreadLocal
pen single cal final ride args ash public 線程 一、ThreadLocal 使用wait/notify方式實現的線程安全,性能將受到很大影響。解決方案是用空間換時間,不用鎖也能實現線程安全。 來看一個小例子,在線程內的set、get
RabbitMQ學習(六):遠程結果調用
cells actor ble 隨機 get getenv all 求和 int 場景:我們需要在傳輸消息時得到結果 客服端在發送請求時會發送回調隊列,服務端處理事情完成後會將結果返回到回調隊列中,在增加關聯標誌關聯每個請求和服務返回 客戶端代碼: public
Django學習(六)---博客文章頁面的超鏈接設置
_id 三個參數 name app dex pla django (六) pat Django中的超鏈接 超鏈接的目標地址 href後面是目標地址 template中可以用 {% url ‘app_name : url_name’ param %} app_name:
別樣JAVA學習(六)繼承下(2.3)異常下
關閉 exit dsm 練習 方便 pub xtend 運行 script 1、RuntimeException Exception中有一個特殊的子類異常RuntimeException執行時異常。 假設在函數內容拋出該異常,函數上能夠不用聲明。編譯一樣
python學習(六)---文件操作
not game seek read 終端設備 fas uic med ear 文件操作文件操作流程 1、打開文件,得到文件句柄並賦值給一個變量 2、通過句柄對文件進行操作 3、關閉文件現有文件如下: Somehow, it seems the love I knew
linux學習(六)絕對路徑、相對路徑、cd、mkdir、rmdir、rm
director shell script local mkdir -p create deb blog 目錄 一、絕對路徑 就是從根開始的,如:/root、/usr/local。 二、相對路徑 相對於當前路徑的,比如我們在當前路徑下建立了一個a.txt。 [root@i
webpack學習(六)打包壓縮js和css
網頁 com 換行符 最小化 合並 標準 註意 resolve hash 打包壓縮js與css 由於webpack本身集成了UglifyJS插件(webpack.optimize.UglifyJsPlugin)來完成對JS與CSS的壓縮混淆,無需引用額外的插件, 其命令we
Docker學習(六): 網絡使用與配置
sock AR -i 回顧 覆蓋 htm 參考 ble dock 特別聲明: 博文主要是學習過程中的知識整理,以便之後的查閱回顧。部分內容來源於網絡(如有摘錄未標註請指出)。內容如有差錯,也歡迎指正! =============系列文章============= 1
modSecurity規則學習(六)——檢測模式
debug move 都是 action pattern denied 復雜 不用 rup 傳統檢測模式-自主規則 傳統檢測模式所有規則都是“閉環”的模式。就像HTTP本身一樣,單獨的規則是無狀態的。這意味著規則之間不共享信息,每個規則都沒有關於任何先前規則匹配的信息。它僅
FFMpeg學習(六) 用libavfilter對視頻尺寸進行裁切
example doc 分享 col 參數 tails 環境 坐標 通過 在ffmpeg框架中,濾鏡(filter)功能通過libavfilter庫實現。 一個filter可以同時有多個輸入和輸出。以圖為例: 圖中的一系列操作共使用了四個filter,分
【JMeter4.0學習(六)】之邏輯控制器說明
style var pan cond png 是否 AD lse sample 簡述一些遇到問題的。 一、如果控制器 Interpret Condition as Variable Expression?:選中這一項時表示:判斷變量值是否等於字符串true
C++學習(六)之 輸出
分享 2.3 span pri hello 2.4 小數位 bubuko 整型 輸出學習時的筆記(其實也沒什麽用,留著給自己看的) printf 用於輸出內容 控制臺黑窗口printf("要輸出的內容"); //可以是任意內容-->如果要輸出變量 1、格式占