百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

如何访问系统服务表 访问服务器怎么访问

liebian365 2024-10-20 10:00 29 浏览 0 评论

SSDT的全称是 System Services Descriptor Table,系统服务描述符表

导出变量KeServiceDescriptorTable,通过这个我们能查看相关的系统服务描述表SSDT

知识点:因为KeServiceDescriptorTable是一个导出变量,如果我们在驱动中要使用,那么声明一下就可以使用了

dd KeServiceDescriptorTable

比如未导出变量KeServiceDescriptorTableShadow需要用其他的方式来查找,但是windbg中能够载入相关的pdb文件,所以windbg可以直接使用这个变量

知识点:通过KeServiceDescriptorTableShadow变量来进行查看,能够观察到多个系统服务表

dd KeServiceDescriptorTableShadow

系统服务表结构分析

系统服务表和SSDT表的结构体关系如下所示

typedef struct _SYSTEM_SERVICE_TABLE{
	PVOID ServiceTableBase;				//System Service Dispatch Table 的基地址  
	PVOID ServiceCounterTable;			//包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。 
	unsigned int NumberOfServices;		//由 ServiceTableBase 描述的服务的数目。  
	PVOID ParamTableBase;				//包含每个系统服务参数字节数表的基地址-系统服务参数表 
}SYSTEM_SERVICE_TABLE, *PSYSTEM_SERVICE_TABLE;

typedef struct _SSDT{
	SYSTEM_SERVICE_TABLE a; // ntoskrnl
	SYSTEM_SERVICE_TABLE b; // win32k
	SYSTEM_SERVICE_TABLE c; // no use
	SYSTEM_SERVICE_TABLE d; // no use
}SSDT, *PSSDT;

分析NtReadVirtualMemory (系统服务号:0xBA)

这里拿NtReadVirtualMemory来进行分析学习

1、NtReadVirtualMemory函数的函数服务号为0xBA

2、NtReadVirtualMemory函数三环的ReadVirtualMemory对应的0环调用函数

3、NtReadVirtualMemory相关的地址函数存储在系统服务表的函数地址表中

首先根据0xBA服务号,找到系统服务表中的函数地址表的位置

dd KeServiceDescriptorTable,拿到系统服务表的函数地址表的地址0x80505570

通过偏移dd 0x80505570+0xBA*4,拿到对应NtReadVirtualMemory在0环的函数调用地址0x805b52f6

u 805b52f6

dd KeServiceDescriptorTable,先找到系统服务表中的参数大小的表的地址0x805059e4

接着找到对应0xBA服务号的参数大小的表db 0x805059e4+0xba

可以看到十六进制为0x16,那么十进制就是20,4个字节一个参数,那么NtReadVirtualMemory的参数也就是5个参数

练习SSDT追加函数

在SSDT表中追加一个函数地址(NtReadVirtualMemory),自己编写API的3环部分调用这个新增的函数(注意:使用2-9-9-12分页)。

首先要追加一个函数地址的话,那么要改变的有系统服务表中的哪写字段?

1、系统服务表中的函数地址表中需要添加四个字节,该四个字节代表的是新的函数地址的位置

2、系统服务表中描述的函数的数目需要加一

3、系统服务表中描述的参数表需要添加新的函数地址的一个对应的参数字节大小的位置

相关推荐

python如何对字符串进行操作(python如何对字符串进行操作输出)

1.字符串的创建可通过直接赋值、构造或转义字符来创建字符串。#普通字符串s="Hello,World!"#多行字符串(使用三引号)multi_line_str='''Thisi...

Excel表格中11个常用的字符串函数

今天和大家聊聊常用的字符串函数,在不同的条件下,如何选择字符串函数很关键。下面我为大家列举了11个关于字符串的函数公式。一、EXACT(两个字符串进行结果比较)比较两个字符串是否完全相同(这里是要区分...

详细介绍一下Python中如何对字符串进行操作?

在Python中,字符串做为一种常见的数据处理类型,几乎在每个应用程序中都会被用到。而作为Python中使用最广泛的数据类型Python也是提供了很多强大的方法来支持对于字符串的处理操作。下面我们就来...

Java中你知道几种从字符串中找指定的字符的数量

遇到这样的问题,常规的思路估计就是遍历String,然后逐个对比。下面先看循环遍历循环遍历privatestaticintgetNum(StringoriginStr,Stringtarg...

C语言strcspn函数详解:字符串的“扫雷探测器”

strcspn是C语言标准库中的一个函数,定义在头文件中。它用于计算从字符串的开始到首次出现任何属于指定字符集合的字符之间的字符数量。换句话说,strcspn计算的是主字符串中不包含指定字符集...

如何使用 Python 的 f-string 进行字符串格式化

Python中的字符串格式化曾经有点麻烦。必须在...

java判断字符串中是否包含某个字符

1使用String类的contains()方法contains()方法用于判断字符串中是否包含指定的字符或字符串。语法如下:publicbooleancontains(CharSequence...

Python基础:f-string不同数据类型的格式化选项,终极指南!

上一篇文章我们介绍了4种字符串格式化方法,其中最现代、最直观的方式是f-string,从Python3.6开始引入,而且时不时就增加一些超级优雅的小改进。今天,钢铁老豆想要继续给大家展开介绍不同数据...

Excel查找指定字符串,返回相应的结果

通过下面的函数,可以实现查找指定字符串,若找到返回“有”,若找不到返回“无”。=IF(ISNUMBER(SEARCH("失业",G3)),"有","无")...

一个list中,有b.a.b.c.b.b.写个方法去掉所有b

importjava.util.ArrayList;importjava.util.List;publicclassRemoveBFromStringList{/**...

掌握Python f-string(掌握催眠能力之后的日常生活)

f-string,通常称为格式化字符串文本,是Python3.6中添加的一项强大功能,它提供了一种将表达式包含在字符串文本中的清晰实用的方法。,...

深入了解字符串:定义、转义字符和字符串下标

字符串是编程中常见的数据类型之一,用于表示文本信息。在绝大多数编程语言中,字符串都是由一系列字符组成的序列,可以包含字母、数字、符号以及空格等。字符串的定义:...

100个Java工具类之70:字符串处理工具类StringUtils

StringUtils是常用的工具类,提供大量处理字符串的静态方法。StringUtils主要特点...

Shell中针对字符串的切片,截取,替换,删除,大小写操作

切片返回字符串变量var的长度...

Sqlite - 常规函数 - RTRIM(sqlite命令行工具)

在SQLite中,RTRIM函数是一个用于处理字符串的函数,其主要作用是移除字符串右侧(尾部)的指定字符。如果不指定要移除的字符,默认会移除字符串右侧的空格字符。以下是对RTRIM函数的详细...

取消回复欢迎 发表评论: