寒江独钓:键盘的过滤 学习笔记

先来名词热身:

一、符号链接:其实就是一个别名。可以用一个不同的名字来代表一个设备对象

二、PDO:是物理设备对象,可以理解为是设备栈最下面的那个设备对象。

函数介绍:

内核中:ZwCreateFile是很重要的函数,不但可以打开文件,还可以打开设备对象。在应用程序中跟它对应的是CreateFile函数..

接下来是记录Windows如何获得按键,然后传递给各个应用程序。

csrss这个进程里有个线程叫win32k!RawInputThread,这个线程总是调用nt!ZwReadFile来读入数据,等待键盘按下。的那个被按下,这个线程就好处理得到的数据,在继续要求读入数据并等待按键。

过程:

① 用传入参数符号链接名赋值OBJECT_attributes
+0x8处的PUNICODE_STRING
ObjectName。win32k!RawInputThread执行到函数win32k!OpenDevice,它的一个参数可找到键盘设备栈的PDO的符号链接名。win32k!OpenDevice有一个OBJECT_ATTRIBUTES结构的局部变量,它自己初始化这个局部变量,用传入参数符号链接名赋值OBJECT_attributes +0x8处的PUNICODE_STRING
ObjectName。

②调用ZwCreateFile返回句柄。win32k!RawInputThread把得到的句柄保存起来,供后面的ReadFile、DeviceIoControl等使用。

③win32k!RawInputThread调用ZwReadFile读取数据。

寒江独钓:键盘的过滤 学习笔记

时间: 2024-10-17 11:58:07

寒江独钓:键盘的过滤 学习笔记的相关文章

寒江独钓--Windows内核安全编程笔记(一)

第一章:内核上级指导 1.如果没有设置DriverUnload函数指针,则一个内核模块一旦被加载就不能卸载了. 2.makefile文件内容永远也不需要改动. 3.设置断点之前系统必须已经中断. 4.驱动加载之前,设置断点不方便,手工断点如下: #if DBG _asm int 3 #endif 如果不是调试状态执行会直接蓝屏,断点弹出之后可以设置新的断点 5.WinDbg为双机调试,Softice可以进行单机调试但已经不再更新,吴岩峰等人开发的Syser也可以进行单机调试,100%国产 第二章

Windows驱动过滤--kdbclass过滤,寒江独钓加强版

寒江独钓键盘过滤,修改了下,过滤QQ密码写入buff,有 回车 或者buff满写入文件,因为irp完成,irp对应的内存快回收,所以用全局缓冲区.开启一个线程写入,开始打算用队例一个一个处理irp的,但是发现那样比较缓慢,只好这样了..创建进程回调代码加几行就行,这里没写,因为代码丢失了,算是个大概的代码吧.给初学的分享下.有错指出,谢谢. 前辈们不要见笑了. struct.h /************************************/ //author:DuanYueming

《寒江独钓_Windows内核安全编程》中修改类驱动分发函数

最近在阅读<寒江独钓_Windows内核安全编程>一书的过程中,发现修改类驱动分发函数这一技术点,书中只给出了具体思路和部分代码,没有完整的例子. 按照作者的思路和代码,将例子补充完整,发现将驱动安装在WIN7 32位环境下,键盘失效. 经调试发现,可能的原因是替换了\\Driver\\Kbdclass类驱动的所有分发函数导致,如果只替换分发IRP_MJ_READ的函数,不会有问题,以下为代码 1 //替换分发函数 来实现过滤 2 #include <wdm.h> 3 #inclu

寒江独钓Windows内核编程——串口过滤

一.过滤的概念: 过滤是在不影响上层和下层接口的情况下,在Windows系统内核中加入新的层,从而不需要修改上层的软件或者下层的真是驱动程序,就加入了新的功能. 1.1 设备绑定的内核API 进行过滤的最主要的方法是对一个设备对象(Device Object)进行绑定.通过编程可以生成一个虚拟设备对象,并“绑定”(Attach)在一个真实的设备上.一旦绑定,则本来操作系统发送给真实设备的请求,就会首先发送到这个虚拟设备. 在WDK中,有多个内核API能实现绑定的功能.以下三个绑定API是从WDK

DataTable数据检索的性能分析(转寒江独钓)

我们知道在.NET平台上有很多种数据存储,检索解决方案-ADO.NET Entity Framework,ASP.NET Dynamic Data,XML, NHibernate,LINQ to SQL 等等,但是由于一些原因,如平台限制,比如说必须基于.NET Framework2.0及以下平台:遗留的或者第三方数据接口采用的就是DataTable等等,仍然需要使用DataTable作为数据存储结构.另一方面DataTable比较容易使用,一些数据访问的接口可能直接采用了DataTable结构

树莓派学习笔记——使用标准PC104键盘

0 前言 本文将详细介绍树莓派的键盘设计.和多数的人的想法不同,世界上存在着各种各样不同的键盘,中国人使用的键盘和美国人使用的键盘相同,而树莓派源产自英国,英国的键盘和美国并不相同.国内多使用标准104键键盘,下面就讲讲如何配置. [相关博文] [树莓派学习笔记--索引博文]--更多博文请关注. 1 PC104标准键盘 [wiki百科]--IBM PC keyboard 所谓PC104标准键盘是指键盘含有104个按键,国内和美国多使用该类型键盘,而欧洲大陆多使用PC105键盘,除了比PC104键

IOS开发学习笔记-(2)键盘控制,键盘类型设置,alert 对话框

一.关闭键盘,放弃第一响应者,处理思路有两种 ① 使用文本框的 Did End on Exit 绑定事件 ② UIControl on Touch 事件 都去操作 sender 的  resignFirstResponder #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *txtUserName; @pro

Dynamic CRM 2013学习笔记(八)过滤查找控件 (类似省市联动)

我们经常要实现类似省市联动一样的功能,常见的就是二个查找控件,一个选择了省后,另一个市的查找控件就自动过滤了,只显示当前省下的市,而不是所有的市.当然这是最简单的,实际工作中还有更复杂的功能要通过过滤查找控件来实现.本文主要介绍基本的查找控件过滤.多表关联的复杂过滤以及子表里实现查找控件的过滤.   一.简单的过滤 先看下需求: 按"Special GL Indicator" 来过滤 Posting 查找控件增加了preSearch事件.它发生在查找控件显示对话框供用户查找记录之前,与

【Unity 3D】学习笔记四十六:输入与控制——键盘事件

在游戏中,玩家控制主角移动,按键攻击,选择行走.都需要在程序中监听玩家的输入.unity为开发者提供了input库,来支持键盘事件,鼠标事件以及触摸事件.本文主要回顾键盘事件,以后会逐文复习鼠标以及触摸事件. 键盘事件 一般的PC键盘有104个不同的按键,在程序中通过监听这些按键事件,从而进一步执行逻辑操作.如:射击游戏中,W表示前进,S表示后退,A表示左移,D表示右移. 按下事件 在脚本中,用input.GetKeyDown( )方法将按键值作为参数,监听此按键是否被按下.按下返回true,否