32位的SSDT表结构浅析
以win7 x86为例(x64就不是我等菜鸟玩的了)
预备资料:
本地系统服务的地址在内核结构中称为系统服务调度表(System Service Dispatch Table, SSDT)中列出。该表可以基于系统调用编号进行索引,以便定位函数的内存地址。还有一个系统服务参数表(System Service Parameter Table,SSPT)指定了每个系统服务的函数参数的字节数(每个函数对应一个字节)。
KeServiceDescriptorTable是由内核导出的表。给出如下结构
1 typedef struct _SystemServiceDescriptorTable 2 { 3 PVOID ServiceTableBase; 4 PULONG ServiceCounterTableBase; 5 ULONG NumberOfService; 6 ULONG ParamTableBase; 7 }SystemServiceTable,*PSystemServiceTable;
typedef struct _SERVICE_DESCRIPTOR_TABLE{SYSTEM_SERVICE_TABLE ntoskrnel; //ntoskrnl.exe的服务函数SYSTEM_SERVICE_TABLE win32k; //win32k.sys的服务函数,(gdi.dll/user.dll的内核支持) SYSTEM_SERVICE_TABLE NotUsed1;SYSTEM_SERVICE_TABLE NotUsed2;}SYSTEM_DESCRIPTOR_TABLE,*PSYSTEM_DESCRIPTOR_TABLE;
参数说明:
ServiceTableBase :SSDT的基地址。
ServiceCounterTable 此域用于操作系统的 checked builds,包含着 SSDT 中每个服务被调用次数的计数器。这个计数器由 INT 2Eh 处理程序 (KiSystemService)更新。
NumberOfServices 由 ServiceTableBase 描述的服务的数目。
ParamTableBase 包含每个系统服务参数字节数表的基地址。
引用pediy的大牛堕落天才的话来说:
内核中有两个系统服务描述符表,一个是KeServiceDescriptorTable(由ntoskrnl.exe导出),一个是KeServieDescriptorTableShadow(没有导出)。两者的区别是,KeServiceDescriptorTable仅有ntoskrnel一项,KeServieDescriptorTableShadow包含了ntoskrnel以及win32k。一般的Native API的服务地址由KeServiceDescriptorTable分派,gdi.dll/user.dll的内核API调用服务地址由KeServieDescriptorTableShadow分派。还有要清楚一点的是win32k.sys只有在GUI线程中才加载,一般情况下是不加载的,所以要Hook KeServieDescriptorTableShadow的话,一般是用一个GUI程序通过IoControlCode来触发。
需要注意的是,一般情况下R0的驱动内存中是没有win32k.sys的,只有在GUI线程加载的时候才会存在,准确的说只有在PsConvertToGuiThread调用的时候把KeServiceDescri
32位的SSDT表结构浅析相关推荐
- 如何把32位的注册表文件转换为64位的?
问题:比如 我的系统是64位的WIN7,但下载的极品飞车14的注册表导入文件却是32位的,于是不能用,还好网上有人做了64位的导入文件.我想知道那些达人是怎么把32位的改成64位的? 把32位的注册表 ...
- ssdt 表结构及hook的一般理解
1 Ssdt表的基本结构 KeServiceDescriptorTable 首地址:8055D700 0: kd> dd KeServiceDescriptorTable 8055d ...
- C# .net 3.5 32位app操作64位操作系统的注册表
做项目的过程中需要读取和修改注册表,操作过程中发现读取的注册的注册表和实际的值不一致. 查阅网上信息了解到,64位操作系统为32位app独立设置了一个目录存放它的注册表项目 计算机\HKEY_LOCA ...
- 64位Windows系统注册表的 32 位注册表项和64 位注册表项
64 位版本 Windows 中的注册表分为 32 位注册表项和 64 位注册表项.许多 32 位注册表项与其相应的 64 位注册表项同名,反之亦然. 64 位版本 Windows 包含的默认 64 ...
- 32位应用程序操作64位Windows注册表的方法
64位的Windows操作系统中能够运行32位的应用程序,主要是由于Windows中提供了WOW64子系统. 1.WOW64子系统 WOW64 (Windows-on-Windows 64-bit)是 ...
- VC 32位(或64位)win7操作系统的注册表操作
*.bat文件: @echo "Win7系统下->右键->以管理员权限运行" rem 切换到当前bat文件所在目录 cd /d %~dp0 pause rem 杀死 ...
- 转载】将32位代码向64位平台移植的注意事项
转载]将32位代码向64位平台移植的注意事项 新近的64位平台在二进制上与32位应用程序兼容,这意味着可以非常简单地移植现有的程序.许多目前在32位平台上运行良好的程序也许不必移植,除非程序有以下要求 ...
- (转)移植32位程序64位系统
64个系统已经为32位的应用程序准备了运行32位程序的环境,这个环境就是WOW64的. WOW64 是Windows -32-on-Windows-64 的缩写.它为现有的 32 位应用程序提供了 3 ...
- VB如何在Win10X64位系统上进行读写64位的注册表
win10X64位系统注册表分两个部分:64位和32位,当我们用VB6生成的exe可执行的程序后,进行操作注册表时发现某些项无法写入和读取,这是因为VB6生成的程序是32位的,可见用32位的程序去读写 ...
最新文章
- 只有ajax会跨域吗_ajax处理跨域有几种方式
- ArcEngine 添加字段
- Python Tricks(八)—— 斐波那契数列的另类实现
- 从零开始搭二维激光SLAM --- 基于gtsam的后端优化的代码实现
- php字符串长度获取_php哪个函数能取得字符串长度
- GD32F103与STM32F103的区别 2021.6.2
- 石头机器人拖地水量调节_拖地组件再评测:正式版 家有 石头科技T4 米家一代 水箱拖地组件...
- face_recognition库的使用
- 软件测试人员必备的7种思维方式
- R语言:判断身份证号码真伪的函数编写
- greenDao的使用教程
- 三维地图下载,3D地图下载,谷歌地球三维地形图查看
- oracle错误1327,问题简述:在oracle linux下安装oracle10g,多个文件报“Permission denied”错误...
- html5条件筛选jquery,jQuery实现多条件筛选
- 阿里云公共DNS安全传输服务介绍(DoH/DoT)
- 什么是硬件加密与软件加密,有什么区别?
- 解决飞鸽传书看不到自己想要找的好友
- rmxp4droid for 天敏电视盒子
- Python入门练习选择题
- Xcode真机调试(无需证书)详解