白帽黑客系列教程之Windows驱动开发(64位环境)入门教程(六)

为什么要写这篇文章呢?

作为一名白帽黑客,如果想要学习ROOTKIT攻防技术,就必须要有能力进行驱动开发!

本文章仅提供学习,切勿将其用于不法手段!

在Windows操作系统的64位环境中,进行ROOTKIT攻防,就必须要学会Windows驱动开发!

Windows驱动开发,是掌握Rootkit技术的硬性基础之一!

不会Windows环境下的驱动开发,你就难以透彻理解ROOTKIT攻防技术的真相!

接上一篇文章,我们主要来讲解一下,KMDF项目开发中的一些代码内容编写!

接下来,我们来讲解下,相应的头文件(trace.h)中的代码内容  ^ _ ^  请看下文!

/*++

Module Name:  模块名称(通常是文件名)

    Trace.h   用于内核模式驱动程序调试跟踪(Tracing)的头文件

Abstract:     文件的抽象描述(概括文件的主要内容)

    Header file for the debug tracing related function defintions and macros.  这是一个调试跟踪相关函数定义和宏的头文件

Environment:  开发环境或运行环境

    Kernel mode  内核模式(表明 Trace.h 这个头文件中的定义,主要用于进行内核驱动程序的调试跟踪)

--*/

//
// Define the tracing flags. 跟踪GUID的定义
//
// Tracing GUID - ********-****-****-****-************  WPP使用GUID来区分不同的跟踪提供者(Trace Provider)(GUID: ********-****-****-****-************ ,这个GUID 用于唯一标识一个跟踪会话)
//
// WPP_DEFINE_CONTROL_GUID 定义了一个跟踪控制GUID
// WPP_DEFINE_BIT 定义了多个跟踪标志位(Flags),用于区分不同类型的跟踪信息:
//                                                                            MYDRIVER_ALL_INFO(所有信息);
//                                                                            TRACE_DRIVER(驱动程序相关的跟踪信息);
//                                                                            TRACE_DEVICE(设备相关的跟踪信息);
//                                                                            TRACE_QUEUE(队列相关的跟踪信息)

#define WPP_CONTROL_GUIDS                                              \
    WPP_DEFINE_CONTROL_GUID(                                           \
        KMDFDriver1TraceGuid, (********,****,****,****,************), \
                                                                            \
        WPP_DEFINE_BIT(MYDRIVER_ALL_INFO)                              \
        WPP_DEFINE_BIT(TRACE_DRIVER)                                   \
        WPP_DEFINE_BIT(TRACE_DEVICE)                                   \
        WPP_DEFINE_BIT(TRACE_QUEUE)                                    \
        )                             

//WPP提供了一些宏来简化跟踪日志的记录和过滤
//用于创建一个与指定标志(flag)和日志级别(level)关联的日志记录器

#define WPP_FLAG_LEVEL_LOGGER(flag, level)                                  \
    WPP_LEVEL_LOGGER(flag)

//用于检查指定的标志和日志级别是否启用了跟踪

#define WPP_FLAG_LEVEL_ENABLED(flag, level)                                 \
    (WPP_LEVEL_ENABLED(flag) &&                                             \
     WPP_CONTROL(WPP_BIT_ ## flag).Level >= level)

//用于创建一个与指定日志级别和标志关联的日志记录器

#define WPP_LEVEL_FLAGS_LOGGER(lvl,flags) \
           WPP_LEVEL_LOGGER(flags)

//用于检查指定的日志级别和标志是否启用了跟踪

#define WPP_LEVEL_FLAGS_ENABLED(lvl, flags) \
           (WPP_LEVEL_ENABLED(flags) && WPP_CONTROL(WPP_BIT_ ## flags).Level >= lvl)

//           
// WPP orders static parameters before dynamic parameters. To support the Trace function
// defined below which sets FLAGS=MYDRIVER_ALL_INFO, a custom macro must be defined to
// reorder the arguments to what the .tpl configuration file expects.
//
//参数重排序宏(WPP要求静态参数需要在动态参数之前,为了支持自定义的跟踪函数,Trace.h 这个头文件中,定义了一些宏,用来进行重新排序参数)
//

#define WPP_RECORDER_FLAGS_LEVEL_ARGS(flags, lvl) WPP_RECORDER_LEVEL_FLAGS_ARGS(lvl, flags)       //用于将标志和日志级别的参数顺序调整为WPP期望的顺序
#define WPP_RECORDER_FLAGS_LEVEL_FILTER(flags, lvl) WPP_RECORDER_LEVEL_FLAGS_FILTER(lvl, flags)   //用于将标志和日志级别的过滤器参数顺序调整为WPP期望的顺序

//
// This comment block is scanned by the trace preprocessor to define our
// Trace function.
//
// begin_wpp config
// 跟踪函数的定义(Trace.h 这个头文件的代码内容的最后部分,定义了两个跟踪函数)
// 
// FUNC Trace{FLAGS=MYDRIVER_ALL_INFO}(LEVEL, MSG, ...); //这是一个通用的跟踪函数,默认使用MYDRIVER_ALL_INFO标志,记录指定级别的日志信息
// FUNC TraceEvents(LEVEL, FLAGS, MSG, ...);             //这是一个更灵活的跟踪函数,允许调用者指定日志级别和标志
// end_wpp
//
//Trace 和 TraceEvents 的函数定义是通过WPP的注释块(begin_wpp config 和 end_wpp)扫描生成的
 

//上面的代码中,涉及到的GUID部分中的 * 号,在不同环境中,是不同的16进制数字,请注意!

我在上面的代码中,增加了相应的注释,有助于学习Windows驱动开发的小白们能够理解每一行代码的用途!毕竟,学习 从 阅读 开始 !嘿嘿

(未完待续)

【适合小白入门】深入掌握Windows操作系统原理,提升程序开发水平,为学习驱动开发,内核安全打下基础。学完本课程可以轻松的理解Windows内核,开阔思路,对没有底层开发基础的人起到有非常好的指导作用。在此基础上可以开发出有趣且功能强大的软件。 课程目录: 第1章windows驱动基础 第一课 认识windows驱动 第二课 在虚拟机里安装windows操作系统 第三课 windows操作系统基本概念 第四课 操作系统的分层结构 第2章windowsw驱动编译环境配置、安装及调试 第五课 安装驱动开发环境课 安装驱动开发环境 第七课 实战:编写驱动程序加载器 第3章驱动程序的基本结构 第八课 复习c语言的指针和数据结构 第九课 windows驱动程序的基本结构 第十课 编程实战-创建设备对象 第4章windows内存管理 第十一课 内存管理操作 第十二课 驱动开发中使用链表 第十三课 驱动开发中使用快查表 第十四课 在驱动中使用c++中内存管理操作-newdelet 第十驱动开发中宏与断言的使用 第5章应用程序驱动程序通信 第二十课 irp与派遣函数 第二十七课 缓冲区读写操作 第十五课 在驱动中使用结构化异常处理 第二十八课 缓冲区读写操作 第二十九课 模拟文件 第三十课 直接方式与其它方式读写操作 第三十一课 io设备控制操作 第三十二课 io设备控制操作 第6章windows内核函数 第十七课 内核模式下的字符串操作1 第十八课 内核模式下的字符串操作 第十九课 内核模式下的字符串操作 第二十课 内核模式下的文件操作 第二十一课 内核模式下的文件操作 第二十二课 内核模式下注册表操作 第二十三课 内核模式下注册表操作 第二十四课 内核模式下注册表操作 第二十五课 内核模式下注册表操作 第7章驱动程序的同步处理 第三十三课 内核模式下的同步与异步操作 第三十四课 用户模式下的同步对象1_事件 第三十五课 用户模式下的同步对象2_线程信号量与互斥体 第三十课 内核模式下的同步对象3_系统线程创建与普 第三十七课 内核模式下的同步对象4_信号量与互斥体 第三十八课 内核模式与用户模式间的同步操作 第三十九课 其它内核同步要素 第8章IRP的同步与异步 第四十课 应用程序的对文件同步与异步操作 第四十一课 irp异步完成 第四十二课 irp的取消与startio函数 第四十三课 自定义startio函数 第9章定时器54分钟3节 第四十四课 io定时器与dpc定时器 第四十五课 内核模式下的等待操作 第四十课 时间函数与irp超时处理 第10章驱动程序调用驱动程序1小时3节 第四十七课 通过设备句柄调用驱动程序 第四十八课 设备指针调用驱动程序 第四十九课 自定义irp与ObReferenceObject 第11章分层过滤驱动 第五十课 分层驱动:枚举设备栈上的设备对象 第五十一课 编写过滤驱动程序 第五十二课 irp完成函数 第12章驱动程序开发高级技能 第五十三课 驱动程序的兼容性 第五十五课 驱动调试之windbg与vmware 第五十驱动调试vs vmware 第五十四课 驱动签名证书原理及制作 第五十七课 驱动调试神器virtualkd 第五十八课 汇编语言编写驱动环境搭建 第五十九课 用汇编语言开发32与64驱动程序
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值