SSDT HOOK中的几个宏

SSDT Hook实现内核级的进程保护 SSDT Hook效果图 加载驱动并成功Hook  NtTerminateProcess函数: 当对 指定的进程进行保护后,尝试使用“任务管理器”结束进程的时候,会弹出“拒绝访问”的窗口,说明,我们的目的已经达到: SSDT简介 SSDT 的全称是 System Services Descriptor Table,系统服务描述符表。 这个表 阅读详情

SSDT HOOK中的几个宏

 

#define GetSystemFunc(FuncName) KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)FuncName+1)]

#define GetIndex(_Function) *(PULONG)((PUCHAR)_Function+1)

#define HookOn(_Old, _New)  /
       (PVOID) InterlockedExchange( (PLONG) &MappedSCT[GetIndex(_Old)], (LONG) _New)

#define UnHook(_Old, _New)  /
       InterlockedExchange( (PLONG) &MappedSCT[GetIndex(_Old)], (LONG) _New)

     由于最近在看SSDT HOOK,对其中的几个宏定义不是很理解,主要是网上找了很多资料都只有对这几个宏的定义和使用,从来不说为什么这样定义,所以,一不爽就自己动手了。以上就是常用到的四个宏,主要是前两个比较重要,研究清楚了后面就没啥大问题了。

先来看个结构吧
typedef struct ServiceDescriptorEntry
{
        unsigned int *ServiceTableBase;
        unsigned int *ServiceCounterTableBase; //Used only in checked build
        unsigned int NumberOfServices;
        unsigned char *ParamTableBase;
} SSDTEntry;
用来获得SSDT表的一个很重要的结构,这个结构网上很多资料讲的很清楚。
    其中*ServiceTableBase是指向SSDT表表头的指针,用它可以获得每个SSDT表的表项,NumberOfServices表示SSDT表里有多少个表项,也就是SSDT表里有多少个系统调用。
一下以API:TerminateProcess()为例
    从ring3调用api首先会到ntdll.dll里去掉用一个相应的ntTerminateProcess()或者ZwTerminateProcess(),两者在ntdll.dll里是相同的,可以用IDA查看。调用ntTerminateProcess()以后,该函数内部会向ring0发送一个系统调用编号,这里发送的是101h,然后sysenter进入ring0,这里的细节没去研究过。
    然后下面就到了ring0,ZwTerminateProcess()在ntoskrnl.exe里有导出,注意这个函数和ntdll.dll里的不一样。
用IDA查看ZwTerminateProcess()如下:
text:00406AD0 ; NTSTATUS __stdcall ZwTerminateProcess(HANDLE ProcessHandle, NTSTATUS ExitStatus)
.text:00406AD0                 public ZwTerminateProcess
.text:00406AD0 ZwTerminateProcess proc near            ; CODE XREF: sub_42BC9F+1ABF8p
.text:00406AD0                                         ; sub_468278+E2p
.text:00406AD0
.text:00406AD0 ProcessHandle   = dword ptr  4
.text:00406AD0 ExitStatus      = dword ptr  8
.text:00406AD0
.text:00406AD0                 mov     eax, 101h     
.text:00406AD5                 lea     edx, [esp+ProcessHandle]
.text:00406AD9                 pushf
.text:00406ADA                 push    8
.text:00406ADC                 call    sub_407631
.text:00406AE1                 retn    8
.text:00406AE1 ZwTerminateProcess endp
   其实大家可以看到这个函数没做啥,关键在sub_407631里面做了很多东西,详细可以自己进去看看。
为什么要讲这个呢?因为本文一开始列出的4个宏中的第一个:#define GetSystemFunc(FuncName) KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)FuncName+1)]
FuncName为函数名,一般大家用都是用这个宏来获得相应函数在SSDT表里的地址。
这里传入的是ZwTerminateProcess()在ntoskrnl.exe里的地址,为什么能反过来得到SSDT表里的地址呢?关键看第一行代码:.text:00406AD0                 mov     eax, 101h
其中含有101h,这个系统调用号在SSDT表里很重要,有了他就可以结合ServiceTableBase找到SSDT表里的地址了。所以如何得到101h呢?来看看mov eax,101h的机器码吧。.text:00406AD0 B8 01 01 00 00,函数ZwTerminateProcess()正好指向00406AD0这个存储单元,所以其实只要把第一个byte去了,就可以取到101h了。没错,所以FetSystemFunc(FuncName)宏就是这么做的(*(PULONG)((PUCHAR)FuncName+1)这一句就得到了101h)。接下来就是去ServiceTableBase表里查101h的地址,这样得到这个地址以后想怎么改就怎么改,想怎么hook就怎么hook了。
其实这个宏是最关键的,个人认为,这个宏分析清楚了其他三个宏就迎刃而解了。
OK继续学习吧,学海无涯,还得多多钻研。

HOOK SSDT NtOpenProcess 保护进程 感谢众大神分享的技术,因为几乎没参考别人的源码,所以就标题原创 但是因为这个技术肯定是前辈分搞出来的,所以就特意说明下,此乃转载耶 模板用的张帆大牛的 记录一下,以后备用 阅读详情

相关推荐

SSDT Hook底层原理介绍以及如何实现进程保护

目录 SSDT Hook效果图 SSDT简介 SSDT结构 SSDT HOOK原理 Hook前准备 如何获得SSDT中函数的地址呢 SSDT Hook流程 SSDT Hook实现进程保护 SSDT Hook效果图 加载驱动并成功Hook NtTerminateProcess函数: 当对 指定的进程进行保护后,尝试使用“任务管理器”结束进程的时候,会弹出“拒绝访问”的窗口,说明,我们的目的已经达到: SSDT简介 SSDT 的全称是 System Services Descr.

linuxguitu的博客 1144

笔记SSDT HOOK

实例啊实例……今天早上1点睡的,居然7点半就爬起来了……看来自己很有前途……   RT,丢个SSDT HOOK的砖头吧,也免得很多人说理论太多,实际很多东西不明白,也希望黑防不会说我一稿N发……uses   nt_status, ntoskrnl, ntutils; //以前用DDDK的时候直接uses ntddk.pas就完事了……  function _DriverEntry(

ygyangguang的专栏 1262

Win64 驱动内核编程-19.HOOK-SSDT

HOOK SSDT     在 WIN64 上 HOOK SSDT 和 UNHOOK SSDT 在原理上跟 WIN32 没什么不同,甚至说 HOOK 和 UNHOOK 在本质上也没有不同,都是在指定的地址上填写一串数字而已 (填写代理函数的地址时叫做 HOOK,填写原始函数的地址时叫做 UNHOOK)。不过实现起来还是很大不同的。 一 、 HOOK SSDT     要挂钩 SSDT,必然

天使也掉毛 5075

必备绝技——hook大法(中)

 【文章标题】: 必备绝技——hook大法( 中 )【文章作者】: LvG【作者邮箱】: LvG2008@gmail.com【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!--------------------------------------------------------------------------------【详细过程】  这次主要说说核心层的hook。包

1678

更加稳定的HOOK SSDT(通过MDL方式)

传说修改cr0寄存器后再写SSDT在多核CPU不稳定,因此提供一个更加稳定的写SSDT表的方式,代码如下//// 挂钩函数//BOOL HookSSDT()...{    PMDL pMdlSystemCall = NULL;    DWORD * MappedSystemCallTable = 0;       pMdlSystemCall = IoAllocateMdl(       

4984

Windows内核SSDT Hook技术详解

SSDT(System Service Descriptor Table)是指系统服务描述表,它是Windows操作系统中用于管理系统服务调用的重要数据结构。SSDT定义了系统服务的入口点,允许系统和应用程序通过系统调用来访问各种服务。每个服务都有一个相应的索引号,通过这个索引,操作系统可以根据需要调用相应的服务。系统服务描述表(System Service Descriptor Table, SSDT)是Windows操作系统中用于存储系统服务函数地址的数据结构。

weixin_28681379的博客 1172

查看SSDTHOOK其修改

#define SYSTEMSERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)] typedef unsigned long DWORD; typedef unsigned long *PDWORD; typedef unsigned short WORD;

trents的专栏 1617

深入解析Hook Shadow SSDT技术与源码实现

Hook技术是一种在软件运行时,改变或控制其他程序执行的技术手段。它允许开发者“挂钩”到系统、库或应用的某些部分,并插入自定义代码以执行额外的操作。通过这种方式,开发者可以观察和控制函数调用、消息传递或事件处理等。在系统编程中,Hook技术常用于调试、监控、扩展功能等场景。系统编程指的是编写运行在操作系统内核级别或接近内核级别的软件,如驱动程序、系统服务、操作系统组件等。这些程序通常是用C或C++等底层语言编写,并需要对操作系统的工作原理有深入了解。

weixin_33240461的博客 775

SSDT Hook

看看大概的调用情况 左边是2000有的,右边是xp后走的 Ntdll.dll 中的 API 是一个简单的包装函数。 当 Kernel32.dll 中的 API 通过 Ntdll.dll 时,会完成参数的检查再调用一个中断(int 2Eh 或者 SysEnter 指令),从而实现从 Ring3 进入 Ring0 层 并且将所要调用的服务号(也就是在 S

zhuhuibeishadiao 3445

Pandas实战指南:从数据结构到清洗聚合的完整解析

在数据分析工作中,表格数据处理是最常见的需求,无论是电商运营还是量化交易,都离不开对结构化数据的清洗与转换。Python生态中,Pandas凭借Series与DataFrame两种核心数据结构,将数据标签与数值绑定,实现自动对齐,极大简化了数据操作流程。它不仅是数据清洗的利器,也是分组聚合、透视表分析和时间序列处理的基础工具。掌握Pandas,意味着能够高效完成从数据读取、缺失值处理、类型转换到分组统计的完整分析流水线,将重复性报表工作自动化。本文基于实际使用经验,系统梳理Pandas的核心概念、常用操作、

weixin_30768881的博客 258

基于新张量核范数的TRPCA:多维数据低秩稀疏分解的理论与实践

本文深入探讨了基于新张量核范数的TRPCA(张量鲁棒主成分分析)技术。该技术通过t-product运算和新定义的张量核范数,能有效从多维数据(如视频、彩色图像)中分离低秩背景与稀疏前景/噪声。文章结合理论、核心算法(ADMM、t-SVT)及图像恢复、视频背景建模等实战案例,展示了其在处理复杂多维数据分解任务中的强大优势。

weixin_29173777的博客 269

x64技术之SSDT_Hook

x64技术之SSDT_Hook测试环境:虚拟机: Windows 7 64bit过PG工具驱动加载工具PCHunter64系统自带的计算器和任务管理器等实现思路:实际思路与win32的思路一样.都是替换SSDT表里边的函数地址.不过微软被搞怕了,所以在x64上做了一些手脚.具体手脚就是x64通过SSDT得到的函数地址,不是真实的函数绝对地址了,而是加密了的.HOOK1.得到系统服务表基址2.保存需...

Hades的博客 5998

常学常新:《Attention Is All You Need》万字解读!

常学常新:《Attention Is All You Need》万字解读!

hunteritself的博客 3643

【SSDT】SSDT hook技术

通过修改此表的函数地址可以对常用Windows函数及API进行Hook,从而实现对一些关心的系统动作进行过滤、监控等目的。在NT4.0 以上的Windpws 操作系统中,默认存在两个系统服务描述表,两个调度表对应两类不同的系统服务。要Hook SSDT表,首选需要这个表是可写的,但是在XP之后的系统都是只读的,有三种方式修改内存保护机制。其中第1位叫做保护属性位,控制着页的读或写属性。如果为0,则只能读/执行。SSDT,IDT(中断描述符表)的页属性在默认情况下只读,可执行,但不能写。例如进程保护(驱动)

dr0op's blog 2784

CVAT实战:从零搭建高效数据标注流水线

本文详细介绍了如何使用CVAT搭建高效的数据标注流水线,从环境部署到团队协作,再到数据流转和质量把控,全面覆盖了数据标注的各个环节。CVAT作为一款开源的数据标注工具,支持多人协作和丰富的标注类型,特别适合遥感图像等复杂场景的标注需求。通过实战案例和技巧分享,帮助读者快速掌握CVAT的核心功能,提升标注效率。

weixin_30555125的博客 397

树莓派安装snowboy

1、树莓派换源 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113615915 2、更新pip3 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113616214 3、存取麦克风 我们使用PortAudio作为音频输入/输出的跨平台支持。我们还使用sox作为快速实用程序来检查麦克风设置是否正确。 sudo apt-get install python-pyaudio python

qq_43556844的博客 1923

Windows SSDT Hook(二)

本文探讨了在32位与64位Windows系统中获取和分析SSDT(System Service Descriptor Table)基址的不同方法。在32位系统中,SSDT基址可直接通过导出的KeServiceDescriptorTable符号获取;而64位系统由于安全机制变化,需采用特殊技术手段,如通过MSR寄存器读取、特征码扫描内核映像或借助调试符号。文章还详细解析了64位SSDT中服务函数地址的计算方法,并提出了因地址范围限制而需使用跳转指令中转的Hook方案,包括12字节跳转代码结构和合适中转地址的选

qq_38933606的博客 1301

HDMI与DisplayPort混搭方案:如何用Xilinx Video PHY Controller实现多协议视频接口转换

本文详细解析了如何利用Xilinx Video PHY Controller IP核实现HDMI与DisplayPort协议转换,涵盖混合视频接口架构设计、GT收发器动态重配置策略及跨协议时钟域处理方案。通过实战案例和配置技巧,帮助开发者构建高性能多协议视频转换系统,适用于医疗影像、工业控制等场景。

weixin_30776273的博客 447

Windows SSDT Hook(一)

本文介绍了32位Windows系统中SSDT Hook的基本原理与实现方法。首先分析了Windows系统调用流程和SSDT表的作用机制,指出SSDT Hook在旧系统中的合法性与学习价值。接着详细讲解了如何获取系统调用号和SSDT表结构,包括32位与64位系统的差异。最后提供了两种绕过内存写保护的方法:通过修改CR0寄存器或使用MDL映射技术。文章强调虽然现代系统已加强保护,但理解这些底层机制对安全研究和驱动开发仍具有重要意义,可作为进一步学习系统内核保护与绕过的知识基础。

qq_38933606的博客 1205

一文梳理金融风控建模全流程(Python)

。借助A卡模型,银行或金融机构能够根据申请人的个人信息和历史数据,对其进行风险评估。这种评估能够帮助金融机构判断借款人是否具备偿还贷款的能力和意愿。

weixin_43420291的博客 4776

车辆网络安全ISO/SAE 21434解读(一)概述

ISO/SAE 21434 《道路车辆 网络安全工程》是SAE和ISO共同制定的一项针对道路车辆的网络安全标准,它是一个面向汽车行业全供应链(OEM及各级供应商)的车辆网络安全管理指导文件

xiaoxiabang的博客 8422

SSDT Hook的两种方式

#ifndef _SSDT_H_ #define _SSDT_H_ #include typedef struct _SERVICE_DESCRIPTOR_TABLE { PULONG ServiceTable; PULONG CounterTable; ULONG TableSize; PUCHAR ArgumentTable; }SERVICE_DESCRIPTOR_TABLE,

倒计时 2502

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RootKit hook之[二] SSDT hook

 作 者: combojiang时 间: 2008-01-12,23:00链 接: http://bbs.pediy.com/showthread.php?t=58199哈,好大一场雪啊,2008年的第一场雪,比以往来得早些。外面的雪在下,透过书房的窗,欣赏着外面的雪和过往的车辆,欣赏之余,便有了想写点东西的冲动。于是便有了本篇。谈到ssdt hook,先前有堕落天才的一篇文章《http://bb

1174

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HOOK SSDT

这篇文章是根据作者Tesla.Angela 在 看雪论坛 发布的文章所写 这个 X86还是比较好实现的  但是  X64 就有些绕了 而且   比较麻烦吧     其实x64做的保护 听容易看出来的   他先把ssdt 搞成动态 然后 又把 ssdt 放入的地址搞成偏移地址  这个让我有点奇怪     我先发一下  作者 Tesla.Angela的原话   知道了这一套机制,HOOK SS...

qq_41071646的博客 968

对于SSDT HOOK的疑惑和探索

先感谢“梦想的天空”提供这么优秀的学习资料 废话不多说,直接上疑问,仔细阅读原文第二篇 原文中间部分有这么一段话 从下面的代码中,我们看到在安装 Hook 和解除 Hook 时参数传递进去的是 ZwQuerySystemInformation, 这样很有可能会让很多朋友认为我们在 Ring0 下的 Hook 的是 ZwQuerySystemInformation, 如果你

u011365452的专栏 1083
上一篇: (转)反调试技术
下一篇: 最近
开发随笔
博客等级 码龄19年 6粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值