关于SSDT HOOK 取得索引号(function2hook + 1 )

2024-03-05 02:18

本文主要是介绍关于SSDT HOOK 取得索引号(function2hook + 1 ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当我们HOOK SSDT 时,要做的很重要的事情就是要获得NtXXX函数在SSDT中的索引号,以方便替换和调用。

取得索引号会使用宏:

#define HOOK_INDEX(function2hook) *(PULONG)((PUCHAR)function2hook + 1)

但为什么要function2hook +1 呢 ?
一定要注意本质问题,这里的function2hook不是我们想要HOOK的NtXXX,而是对应的ZwXXX。

我们反汇编下ZwXXX,以ZwWriteFile为例:

0: kd> u nt!ZwWriteFile
nt!ZwWriteFile:
805022a4 b812010000      mov     eax,112h
805022a9 8d542404          lea       edx,[esp+4]
805022ad 9c                      pushfd
805022ae 6a08                  push    8
805022b0 e8ac010400      call       nt!KiSystemService (80542461)
805022b5 c22400              ret       24h

 

其中805022a4为ZwWriteFile的入口地址,我们再查看下这个入口地址之后的内存值:

0: kd> dd 805022a4
805022a4    000112b8 24548d00 086a9c04 0401ace8
805022b4    0024c200 000113b8 24548d00 086a9c04
805022c4    040198e8 0024c200 000114b8 24548d00
805022d4    086a9c04 040184e8 0018c200 000115b8

 

0: kd> dd 805022a4+1
805022a5  00000112 0424548d e8086a9c 000401ac
805022b5  b80024c2 00000113 0424548d e8086a9c
805022c5  00040198 b80024c2 00000114 0424548d
805022d5  e8086a9c 00040184 b80018c2 00000115

 

注意:mov eax,112h ,即ZwWriteFile函数入口处向后偏移1的地址保存了NtWriteFile的索引值,即112h 。所以我们使用ZwWriteFile 函数名,即函数入口指针 + 1,即为保存索引号的地址。之后用*取值就得到了索引号。

这篇关于关于SSDT HOOK 取得索引号(function2hook + 1 )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/775013

相关文章

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的

Mysql高级篇(中)——索引介绍

Mysql高级篇(中)——索引介绍 一、索引本质二、索引优缺点三、索引分类(1)按数据结构分类(2)按功能分类(3) 按存储引擎分类(4) 按存储方式分类(5) 按使用方式分类 四、 索引基本语法(1)创建索引(2)查看索引(3)删除索引(4)ALTER 关键字创建/删除索引 五、适合创建索引的情况思考题 六、不适合创建索引的情况 一、索引本质 索引本质 是 一种数据结构,它用

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询数据

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询; 一、首先启动相关服务: 二、新建一个film索引: 三、建立映射: 1、通过Head插件: POST http://192.168.1.111:9200/film/_mapping/dongzuo/ {"properties": {"title": {"type":

ElasticSearch 6.1.1运用代码添加索引及其添加,修改,删除文档

1、新建一个MAVEN项目:ElasticSearchTest 2、修改pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or