【逆向】Windows 系统调用流程 + SSDT/ShadowSSDT/ETW/VT Hook + 内核 / 用户层区别

一、Windows 系统调用完整执行流程

  1. 用户态API(如ReadProcessMemory)调用ntdll.dll里的Native API
  2. Native API 将系统调用号 存入EAX/RAX,参数入栈/寄存器
  3. 执行sysenter/syscall指令,从用户态切到内核态
  4. 内核找到MSR寄存器指向的系统调用入口KiSystemCall64
  5. 校验参数、线程模式、栈,进入系统调用分发
  6. 查SSDT得到内核函数地址,调用对应内核服务
  7. 执行完将结果返回EAX/RAX,通过sysexit/sysret切回用户态
  8. 逐层返回,完成系统调用

二、四种系统调用Hook实现原理

1. SSDT Hook(系统服务描述表)

  • 作用:Hook普通原生系统调用(进程/线程/内存/文件)
  • 原理:修改SSDT表中函数地址,指向自己的过滤函数
  • 适用:x86时代主流;x64受KVA Shadow/PG保护,极难稳定

2. ShadowSSDT Hook(影子系统服务表)

  • 作用:HookWin32k GUI系统调用(窗口、消息、渲染)
  • 原理:结构与SSDT类似,专门处理GUI相关系统调用
  • 限制:仅GUI线程使用,同样受内核保护

3. ETW Hook(事件追踪)

  • 作用:非侵入式监控系统调用,不修改内核代码/表
  • 原理:系统调用进入/离开时会触发ETW事件,注册回调捕获
  • 优点:稳定、不被PatchGuard杀、兼容性极强
  • 缺点:只能监控,无法阻断/修改参数

4. VT Hook(虚拟化Hook)

  • 作用:最高权限、底层拦截,可穿透绝大多数防护
  • 原理:利用CPU虚拟化,将系统置于VMX非根模式
  • syscall触发VM-Exit,由VMM拦截处理
  • 优点:可Hook任意指令/函数,无法被常规手段检测
  • 缺点:开发复杂、依赖CPU虚拟化支持

三、内核态 Hook vs 用户态 Hook

用户态 Hook

  • 位置:IAT、Inline、内存、DLL注入
  • 范围:仅限当前进程
  • 权限:低,易被反调试、保护进程拦截
  • 实现:简单、稳定、开发快
  • 场景:普通逆向、游戏辅助、应用层安全

内核态 Hook

  • 位置:SSDT、内核函数、Minifilter、驱动回调
  • 范围:全局,所有进程
  • 权限:高,可监控/拦截系统级行为
  • 风险:易触发PatchGuard/蓝屏,受KVA Shadow保护
  • 场景:安全软件、反作弊、DMA配套、系统监控

四、总结

系统调用:用户态→sysenter→内核→查SSDT→执行内核函数→返回。SSDT/ShadowSSDT是修改系统调用表;ETW是无侵入监控;VT是虚拟化底层拦截。用户态只管单进程、简单安全;内核态全局生效、权限高但风险大、受PG/KVA限制。

相关推荐
Nontee1 小时前
Quartz 新手入门:定时任务的两个承诺
开发语言·windows·python
weixin_437961921 小时前
Docker安装(windows)
windows·docker·容器
kyle~1 小时前
Windows 多 AP 同名 Wi-Fi 网络异常问题复盘
网络·windows
持敬chijing2 小时前
白盒测试与代码审计-Claude Code Windows环境搭建
windows·安全·网络安全·网络攻击模型
Uncertainty!!1 天前
Windows 10 与 Ubuntu 22.04 通过 Samba 共享文件夹
windows·ubuntu·共享文件夹
百事牛科技1 天前
如何创建7Z压缩包?Windows下7-Zip操作方法
windows·7-zip
池央1 天前
Windows本地部署Qwen3.8实战:LM Studio、Cherry Studio、远程API与Token鉴权
windows
泡海椒2 天前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
钱栈up2 天前
耳机音效不对,我顺手查了系统更新,结果挖出个崩溃了整天的服务
windows·shell