驱动断链

news/2024/11/18 7:51:25/文章来源:https://www.cnblogs.com/murkuo/p/18199515

03驱动断链

获取驱动信息的途径是从DriverFileSystem两个目录下获得的

正常情况下我们自己做驱动遍历只能便利Driver下的所有驱动,也就是驱动链表里的驱动

分析

这里我们F12进去找一下DRIVER_OBJECT的结构

typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; 

WinDbg里dt一下

kd> dt _DRIVER_OBJECT
ntdll!_DRIVER_OBJECT+0x000 Type             : Int2B+0x002 Size             : Int2B+0x004 DeviceObject     : Ptr32 _DEVICE_OBJECT+0x008 Flags            : Uint4B+0x00c DriverStart      : Ptr32 Void+0x010 DriverSize       : Uint4B+0x014 DriverSection    : Ptr32 Void+0x018 DriverExtension  : Ptr32 _DRIVER_EXTENSION+0x01c DriverName       : _UNICODE_STRING+0x024 HardwareDatabase : Ptr32 _UNICODE_STRING+0x028 FastIoDispatch   : Ptr32 _FAST_IO_DISPATCH+0x02c DriverInit       : Ptr32     long +0x030 DriverStartIo    : Ptr32     void +0x034 DriverUnload     : Ptr32     void +0x038 MajorFunction    : [28] Ptr32     long 

其中DriverSection里面存放了一个类似于R3的PEB的链表

   +0x014 DriverSection    : Ptr32 Void

PEB

kd> dt _PEB
ntdll!_PEB+0x000 InheritedAddressSpace : UChar+0x001 ReadImageFileExecOptions : UChar+0x002 BeingDebugged    : UChar+0x003 BitField         : UChar+0x003 ImageUsesLargePages : Pos 0, 1 Bit+0x003 IsProtectedProcess : Pos 1, 1 Bit+0x003 IsLegacyProcess  : Pos 2, 1 Bit+0x003 IsImageDynamicallyRelocated : Pos 3, 1 Bit+0x003 SkipPatchingUser32Forwarders : Pos 4, 1 Bit+0x003 SpareBits        : Pos 5, 3 Bits+0x004 Mutant           : Ptr32 Void+0x008 ImageBaseAddress : Ptr32 Void+0x00c Ldr              : Ptr32 _PEB_LDR_DATA+0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS+0x014 SubSystemData    : Ptr32 Void+0x018 ProcessHeap      : Ptr32 Void+0x01c FastPebLock      : Ptr32 _RTL_CRITICAL_SECTION+0x020 AtlThunkSListPtr : Ptr32 Void+0x024 IFEOKey          : Ptr32 Void+0x028 CrossProcessFlags : Uint4B+0x028 ProcessInJob     : Pos 0, 1 Bit+0x028 ProcessInitializing : Pos 1, 1 Bit+0x028 ProcessUsingVEH  : Pos 2, 1 Bit+0x028 ProcessUsingVCH  : Pos 3, 1 Bit+0x028 ProcessUsingFTH  : Pos 4, 1 Bit+0x028 ReservedBits0    : Pos 5, 27 Bits+0x02c KernelCallbackTable : Ptr32 Void+0x02c UserSharedInfoPtr : Ptr32 Void+0x030 SystemReserved   : [1] Uint4B+0x034 AtlThunkSListPtr32 : Uint4B+0x038 ApiSetMap        : Ptr32 Void+0x03c TlsExpansionCounter : Uint4B+0x040 TlsBitmap        : Ptr32 Void+0x044 TlsBitmapBits    : [2] Uint4B+0x04c ReadOnlySharedMemoryBase : Ptr32 Void+0x050 HotpatchInformation : Ptr32 Void+0x054 ReadOnlyStaticServerData : Ptr32 Ptr32 Void+0x058 AnsiCodePageData : Ptr32 Void+0x05c OemCodePageData  : Ptr32 Void+0x060 UnicodeCaseTableData : Ptr32 Void+0x064 NumberOfProcessors : Uint4B+0x068 NtGlobalFlag     : Uint4B+0x070 CriticalSectionTimeout : _LARGE_INTEGER+0x078 HeapSegmentReserve : Uint4B+0x07c HeapSegmentCommit : Uint4B+0x080 HeapDeCommitTotalFreeThreshold : Uint4B+0x084 HeapDeCommitFreeBlockThreshold : Uint4B+0x088 NumberOfHeaps    : Uint4B+0x08c MaximumNumberOfHeaps : Uint4B+0x090 ProcessHeaps     : Ptr32 Ptr32 Void+0x094 GdiSharedHandleTable : Ptr32 Void+0x098 ProcessStarterHelper : Ptr32 Void+0x09c GdiDCAttributeList : Uint4B+0x0a0 LoaderLock       : Ptr32 _RTL_CRITICAL_SECTION+0x0a4 OSMajorVersion   : Uint4B+0x0a8 OSMinorVersion   : Uint4B+0x0ac OSBuildNumber    : Uint2B+0x0ae OSCSDVersion     : Uint2B+0x0b0 OSPlatformId     : Uint4B+0x0b4 ImageSubsystem   : Uint4B+0x0b8 ImageSubsystemMajorVersion : Uint4B+0x0bc ImageSubsystemMinorVersion : Uint4B+0x0c0 ActiveProcessAffinityMask : Uint4B+0x0c4 GdiHandleBuffer  : [34] Uint4B+0x14c PostProcessInitRoutine : Ptr32     void +0x150 TlsExpansionBitmap : Ptr32 Void+0x154 TlsExpansionBitmapBits : [32] Uint4B+0x1d4 SessionId        : Uint4B+0x1d8 AppCompatFlags   : _ULARGE_INTEGER+0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER+0x1e8 pShimData        : Ptr32 Void+0x1ec AppCompatInfo    : Ptr32 Void+0x1f0 CSDVersion       : _UNICODE_STRING+0x1f8 ActivationContextData : Ptr32 _ACTIVATION_CONTEXT_DATA+0x1fc ProcessAssemblyStorageMap : Ptr32 _ASSEMBLY_STORAGE_MAP+0x200 SystemDefaultActivationContextData : Ptr32 _ACTIVATION_CONTEXT_DATA+0x204 SystemAssemblyStorageMap : Ptr32 _ASSEMBLY_STORAGE_MAP+0x208 MinimumStackCommit : Uint4B+0x20c FlsCallback      : Ptr32 _FLS_CALLBACK_INFO+0x210 FlsListHead      : _LIST_ENTRY+0x218 FlsBitmap        : Ptr32 Void+0x21c FlsBitmapBits    : [4] Uint4B+0x22c FlsHighIndex     : Uint4B+0x230 WerRegistrationData : Ptr32 Void+0x234 WerShipAssertPtr : Ptr32 Void+0x238 pContextData     : Ptr32 Void+0x23c pImageHeaderHash : Ptr32 Void+0x240 TracingFlags     : Uint4B+0x240 HeapTracingEnabled : Pos 0, 1 Bit+0x240 CritSecTracingEnabled : Pos 1, 1 Bit+0x240 SpareTracingBits : Pos 2, 30 Bits

其中 +0x00c Ldr:Ptr32 _PEB_LDR_DATA中存放了一个_PEB_LDR_DATA

kd> dt _PEB_LDR_DATA
ntdll!_PEB_LDR_DATA+0x000 Length           : Uint4B+0x004 Initialized      : UChar+0x008 SsHandle         : Ptr32 Void+0x00c InLoadOrderModuleList : _LIST_ENTRY+0x014 InMemoryOrderModuleList : _LIST_ENTRY+0x01c InInitializationOrderModuleList : _LIST_ENTRY+0x024 EntryInProgress  : Ptr32 Void+0x028 ShutdownInProgress : UChar+0x02c ShutdownThreadId : Ptr32 Void

其中就就有模块链表

   +0x00c InLoadOrderModuleList : _LIST_ENTRY+0x014 InMemoryOrderModuleList : _LIST_ENTRY+0x01c InInitializationOrderModuleList : _LIST_ENTRY

_KLDR_DATA_TABLE_ENTRY

这里我们使用R0的_KLDR_DATA_TABLE_ENTRY结构体

这里我使用WRK搜索拿到这个结构体的

这个是32位的

typedef struct _KLDR_DATA_TABLE_ENTRY {LIST_ENTRY InLoadOrderLinks;ULONG __Undefined1;ULONG __Undefined2;ULONG __Undefined3;ULONG NonPagedDebugInfo;ULONG DllBase;ULONG EntryPoint;ULONG SizeOfImage;UNICODE_STRING FullDllName;UNICODE_STRING BaseDllName;ULONG Flags;USHORT LoadCount;USHORT __Undefined5;ULONG  __Undefined6;ULONG  CheckSum;ULONG  TimeDateStamp;
} KLDR_DATA_TABLE_ENTRY, * PKLDR_DATA_TABLE_ENTRY;

查看当前驱动的_KLDR_DATA_TABLE_ENTRY结构

#include <ntifs.h>VOID Unload(PDRIVER_OBJECT pDriver)
{DbgPrint("unload\r\n");
}
//定义未公开结构体
typedef struct _KLDR_DATA_TABLE_ENTRY {LIST_ENTRY InLoadOrderLinks;ULONG __Undefined1;ULONG __Undefined2;ULONG __Undefined3;ULONG NonPagedDebugInfo;ULONG DllBase;ULONG EntryPoint;ULONG SizeOfImage;UNICODE_STRING FullDllName;UNICODE_STRING BaseDllName;ULONG Flags;USHORT LoadCount;USHORT __Undefined5;ULONG  __Undefined6;ULONG  CheckSum;ULONG  TimeDateStamp;
} KLDR_DATA_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/708309.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝屏分析

04蓝屏分析 直接上蓝屏代码 #include <ntifs.h>VOID Unload(PDRIVER_OBJECT pDriver) {DbgPrint("Driver Unload\r\n"); }NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pReg) {pDriver->DriverUnload = Unload;//DbgBreakPoint();DbgPrin…

Qt学习第二篇(基本小组件的使用)

Qt_2 小部件是 GUI 的基本元素。 它也称为UI 控件。 它接受来自底层平台的不同用户事件,如鼠标和键盘事件(以及其他事件)。 我们使用不同的小部件创建 UI。 曾经有一段时间,所有的 GUI 控件都是从头开始编写的。 Qt 小部件通过开发具有现成的 GUI 控件的桌面 GUI 来缩短时间,…

Weblogic T3反序列化漏洞(CVE-2018-2628)

在Weblogic中RMI通信的实现是使用T3协议,并且在T3的传输过程中,和RMI一样,会进行序列化和反序列化的操作。目录前言T3协议概述漏洞复现修复方案 前言 WebLogic Server 是一个企业级的应用服务器,由Oracle公司开发,支持完整的Java EE规范,包括EJB、JSP、Servlet、JMS等,适…

方方方的数据结构

总算给我看懂到底是什么意思了。。。 首先我们来考虑按照时间+扫描线进行处理,假设操作如下黑色是加操作,黄色是乘操作,绿色是加操作,对于红色那条线所代表的点,随着时间的流逝,首先在刚刚进入黑色的时候,这一点的值就被加上了一个数,然后刚刚进入黄色的时候,这一点的…

手机硬件检测:-DeviceTest

手机硬件检测:Z-DeviceTest官方版是款针对手机硬件所打造的检测工具。手机硬件检测:Z-DeviceTest能够检测硬件和OS,硬件上不仅仅是电池、cpu、内存、OS,甚至连usb、扬声器、指南针、摄像头、GPS、听筒等都能检测。并且手机硬件检测:Z-DeviceTest还能够对市面众多的机型进行检…

OutOfMemoryError

以下的这段代码应该是报错的才对,但是我在运行了之后,程序一直卡在那里。最后请教老师了解到,原来jvm如果不指定运行参数,是会进行自动扩容的。 package com.coding.jvm.oom;public class NativeErrorDemo {public static void main(String[] args) {for (; ; ) {new Threa…

【工具使用】【Shell脚本】【gitlab】下拉所有的仓库代码

1 前言 电脑重置了或者新的项目代码,仓库里二三十个,一个一个拉属实有点拉跨,今儿空了整了个脚本,可以拉下所有的仓库代码。 2 前置 需要装一个解析 json的,windows 的话可以直接下载:下载,mac的话可以再官网下载:官网地址。 然后加入到 PATH 下,效果如下:3 脚本 …

app测试工具monkey

Monkey是Android中的一个命令行工具,可以运行在模拟器或者实际设备中向系统发送伪随机的用户事件流(按键输入、触摸屏输入、手势输入等) 实现对正在开发的应用程序进行测试; Monkey测试之一种为了测试软件的稳定性、健壮性的快速有效的方式 一、什么是Monkey 顾名思义,M…

Markdown的学习笔记

Markdown (#+空格输入后回车自动形成大标题) 字体 (##+空格输入回车形成二级标题,以此类推,最多6级) hello world!(两边加两个*好为粗体) hello world!(两边一个*号为斜体) hello world!(三个*号斜体加粗) hello world!(两边两个~号删除线) 引用(大于>+空格形…

关于idea部署本地项目的问题

因为我部署问题的时忘记把问题截图,所以我这边使用网上的截图。 这个错误信息表明,你正在尝试运行一个由更高版本的Java编译的Spring Boot应用程序,而你当前使用的Java运行时(JRE)版本过低,无法识别这个应用程序的类文件版本。 它这边提示应用程序中的类文件版本是61.0,…

GmSSL3.X编译iOS和Android动态库

一、环境准备 我用的Mac电脑编译,Xcode版本15.2,安卓的NDK版本是android-ndk-r21e。 1.1、下载国密源码 下载最新的国密SDK源码到本地。 1.2、安装Xcode 前往Mac系统的AppStore下载安装最新Xcode。 1.3、安卓NDK下载 下载NDK到本地,选择一个比较新的版本下载即可,我选择的是…

实验31-hanlp_textrank

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6