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

ops/2025/2/27 0:05:13/

为什么要写这篇文章呢?

作为一名白帽黑客,如果想要学习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驱动开发的小白们能够理解每一行代码的用途!毕竟,学习 从 阅读 开始 !嘿嘿

(未完待续)


http://www.ppmy.cn/ops/161539.html

相关文章

Vue 不同大版本与 Node.js 版本匹配的详细参数

Vue 2.x 与 Node.js 版本匹配: Vue 2.x 细分版本建议 Node.js 版本理由支持状态2.0 - 2.610.x - 14.x这些 Node.js 版本在 Vue 2.x 早期开发和维护阶段广泛使用,能提供稳定运行环境,适配当时常用构建工具和依赖包Node.js 10.x 维护期已结束;…

在单位,领导不说,但自己得懂的7个道理

如果你感到很难继续适应旧模式、旧关系、旧想法,开始厌倦生活,你很可能到了该蜕皮的时候。把“不是自己”的那部分舍弃掉,你就能看见“自己是谁”了。 ——奥赞瓦罗尔,《读者》2024年第11期 前几天听部门里一个新来的小姑娘抱怨&a…

C语言(13)------------>do-while循环

1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…

ubuntu-24.04.1-desktop 中安装 QT6.7

ubuntu-24.04.1-desktop 中安装 QT6.7 1 环境准备1.1 安装 GCC 和必要的开发包:1.2 Xshell 连接 Ubuntu2 安装 Qt 和 Qt Creator:2.1 下载在线安装器2.2 在虚拟机中为文件添加可执行权限2.3 配置镜像地址运行安装器2.4 错误:libxcb-xinerama.so.0: cannot open shared objec…

esp工程报错:something went wrong when trying to build the project esp-idf 一种解决办法

最近上手了正点原子esp32s3板子,环境采用的是vscodeesp-idf插件。导入了正点原子的demo测试,每次都报这个错误无法建造。也不是网上说的ninja error,不是中文路径的问题。 在终端中查看,发现是缺少了git。(我这里没有…

大模型基础概念之神经网络宽度

在大模型中,神经网络宽度是提升模型容量的核心手段之一,与深度、数据规模共同构成性能的三大支柱。合理增加宽度可显著增强模型表达能力,但需结合正则化、硬件优化和结构设计进行平衡。未来趋势可能包括动态宽度调整、稀疏化宽度设计(如MoE)以及更高效宽度-深度复合缩放策…

4. designer建立关于目标检测的简单界面(python)

首先建立的界面效果如下: 以上界面中,检测图1是yolov8模型检测得到的图片显示,检测图2是deeplabv3模型检测处理后得到的图片;下面检测数量是两个模型分别检测到的目标数量(图片中人的个数);右上…

蓝桥杯——按键

一:按键得原理图 二:按键的代码配置 step1 按键原理图对应引脚配置为输入状态 step2 在GPIO中将对应引脚设置为上拉模式 step3 在fun.c中写按键扫描函数 写完后的扫描函数需放在主函数中不断扫描 扫描函数主要通过两个定义变量的值来判断&#xf…