摘要: 1.什么是类型转换函数 类型转换函数的作用是将一个类的对象转换成另一类型的数据。 比如上述的类 如果调用cout输出testclass对象,则编译器会调用operator int()。 testclass A(1,3);cout<<A<<endl; 输出结果为4(编译器VS2010,系统环境WIN7 阅读全文
posted @ 2016-06-23 11:51 银翼的魔术师 阅读(427) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2016-06-03 14:09 银翼的魔术师 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 第一种在系统调用服务表HOOK ZwQuerySystemInformation函数地址 使用InterlockedExchange函数将ZwQuerySystemInformation在内核导出表KeServiceDescriptorTable最终调用位置的函数地址替换为NewZwQuerySys 阅读全文
posted @ 2016-04-07 22:36 银翼的魔术师 阅读(903) 评论(0) 推荐(0) 编辑
摘要: 因工作需要,研究minispy文件过滤框架,上图为我整理出的其内核部分代码的逻辑。 阅读全文
posted @ 2015-11-11 13:43 银翼的魔术师 阅读(539) 评论(0) 推荐(0) 编辑
摘要: WDM驱动是NT驱动的进化版。我个人觉得它的主要好处有两个1.能检测到设备的插入,系统能自动分配设备的硬件信息,如中断号、IO端口、设备物理地址等2.支持设备的开机状态拔出之前的NT驱动和硬件关系如下其实直来直去没什么不好,真的,但是细想有两个问题1.硬件插入以后,要做的麻烦事太多了,首先分配硬件的... 阅读全文
posted @ 2015-07-03 11:31 银翼的魔术师 阅读(513) 评论(0) 推荐(0) 编辑
摘要: 当PC得知有新设备插入时,总线驱动会创建相应的物理驱动PDO,然后提示有新设备插入,这时候调用相应Driver的AddDevice方法创建功能驱动FDO下面是一个典型的AddDevice方法#pragma PAGEDCODENTSTATUS HelloWDMAddDevice(IN PDRIVER_... 阅读全文
posted @ 2015-07-03 11:15 银翼的魔术师 阅读(578) 评论(0) 推荐(0) 编辑
摘要: 1.缓冲区设备读写伪代码:创建设备及指定设备标记 NTSTATUS status; PDEVICE_OBJECT pDevObj; PDEVICE_EXTENSION pDevExt; //创建设备名称 UNICODE_STRING devName; RtlInitUnicodeString(&d... 阅读全文
posted @ 2015-07-02 10:00 银翼的魔术师 阅读(424) 评论(0) 推荐(0) 编辑
摘要: 第一,完成例程里面直接返回STATUS_SUCCESS,这时候IRP已经继续向上回卷,失去了对IRP的控制。第二,完成例程里面返回STATUS_MORE_PROCESSING_REQUIRED,仍具有对IRP的控制,可以选择将IRP重新下发或者继续回卷。 阅读全文
posted @ 2015-07-01 17:27 银翼的魔术师 阅读(333) 评论(0) 推荐(0) 编辑
摘要: #pragma PAGEDCODENTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) { KdPrint(("DriverB:Enter B HelloDD... 阅读全文
posted @ 2015-06-25 16:21 银翼的魔术师 阅读(1127) 评论(0) 推荐(0) 编辑
摘要: 1.通过ZwCreateFile打开其他设备的Handle,此函数只能得到句柄。ZwCreateFile与NtCreateFile区别在于NtCreateFile更加底层,ZwCreateFile是基于NtCreateFile的,但ZwCreateFile需要通过SSDT2.通过IoGetDevic... 阅读全文
posted @ 2015-06-25 15:16 银翼的魔术师 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 首先来说中断计算机的中断分为软中断和硬中断,即IRQL和DIRQL,共32个级别,从0~31级别依次提升,0~2属于软中断一般线程运行于PASSIVE_LEVEL级别,如果不想在运行时切换到其他线程,可以将中端级别提升致DISPATCH_LEVEL,但线程在这个中端级别下运行无法使用分页内存,因为无... 阅读全文
posted @ 2015-06-19 11:01 银翼的魔术师 阅读(913) 评论(0) 推荐(0) 编辑
摘要: HelloWDM例子编译完成之后,在win7下安装显示查看setupapi.dev看到如下信息这个C:\MyDriver_Check目录完全不是我指定的,我放到c盘根目录下查看inf[SourceDisksFiles]HelloWDM.sys = 1,MyDriver_Check,把该字段修改为He... 阅读全文
posted @ 2015-06-05 10:00 银翼的魔术师 阅读(473) 评论(0) 推荐(0) 编辑
摘要: 入口函数,即驱动加载函数NTSTATUSDriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath )/*++Routine Description: Installable dri... 阅读全文
posted @ 2015-05-22 10:38 银翼的魔术师 阅读(989) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2015-05-12 15:52 银翼的魔术师 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 第一种:绑定kbdcalss驱动对象 kbdclass类驱动对象是键盘的最上层的驱动对象,对它的分发函数进行处理,则不用考虑底层的兼容性问题。 思路:首先使用ObReferenceObjectByName函数打开kbdclass驱动对象,然后使用DeviceObject指针和NextDevice... 阅读全文
posted @ 2015-05-04 14:58 银翼的魔术师 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 因为小可并非硬件编程出身,汇编基础又比较差。。。所以刚开始理解利用IOAPIC重定位技术的时候相当困难。何为IOAPIC?首先,必须认识到它是一个硬件,可编程的硬件。我理解的它在整个流程中的作用如图:首先,必须创建一个新的中断项,也就是在IDT表中搜索到一个空闲的项,代码如下P2C_U8 p2cGe... 阅读全文
posted @ 2015-05-04 13:05 银翼的魔术师 阅读(1826) 评论(0) 推荐(0) 编辑
摘要: IDT(中断描述符表)分为IRQ(真正的硬件中断)和软件中断(又叫异常)。HOOK的思路为,替换键盘中断处理的函数地址为自己的函数地址。这样在键盘驱动和过滤驱动之前就可以截获键盘输入。思路确定之后,可以写代码了首先获取到IDT,这个需要使用汇编指令sidt来获取,这个指令读取了IDTR寄存器的内容,... 阅读全文
posted @ 2015-04-28 17:36 银翼的魔术师 阅读(1379) 评论(0) 推荐(0) 编辑
摘要: 同样也是寒江独钓的例子,但只给了思路,现贴出实现代码原理是通过改变端口驱动中本该调用类驱动回调函数的地方下手//替换分发函数 来实现过滤#include #include #include #include // Kbdclass驱动的名字#define KBD_DRIVER_NAME L"\\... 阅读全文
posted @ 2015-04-24 15:22 银翼的魔术师 阅读(1799) 评论(0) 推荐(0) 编辑
摘要: 最近在阅读《寒江独钓_Windows内核安全编程》一书的过程中,发现修改类驱动分发函数这一技术点,书中只给出了具体思路和部分代码,没有完整的例子。按照作者的思路和代码,将例子补充完整,发现将驱动安装在WIN7 32位环境下,键盘失效。经调试发现,可能的原因是替换了\\Driver\\Kbdclass... 阅读全文
posted @ 2015-04-24 10:42 银翼的魔术师 阅读(723) 评论(0) 推荐(0) 编辑
摘要: 具体错误见截图刚开始以为是DNS配置错误,经检查发现DNS与物理机的DNS配置是一样的,物理机可以解析DNS搜索资料发现是/etc/nsswitch.conf这个文件的问题这个文件hosts标签设置的是host:fileshost:files表示只用/etc/hosts文件解析主机修改成hosts:... 阅读全文
posted @ 2014-11-05 12:06 银翼的魔术师 阅读(186) 评论(0) 推荐(0) 编辑