遍历内核驱动模块

本文介绍了如何遍历Windows内核的PsLoadedModuleList链表以获取所有驱动模块信息,详细解析了DRIVER_OBJECT和KLDR_DATA_TABLE_ENTRY结构,并展示了如何通过修改链表隐藏驱动。还提及了隐藏驱动的更隐蔽方法,包括从不同列表中移除。
摘要由CSDN通过智能技术生成

PsLoadedModuleList是Windows加载的所有内核模块构成的链表的表头,利用它可以枚举所有这些模块的信息,下面是WRK中对PsLoadedModuleList的定义:LIST_ENTRY PsLoadedModuleList;

内核在加载驱动时,会为每一个驱动创建一个驱动对象(DRIVER_OBJECT),下面是驱动对象的数据结构:

typedef struct _DRIVER_OBJECT {

    CSHORT Type;               

    CSHORTSize;

    PDEVICE_OBJECT DeviceObject;         //指向设备对象,所有的设备对象构成一个链表

    ULONGFlags;                         //驱动程序标志

    PVOIDDriverStart;                   //驱动程序映像起始地址

    ULONGDriverSize;                    //驱动程序映像大小

    PVOIDDriverSection;                 //指向驱动程序映像的内存区对象

    PDRIVER_EXTENSIONDriverExtension;   //指向驱动程序对象的扩展部分

    UNICODE_STRINGDriverName;           //驱动程序名称

    PUNICODE_STRINGHardwareDatabase;    //指向注册表中包含硬件信息的路径

    PFAST_IO_DISPATCHFastIoDispatch;    //指向快速I/O的分发结构

    PDRIVER_INITIALIZE DriverInit;       //驱动程序的初始化例程

    PDRIVER_STARTIO DriverStartIo;       //驱动程序的启动I/O例程

    PDRIVER_UNLOADDriverUnload;         //驱动程序的卸载例程

    PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];

} DRIVER_OBJECT;

typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;

DRIVER_OBJECT对象的DriverExtension成员指向的是驱动程序映像的内存区对象,它的结构KLDR_DATA_TABLE_ENTRY的定义是:

typedef struct_KLDR_DATA_TABLE_ENTRY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值