读取SSDT表和原函数地址

简介:

读取当前地址代码(NtOpenProcess):
 LONG *SSDT_Adr,t_addr,adr;
 t_addr=(LONG)KeServiceDescriptorTable->ServiceTableBase;
 SSDT_Adr=(PLONG)(t_addr+0x7a*4);
 adr=*SSDT_Adr;

读取起源地址(NtOpenProcess):

UNICODE_STRING SysRoutineName;

LONG orgadr;

‍RtlInitUnicodeString(&SysRoutineName,L"NtOpenProcess");

‍orgadr=(LONG)MmGetSystemRoutineAddress(&SysRoutineName);

 

通过得到的地址 可以判断改函数是否被hook

自己读取的SSDT表:

SSDT 地址 | 起源地址.
NtOpenProcess->805751e0 | 805751e0

相关文章
|
5月前
|
存储 SQL NoSQL
mysql存储过程和存储函数
mysql存储过程和存储函数
|
4月前
|
存储 SQL 关系型数据库
MySQL存储过程和存储函数的使用
MySQL的存储过程和存储函数在功能和用法上有明显的区别。存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,通过指定名称和参数(如果有)来调用执行,可以返回多个值或结果集,但不直接返回值。而存储函数则是一个有返回值的特殊存储过程,它返回一个值或表对象,可以直接嵌入SQL语句中使用,如SELECT语句中。两者都是为了提高SQL代码的重用性和性能,但使用场景和方式有所不同。
199 4
|
5月前
|
存储 安全 编译器
使用unsafe库操作结构体的属性偏移和指针转换
【5月更文挑战第19天】Go语言是类型安全的,但通过`unsafe`包,可以进行结构体属性偏移量计算和指针转换。`unsafe.Offsetof`获取结构体字段的偏移量,`unsafe.Pointer`允许不同类型指针间的转换。然而,这可能导致类型安全屏障被绕过,若使用不当,会引发安全问题或panic。应谨慎使用`unsafe`,因为它不遵循GO 1兼容性准则。
44 0
使用unsafe库操作结构体的属性偏移和指针转换
|
编译器 C++
函数指针、回调函数、转移表
函数指针、回调函数、转移表
72 0
|
5月前
|
C语言
C语言函数传递了指针,值没有被修改的原因及解决方法
C语言函数中传递了指针作为参数,确切来说是传递了指向变量的内存地址作为参数,可经过函数内的修改之后,该指针指向的变量的值为什么不会被修改?就像下方这个函数:
100 1
|
存储 SQL NoSQL
15_MySQL存储过程与存储函数(二)
115_MySQL存储过程与存储函数(二)
61 0
|
存储 SQL NoSQL
15_MySQL存储过程与存储函数(一)
15_MySQL存储过程与存储函数(一)
199 0
实现一个函数,使用指针连接两个字符串。函数输入: 两个源字符串的指针,目的字符串的指(C++指针练习4)
实现一个函数,使用指针连接两个字符串。函数输入: 两个源字符串的指针,目的字符串的指(C++指针练习4)
实现一个函数,使用指针连接两个字符串。函数输入:两个源字符串的指针,目的字符串的指针。
实现一个函数,使用指针连接两个字符串。函数输入:两个源字符串的指针,目的字符串的指针。
|
存储 数据安全/隐私保护
CE修改器入门:寻找指针基址
上一步阐述了如何使用`代码替换`功能对付变化位置的数据地址,但这种方法往往不能达到预期的效果,所以我们需要学习如何利用指针,在本关的 Tutorial.exe 窗口下面有两个按钮,一个会改变数值,另一个不但能改变数值而且还会改变数值在内存中存储的位置。
CE修改器入门:寻找指针基址