You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不关闭Patch Guard的64位Windows中Hook WinAPI系统调用?

在不关闭Patch Guard的64位Windows中Hook系统API的可行方法

是的,存在多种合法且不会触发Patch Guard(PG)的方法来Hook WinAPI系统调用,以下是主流实现方案,同时针对你的CreateProcessA拦截需求和全局Hook场景做具体说明:

一、用户模式Hook(无内核驱动,PG完全不干预)

用户模式Hook是最易实现且无需内核权限的方案,PG仅监管内核态的非法修改,对用户态操作无限制。常见的实现方式包括:

  • IAT Hook:修改目标进程的导入地址表(IAT),将CreateProcessA的指向替换为自定义函数。在自定义函数中可检查传入的lpApplicationName、lpCommandLine等参数,判断是否需要阻止调用(直接返回FALSE或自定义错误码),若允许则调用原函数。
  • Inline Hook:直接修改目标函数的开头指令,跳转到自定义逻辑。相比IAT Hook,Inline Hook可Hook导出函数(EAT)或未导入的函数,支持更多场景。
  • 全局Hook:通过SetWindowsHookEx或注入DLL到所有进程的方式,实现全局范围内的API监控。比如注入DLL到所有进程后,Hook每个进程的CreateProcessA,即可全局拦截进程创建请求。

工具推荐:微软官方的Detours库,封装了用户模式Hook的实现细节,可快速完成API拦截逻辑。

二、内核态合法回调机制(官方接口,PG允许)

若需要更底层、更全局的监控/拦截,可使用Windows提供的官方内核回调API,这些接口是微软公开的,不会触发PG检测:

  • ObRegisterCallbacks:注册对象回调,可在进程、线程、文件等对象创建/打开前拦截请求。针对CreateProcessA的场景,可在进程对象的预创建回调中,检查进程的启动参数、父进程信息等,通过返回STATUS_ACCESS_DENIED阻止进程创建。
  • PsSetCreateProcessNotifyRoutineEx2:注册进程创建/退出的通知回调,可在进程创建前后获取进程信息,虽无法直接阻止创建,但可配合其他机制(比如立即终止违规进程)实现类似效果。
  • CmRegisterCallbackEx:用于注册表操作的监控与拦截,适用于Hook注册表相关API的场景。
  • FsRtlRegisterFileSystemFilterCallbacks:用于文件系统操作的监控与拦截,适用于Hook文件相关API的场景。

注意:内核态回调需要编写签名的驱动程序,64位Windows要求驱动必须经过微软签名(测试模式除外),需通过Windows硬件开发者计划获取签名权限。

三、Windows Defender的实现逻辑参考

Windows Defender并未使用SSDT Hook,而是结合了多种合法机制:

  1. 用户模式:通过全局DLL注入,监控进程的API调用(比如CreateProcessA、OpenProcess等),当检测到针对自身进程的恶意操作(如sc stop WinDefend)时触发警报。
  2. 内核态:通过ObRegisterCallbacks注册进程保护回调,阻止外部进程打开或终止Defender的核心进程。
  3. 策略控制:结合WDAC(Windows Defender Application Control)的规则,限制未授权的进程操作。

四、全局Hook大多数API的注意事项

  • 用户模式全局Hook需要处理不同进程的兼容性问题,比如ASLR、DEP、进程位数(32位/64位)差异,以及受保护进程(如系统进程、Defender进程)的注入限制。
  • 内核态回调需遵循微软的API规范,避免使用未公开接口,否则可能因系统更新导致失效。
  • 所有拦截逻辑需保证性能,避免过度拦截导致系统卡顿。

内容的提问来源于stack exchange,提问作者GEOEGII555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:13:37