能力值:
( LV4,RANK:50 )
|
-
-
2 楼
nt!_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
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
非常感谢楼上的解答。能讲讲有几种方法吗?
|
能力值:
( LV9,RANK:380 )
|
-
-
4 楼
暴力搜索driver_object
driverobject链表
ZwQuerySystemInformation
driver对象目录
...等待
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
hi,是这样,我尝试了下通过Driver_Section反推Driver_Object中各项的地址,结果发现也不好搞。
通过下面语句可以遍历得到下一个链表指向的Driver_Section,通过得到的这个Driver_Section可以得到Driver_Name:
current_Driver_Section = (DRIVER_SECTION*)(first_Driver_Section->listEntry.Flink);
但是问题来了,要得到Driver_Start必须先得到current_Driver_Section在Driver_Object中的地址,然后通过加减得到Driver_Start的地址。但这个current_Driver_Section在Driver_Object中的地址,我目前无法得到
通过 ¤t_Driver_Section得到的地址明显是错的,这个地址只是指向一个声明current_Driver_Section变量时建立的内存地址,和Driver_Object结构体完全没关系。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
Driver_Section中有驱动的基址和入口点等等信息。可直接获取即可。
|
|
|