- 2024-09-19派遣函数 - 缓冲区设备模拟文件读写
我们已经明白了缓冲区方式的读写操作,下面根据这部分知识,来编写一个虚拟设备。这个设备来模拟一个文件,可以将这个设备想象成一个普通文件,可以进行读写作。另外,每次写这个文件,文件的长度会增加,可以利用GetFileSize函数(API函数)得到该文件的长度。
- 2024-05-16逆向 | 驱动IRP通信模板
逆向|驱动IRP通信模板踩了很多坑,比如说IoCreateDevice以后要删除,符号链接也要在卸载的时候删除啥的。反正存个模板在这儿下次就能套了:#include<ntddk.h>#include<stdio.h>#include<stdlib.h>//0-2047是保留的,可以用2048-4095#defineOPER1CTL_CODE(FILE_DEVICE_UN
- 2023-12-245.10 Windows驱动开发:摘除InlineHook内核钩子
在笔者上一篇文章《内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一个非常明
- 2023-12-085.10 Windows驱动开发:摘除InlineHook内核钩子
在笔者上一篇文章《内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一个非常明
- 2023-12-04Windows驱动中使用数字签名验证控制设备访问权限
1.背景 在一般的驱动开发时,创建了符号链接后在应用层就可以访问打开我们的设备并进行通讯。 但我们有时候不希望非自己的进程访问我们的设备并进行交互,虽然可以使用IoCreateDeviceSecure来创建有安全描述符的设备,但大数的用户账户为了方便都是管理员,因此该方法不太完整
- 2023-10-07KdMapper扩展实现之Dell(pcdsrvc_x64.pkms)
1.背景 KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称pcdsrvc_x64.pkms 时间戳5
- 2023-07-06驱动开发:通过应用堆实现多次通信
在前面的文章《驱动开发:运用MDL映射实现多次通信》LyShark教大家使用MDL的方式灵活的实现了内核态多次输出结构体的效果,但是此种方法并不推荐大家使用原因很简单首先内核空间比较宝贵,其次内核里面不能分配太大且每次传出的结构体最大不能超过1024个,而最终这些内存由于无法得到更好
- 2023-07-06驱动开发:摘除InlineHook内核钩子
在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一
- 2023-06-24驱动开发:摘除InlineHook内核钩子
在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一
- 2023-06-24驱动开发:摘除InlineHook内核钩子
在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一
- 2023-05-19驱动开发:通过应用堆实现多次通信
在前面的文章《驱动开发:运用MDL映射实现多次通信》LyShark教大家使用MDL的方式灵活的实现了内核态多次输出结构体的效果,但是此种方法并不推荐大家使用原因很简单首先内核空间比较宝贵,其次内核里面不能分配太大且每次传出的结构体最大不能超过1024个,而最终这些内存由于无法得到更好
- 2023-04-18驱动保护 -- 读取被保护的数据(第二种方法)
一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内
- 2023-04-18驱动保护 -- 读取被保护的数据(第二种方法)
一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内
- 2023-04-18驱动保护 -- 读取被保护的数据(第二种方法)
一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内
- 2023-04-18驱动保护 -- 读取被保护的数据(第二种方法)
一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内
- 2023-04-18驱动保护 -- 读取被保护的数据(第二种方法)
一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内
- 2023-02-27Windows驱动开发学习记录-IRP取消例程问题
一般设置IRP取消例程很简单,大致代码如下{......IoSetCancelRoutine(pIrp,LogIRPCancelRoutine); pIrp->IoStatus.Status=STATUS_PENDING;returnSTATU
- 2022-10-03驱动开发:应用DeviceIoContro开发模板
内核中执行代码后需要将结果动态显示给应用层的用户,DeviceIoControl是直接发送控制代码到指定的设备驱动程序,使相应的移动设备以执行相应的操作的函数,如下代码是一个经典的
- 2022-10-03驱动开发:应用DeviceIoContro开发模板
内核中执行代码后需要将结果动态显示给应用层的用户,DeviceIoControl是直接发送控制代码到指定的设备驱动程序,使相应的移动设备以执行相应的操作的函数,如下代码是一个经典
- 2022-10-03驱动开发:通过Async反向与内核通信
在前几篇文章中给大家具体解释了驱动与应用层之间正向通信的一些经典案例,本章将继续学习驱动通信,不过这次我们学习的是通过运用Async异步模式实现的反向通信,反向通信机制在
- 2022-10-03驱动开发:通过Async反向与内核通信
在前几篇文章中给大家具体解释了驱动与应用层之间正向通信的一些经典案例,本章将继续学习驱动通信,不过这次我们学习的是通过运用Async异步模式实现的反向通信,反向通信机制在
- 2022-10-02驱动开发:通过ReadFile与内核层通信
驱动与应用程序的通信是非常有必要的,内核中执行代码后需要将其动态显示给应用层,但驱动程序与应用层毕竟不在一个地址空间内,为了实现内核与应用层数据交互
- 2022-09-30驱动开发:通过ReadFile与内核层通信
驱动与应用程序的通信是非常有必要的,内核中执行代码后需要将其动态显示给应用层,但驱动程序与应用层毕竟不在一个地址空间内,为了实现内核与应用层数据交互则必须有通信的方
- 2022-09-30驱动开发:通过ReadFile与内核层通信
驱动与应用程序的通信是非常有必要的,内核中执行代码后需要将其动态显示给应用层,但驱动程序与应用层毕竟不在一个地址空间内,为了实现内核与应用层数据交互则必须有通信的方法