与SSDT有关,但本质应该是C++指针问题
#pragma pack(1)
typedef struct ServiceDescriptorEntry {
unsigned int *ServiceTableBase;
unsigned int *ServiceCounterTableBase; //Used only in checked build
unsigned int NumberOfServices;
unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry, *PServiceDescriptorTableEntry;
#pragma pack()
extern "C" ServiceDescriptorTableEntry KeServiceDescriptorTable;
现在已经验证如下代码(HOOK1)能够成功HOOK:
ULONG index = *(PUCHAR)((PUCHAR)ZwOpenProcess+1);
ULONG ulBaseAddr = *(KeServiceDescriptorTable.ServiceTableBase);
PULONG SSDT_NTOpenProcess = (PULONG)(ulBaseAddr + index*4);
OldZwOpenProcess = (ZWOPENPROCESS)(*SSDT_NTOpenProcess) ;
*SSDT_NTOpenProcess = (unsigned long)NewZwOpenProcess;
index就是表索引,用SB代替KeServiceDescriptorTable.ServiceTableBase,那么HOOK1代码里通过对SB使用*取值获得表地址。
但很多SSDT HOOK的代码并不是这么计算的,而是用一个这样的宏#define SYSTEMSERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[*(PUCHAR)((PUCHAR)_function+1)]
该宏的中心应该是通过对SB[index]来获得表元素。
我的问题是不能理解SB既可以*SB取得表地址,又可以SB[index]获得表元素。想做一个简单的模拟都不成功,比如int Table[3] = {1,2,3};PUING pt = Table;那么pt[x]可以取表元素没有错,但*pt则不是表地址。如果是二级指针的话,*能得到表地址,但[]却不是表元素。
相关推荐
SSDT.zip_hook_hook nt_hook ssdt_ssdt_ssdt hook
SSDT Hook nt!zwReadVirtualMemory 的完整代码
仿游戏反作弊系统中SSDT Hook检测与恢复应对技术实战
简介:本文深入探讨“仿游戏检测被恢复的SSDT Hook”这一核心技术,聚焦于Windows内核层面的系统服务描述表(SSDT)钩子机制在游戏反作弊中的应用。通过模拟游戏对SSDT Hook的检测行为,并应对钩子被恢复的情况,揭示反作弊与绕过之间的攻防对抗。结合C++语言与R0级驱动开发,文章详细解析了SSDT Hook原理、内核模式编程、反作弊监控策略及SDK设计思路,涵盖驱动安全性、稳定性和逆向对抗等关键问题。本技术方案适用于需要高强度系统控制与防护的场景,为开发高性能反作弊模块提供实践指导。
Windows内核SSDT Hook原理与实战:进程注册表驱动拦截
SSDT(系统服务分发表)是Windows内核中用于分发用户态NTAPI调用的核心机制,其本质是通过修改ntoskrnl.exe导出的函数指针数组,实现对NtCreateProcess、NtSetValueKey、NtLoadDriver等关键系统服务的入口级拦截。该技术区别于Minifilter(I/O层)和ETW(事件审计),具备同步阻断能力,是实现进程创建管控、注册表写入禁止及.sys驱动加载拦截的底层基础。在Win10/11环境下,需结合WDK开发、驱动签名适配、PatchGuard规避及IRQL安
C++ D3D内存交互框架:基于CE原理的工程化逆向开发方案
内存交互是Windows应用逆向与调试的核心基础能力,其本质涉及进程内存空间建模、指针链动态解析、图形API钩子注入等关键技术。理解VirtualProtectEx与WriteProcessMemory的底层协作机制,掌握ASLR基址校准和IAT劫持原理,可显著提升内存读写稳定性与渲染层控制精度。该技术广泛应用于游戏调试、安全研究、图形插件开发及Unity/UE引擎辅助工具链构建。本文聚焦于一套开源C++实现的D3D9内存交互框架,深度融合Cheat Engine底层逻辑与现代C++工程实践,提供可编译、可
Windows进程隐藏原理与三层实现技术解析
进程隐藏是理解Windows内核对象管理与内存抽象的关键切入点。其本质并非单纯规避检测,而是深入操作系统进程生命周期——从用户态API枚举、内核SSDT钩子拦截,到EPROCESS链表操作与CR3页表隔离,每一层都对应不同IRQL级别下的数据结构控制逻辑。C++开发者通过动手实践可掌握PsActiveProcessHead链表维护、NtQuerySystemInformation返回结构解析、驱动签名与测试模式配置等核心技能;安全工程师借此厘清EDR对API调用、内存扫描及行为建模的检测维度。本技术路径既是


