为什么要写这篇文章呢?
作为一名白帽黑客,如果想要学习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驱动开发的小白们能够理解每一行代码的用途!毕竟,学习 从 阅读 开始 !嘿嘿
(未完待续)