Windows UAC consent.exe内存块结构与替换拦截技术问询
Windows UAC consent.exe 相关内核安全问题解答
1. consent.exe 启动命令行第三个参数对应内存块结构
- 该结构属于未公开的内部系统结构,MSDN、《Windows Internals》等官方/权威文档均无记载,仅能通过逆向工程分析推导。
- 命令行参数含义:
consent.exe <AppInfo_PID> <Block_Size> <Block_Address>中,第三个参数是AppInfo服务对应svchost进程内的共享内存块地址,该内存块由AppInfo服务创建并映射到consent.exe进程空间。 - 已解析的常见字段:包含请求权限提升的可执行文件路径字符串、父进程信息、权限请求类型(管理员/系统权限)、会话ID等。
- 逆向分析方法:
- 用WinDbg附加到AppInfo服务对应的svchost进程,通过
!process <AppInfo_PID> 0定位进程,再执行dq <Block_Address>查看内存块原始数据。 - 对比不同场景下的内存块内容:比如请求不同程序的权限提升、不同UAC级别(通知/静默)下的结构差异,逐步推导字段偏移和含义。
- 参考安全社区逆向成果:部分安全研究人员会在技术分享中披露此类未公开结构的分析细节。
- 用WinDbg附加到AppInfo服务对应的svchost进程,通过
2. 替换自定义consent.exe的实现方法
- 替换/挂钩AppInfo服务DLL:这是你监控到的可行路径,AppInfo服务(appinfo.dll)负责启动consent.exe,可通过两种方式修改:
- 替换原始DLL:appinfo.dll位于
%SystemRoot%\System32,受系统文件保护(SFC),替换前需临时修改注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SFCDisable值为0xffffff9d,操作完成后恢复。 - API钩子技术:用MinHook、Detours等工具在svchost进程中挂钩appinfo.dll内的启动函数,无需替换原始DLL即可修改consent.exe的启动路径。
- 替换原始DLL:appinfo.dll位于
- 直接替换系统目录下的consent.exe:替换
%SystemRoot%\System32\consent.exe,但需绕过SFC限制,且易被系统更新覆盖,同时会触发安全软件告警。 - 内核级进程拦截:通过签名内核驱动(或测试模式下运行)拦截
NtCreateProcessEx/NtCreateUserProcess系统调用,检测到启动consent.exe时替换为自定义程序路径。 - 组策略自定义界面(非完全替换):通过组策略可修改UAC提示界面元素,但无法完全替换consent.exe的核心逻辑。
内容的提问来源于stack exchange,提问作者Joseph Willcoxson
相关产品推荐
相关产品推荐

