Windows驱动编程
Kiopler
这个作者很懒,什么都没留下…
展开
-
DebugView无法显示调试信息问题
从Vista开始,要从DebugView显示调试信息就必须在注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\下添加一个名为Debug Print Filter的项,并在其中添加一个名为DEFAULT的键,值至少为8(为了使第三位置位)。并且要在DebugView中勾选Capture Kernel来捕获内核调试信息。(完)...原创 2022-03-14 14:09:55 · 2703 阅读 · 0 评论 -
[内核安全7]x64过ARK及PatchGuard驱动级Rootkit
主要是还是利用MiProcessLoaderEntry。该方法的优点:1. 过PatchGuard不会蓝屏2. ARK工具无法识别该方法缺点:1. 获取地址比较复杂繁琐2. 驱动不能进行常规卸载一般情况下对MiProcessLoaderEntry进行摘链操作只能过掉用户遍历DriverSection的InLoadOrderList链表进行枚举驱动。但是ARK工具还是会检测出对应驱动。要想让ARK工具检测不出来,只需要摘链后把对应驱动对象内所有内容清零即可。...原创 2021-07-13 18:01:51 · 1679 阅读 · 0 评论 -
[内核编程]枚举内核空间所有驱动模块
1. 通过驱动对象枚举第一种方法是通过驱动对象。驱动对象DRIVER_OBJECT中有一个字段叫DriverSection的指针。该指针实际上指向一个_LDR_DATA_TABLE_ENTRY结构与内核态下枚举进程内的模块一样。驱动模块也是通过该结构中的3条双向循环链条以不同顺序分别串起来。先根据windbg获取对应需要的结构体:typedef struct _PEB_LDR_DATA{ ULONG Length; UCHAR Initialized[4]; PVOID..原创 2021-07-13 17:06:46 · 1294 阅读 · 0 评论 -
[内核编程]枚举进程空间内所有模块
环境: Win7 X64该方法枚举进程空间所有模块是基于进程环境块即PEB结构来实现的。首先查看PEB结构, 该结构中有一个字段为_PEB_LDR_DATA。进入_PEB_LDR_DATA字段查看, 最重要的是名为InLoadOrderModuleList, InMemoryModuleList以及InInitializationOrderModuleList的三条循环链表。这三条循环链表中分别串着本EPROCESS对应的模块链表。其中InLoadOrderModuleLi..原创 2021-07-13 14:13:04 · 1185 阅读 · 1 评论 -
[内核编程]线程操作
1. 线程枚举来介绍几个要用到的内核API:PsLookupThreadByThreadId():NTSTATUS PsLookupThreadByThreadId( IN HANDLE ThreadId, OUT PETHREAD *Thread );通过TID获取对应的ETHREAD结构指针。IoThreadToProcess():PEPROCESS IoThreadToProcess( IN PETHREAD Thread原创 2021-07-13 19:05:57 · 1249 阅读 · 1 评论 -
[内核编程]进程操作
1. 进程枚举首先来介绍2个重要函数:PCHAR PsGetProcessImageFileName(IN PEPROCESS pProcess)这个函数是从内核导出的,声明后可以直接使用作用是可以通过EPROCESS的指针获取对应进程映像名。实际上直接从EPROCESS结构内自己获取也可以。该函数在ntifs.h内有声明,包含后就可以直接使用。作用是通过PID获取对应进程的EPROCESS结构。看一个例子:NTSYSCALLAPI PCHAR PsGetProce.原创 2021-07-12 16:04:19 · 1155 阅读 · 0 评论 -
[内核编程]内核态下的基本文件操作
下面提供文件的复制, 删除以及重命名操作:先说一下内核态下文件复制的主要步骤:1. ZwCreateFile打开原文件2. ZwQueryInformationFile的StandardFileInformation类功能查询原文件大小3. ExAllocatePool分配堆空间4. ZwReadFile读取原文件内容到堆5. ZwCreateFile创建新文件6. ZwWriteFile写入新文件PS: 别忘记释放堆和关闭文件句柄接着说一下文件删除的主要步骤:.原创 2021-07-12 14:27:15 · 896 阅读 · 0 评论 -
内核模式下获取一段包含系统信息的内存
内核空间内有一段特殊的空间,其保存了一些系统重要信息,在x64下位于:x86下位于:这段内存保存有一个结构体, 这里仅列出x64的对应结构体:typedef struct _KUSER_SHARED_DATA { // // Current low 32-bit of tick count and tick count multiplier. // // N.B. The tick count is updated each time the clo.原创 2021-07-12 13:09:49 · 296 阅读 · 0 评论 -
[内核安全6]内核态Rootkit之GDT Hook
1. 导言GDT Hook的原理是通过修改GDT全局描述符表来达到挂钩的目的。GDT表的概念可以看下:IDT Hook整个GDT Hook的原理可以归纳为如下图。2. 代码段区分代码段分为两种: 一致代码段 非一致代码段 数据段属于非一致代码段 首先不管一致还是非一致,同特权级代码段之间互访都是允许的。在者永远不能由高特权级代码段访问低特权级代码段,这是不允许的!因为操作系统不会允许用高特权级来访问不安全的代码。有一种情况例外就是数据段,数据段可以被更高级的原创 2020-12-24 20:28:32 · 516 阅读 · 1 评论 -
[内核安全4]内核态Rootkit之IDT Hook
IDT Hook是通过挂钩中断描述符表的一种Ring0挂钩形式。在保护模式下和实模式下的中断机制是完全不同的。实模式下有256个中断例程以供调用,可以通过对应的中断号来调用。在保护模式下中断机制变得相对复杂了,但更好用。保护模式下中断由对应的门描述符来描述,其中有三种格式,分别为:任务门描述符 中断门描述符 陷阱门描述符任务门描述符一般用于不同特权级的非一致代码段间跳转。和IDT HOOK没有什么关系,因为IDT HOOK是通过挂钩中断门比如希望低特权级代码段跳转至高特权级的代码段运行就一般需原创 2020-12-19 16:31:48 · 601 阅读 · 1 评论 -
[内核安全3]内核态Rootkit之Object Hook
Object Hook是通过挂钩OBJECT_HEADER其中一些字段来实现的。在Windows中通过对象管理器来管理所有对象,可以使用WinObj来观察一下WinXP SP3下的对象类型:Windows中包含三种对象:执行体对象 内核对象 GDI/User对象这里我们挂钩的就是执行体对象。这里实验机器是WinXP SP3, 首先来看一下进程对象的数据结构:然后随便找一个进程对象,寻找他的对象结构体,比如之前打开的WinObj进程,通过!object命令查找到了其进原创 2020-12-18 21:13:26 · 536 阅读 · 1 评论 -
[内核安全2]内核态Rootkit之SSDT Hook
/*++* @Description* 主逻辑控制函数* @Param* @Return* @Attention--*/void Running();/*++* @Description* 不接收换行的从标准输入内收到键入,是一个安全函数* * @Param* lpszBuf: 接受键盘输入的缓冲区* uiSizeOfBuf: 描述lpszBuf的大小* * @Return* 返回状态码* * @Attention--*/NTSTATUSkgets(OUT.原创 2020-12-06 20:49:18 · 638 阅读 · 0 评论 -
[内核安全1]串口的过滤
串口的过滤是通过编写一个过滤驱动, 将其加载到计算机上,通过附着到所有串口设备的驱动上来实现对串口设备通信的监控。由于Windows上的串口设备名都是形如:\\Device\\Serial1\\Device\\Serial2\\Device\\Serial3....\\Device\\SerialN所以可以通过枚举所有的串口设备名来把新的过滤驱动附着到上面。先来看一下下面的代码:PDEVICE_OBJECT ccpOpenCom(ULONG id, NTSTATUS *status)原创 2020-10-21 05:22:12 · 631 阅读 · 0 评论 -
Windows XP 32位环境下VC++6.0 + DDK驱动开发环境配置
在《windows驱动开发技术详解》中作者提供了两种调式内核程序的方法,有两种编译驱动的办法,一种是用DDK环境来编译,需要在源代码所在目录下创建两个文件makefile和Sources,另一种为vc搭配DDK使用,但不需要写makefile和source文件,第一种 DDK环境来编译 写好文件,在开始菜单中选择“Windows XP Checked Build Environm...转载 2019-06-21 19:49:36 · 587 阅读 · 0 评论 -
寒江独钓Windows内核编程-双机调试1
今天总结一下关于双机调试,前面一直使用的是DDK包进行NT式与WDM式驱动入门,至今已进入使用WDK包进行编程了,DDK包早已落后我只作为入门因为大体内容变化不大。我使用的书是《寒江独钓Windows内核安全编程》,这个系列将围绕三本书进行,一本就是刚刚所提到的,还有两本分别为《天数夜读从汇编语言到Windows内核编程》和《Windows内核安全与驱动开发》。首先来总结一下双机调试,驱动程序...原创 2019-07-16 18:30:49 · 609 阅读 · 0 评论 -
驱动开发中关于RtlStringCchPrintfW无法解析的外部符号问题
今天在看串口的过滤的时候发现的问题,报错如下:产生这个问题的原因是找不到导入库文件无法找到对应的符号表,由于驱动开发无法使用#pragma comment(lib,)的语法,所以解决方法是修改SOURCES文件:之后在执行:(完)...原创 2019-07-21 10:21:19 · 527 阅读 · 0 评论 -
Windows XP 32位环境下VS2008+DDKXP驱动开发环境配置
要想开发驱动程序,首先得搭建开发环境。 软件环境:Windows XP、VC2008、DDK2.1、DriverStudio 3.2一、安装VC2008,这个没有难度,相信大家都能解决,这里不再多说。二、 安装 DD...转载 2019-06-21 19:43:47 · 559 阅读 · 0 评论