WebView2 应用突然白屏崩溃?可能是 DLP 加密软件的钩子注入导致的 FAIL_FAST(天锐绿盾排查实录)

一、问题现象

某台 Windows 机器上,桌面应用 Hermes Agent CN Desktop 启动后主窗口白屏,界面完全无法渲染,但进程在任务管理器里存在。

背景 :同一份应用包在一台新电脑(无安全软件管控)上测试运行完全正常 ;将包复制到当前这台电脑后,启动即白屏。软件本身没有问题,差异在环境

关键观察:

  • 同一份应用包,新电脑上运行正常,当前电脑上立即白屏------问题与环境强相关;
  • 白屏期间,WebView2 的数据目录下持续生成崩溃转储文件(Crashpad reports,.dmp);
  • 本机 Edge 浏览器(同内核 v151)完全正常,网页渲染、播放都无异常;
  • 只有使用 WebView2 Runtime 的独立应用崩。

白屏 + 渲染进程崩溃 + 浏览器正常,这是典型的 WebView2 渲染进程被"杀死" 的现象。

二、环境信息

项目
系统 Windows(深信服 Sangfor 虚拟化平台的虚拟机)
WebView2 Runtime v151.0.4129.107
Edge v151(正常)
异常码 0x80000003(STATUS_BREAKPOINT,通常由 FAIL_FAST 触发)
崩溃位置 WebView2 渲染进程(Renderer)
预装安全软件 天锐绿盾(Tipray)DLP 防泄密系统、深信服 VDI 客户端

三、初步排查:崩溃转储指向 FAIL_FAST

打开 data/webview2/EBWebView/Crashpad/reports/,发现 3 个 .dmp 文件,全部是渲染进程崩溃。

用调试器(或 WinDbg)读取异常码,全部为:

复制代码
0x80000003  (FAIL_FAST)

Chromium 的 FAIL_FAST 不是普通崩溃,它是进程主动自毁------通常发生在完整性自检失败时,例如:

  • 检测到进程被注入未签名非白名单的 DLL;
  • 渲染器代码完整性(Renderer Code Integrity)校验失败;
  • 沙箱(Sandbox)完整性被破坏。

也就是说:有第三方 DLL 被强制注入到了 WebView2 渲染进程,触发了 Chromium 的完整性保护,进程直接自杀。

四、对比实验:为什么 Edge 不崩,WebView2 崩?

同样的内核、同样的版本,Edge 正常而独立 WebView2 应用崩溃,差异在哪?

逐个做对照实验:

场景 结果 结论
应用包在新电脑(无管控)运行 ✅ 正常 排除应用本身问题,差异在环境
Edge GUI 正常浏览 ✅ 正常 Edge 已被安全软件"豁免"(白名单)
Edge headless 渲染 ✅ 正常 同上
WebView2 独立应用 ❌ FAIL_FAST 未被豁免,钩子注入后崩溃
旧版 WebView2 Runtime ✅ 正常 旧版完整性检查较宽松,容忍注入

结论非常清晰:同一份应用,新电脑正常、这台崩溃,唯一变量就是这台机器上有安全软件向所有 GUI 进程注入钩子 DLL,Edge 在白名单里躲过一劫,WebView2 应用撞上了完整性检查。

顺藤摸瓜,在进程模块列表中找到了两个可疑注入:

复制代码
C:\Windows\System32\LdxHook64.dll
C:\InetPub\ftproot\Tipray\LdRead\LdWaterMarkHook64.dll

LdxHook64.dll + 屏幕水印钩子(LdWaterMarkHook64)------这是 天锐绿盾(Tipray)DLP 防泄密系统的组件。真相浮出水面。

五、根因分析:天锐绿盾 DLP 的工作原理

天锐绿盾是国内常见的终端 DLP(数据防泄密)软件,它的工作方式决定了它会"管到"每一个进程:

  1. 内核驱动层LdDisk.sys(磁盘透明加解密过滤驱动)、Ldxghcore.sys(加密核心驱动)挂在文件系统上,对所有读写做透明加解密;
  2. 用户态注入层 :通过 Detours 钩子(LdxHook64.dll / LdxHook32.dll)向所有 GUI 进程 注入 DLL,实现屏幕水印、文件操作监控、打印管控(LdPrintMonitor)等;
  3. 服务层LdxFileServer 服务负责策略下发、日志回传。

而 WebView2/Chromium 的渲染进程 在启动时会做完整性自检(Renderer Code Integrity + 沙箱校验),一旦发现进程里被注入了非白名单/未签名 DLL ,直接 FAIL_FAST 自杀------这就是白屏的根因:

复制代码
WebView2 渲染进程启动
        ↓
检测到 LdxHook64.dll 注入(非白名单)
        ↓
完整性自检失败 → FAIL_FAST (0x80000003)
        ↓
渲染进程崩溃 → 应用白屏

六、解决方案

方案一(应急):禁用 WebView2 的完整性自检

设置用户级环境变量,让 WebView2 渲染进程以降级模式启动:

powershell 复制代码
# 临时生效
setx WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS "--no-sandbox --disable-gpu --disable-features=RendererCodeIntegrity"

# 同时持久化到注册表(HKCU\Environment),防止部分版本不读环境变量

对应注册表项:

复制代码
HKCU\Environment
    WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = --no-sandbox --disable-gpu --disable-features=RendererCodeIntegrity

关键参数说明:

参数 作用
--no-sandbox 禁用 Chromium 沙箱,钩子注入不再触发启动期 FAIL_FAST(最关键
--disable-gpu 关闭 GPU 加速,减少渲染链路不确定性
--disable-features=RendererCodeIntegrity 关闭渲染器代码完整性校验

验证结果 :设置后 WebView2 渲染进程稳定存活(6 个 msedgewebview2.exe 进程),应用界面正常渲染,崩溃转储停止产生。

⚠️ 注意 :此方案会降低 WebView2 的沙箱隔离与代码完整性保护,只能作为应急手段,不应长期保留。

方案二(治本):禁用绿盾的服务与内核驱动

绿盾核心由三部分组成,逐个处理:

powershell 复制代码
# 管理员 PowerShell

# 1. 停止并禁用文件服务器服务
Stop-Service -Name LdxFileServer -Force
Set-Service  -Name LdxFileServer -StartupType Disabled

# 2. 禁用加密核心驱动(重启后不再加载)
sc.exe config Ldxghcore start= disabled

# 3. 禁用磁盘透明加密驱动 ------ 注意!服务名带 .sys 后缀!
sc.exe config LdDisk.sys start= disabled

⚠️ 踩坑sc.exe config LdDisk start= disabled 会报 1060(指定的服务未安装) ,因为该驱动的真实服务名是 LdDisk.sys(带 .sys 后缀) 。用 sc.exe query LdDisk.sys 或查注册表 HKLM\SYSTEM\CurrentControlSet\Services 才能看到真名。

验证(重启后):

powershell 复制代码
sc.exe query LdDisk.sys     # 期望 STATE: STOPPED + START_TYPE: DISABLED
sc.exe query Ldxghcore      # 期望 STATE: STOPPED + START_TYPE: DISABLED
Get-Service LdxFileServer   # 期望 Stopped / Disabled

方案三(正规):联系 IT 将应用加入豁免白名单

最稳妥的做法是让管理员在绿盾/深信服 DLP 控制台中将 msedgewebview2.exe 加入豁免/信任列表 ,关闭对其的钩子注入与屏幕水印。豁免后即可移除 --no-sandbox 等降级参数,恢复 WebView2 完整安全沙箱。

七、踩坑记录

排查中遇到几个容易误导人的坑,记录如下:

  1. "已卸载"不等于"已停止" :绿盾的注册表卸载项、开始菜单条目被清除后,看起来像卸载了;但实际上 LdxFileServer 服务、两个内核驱动仍在运行,客户端 log\ 目录还在持续写入。清卸载入口 ≠ 停核心组件,判断是否卸载必须查服务与驱动状态。
  2. 服务名陷阱LdDisk 的真实服务名是 LdDisk.syssc 查询/配置时名字写错直接报 1060,极易误判为"服务不存在"。
  3. 内核驱动无法在线卸载Ldxghcore 配置为 Disabled 后当前会话仍显示 RUNNING,这是正常现象------内核驱动需要重启系统 后才真正卸载,fltmc unload 对非 minifilter 驱动也会报"找不到筛选器"。
  4. 非管理员权限报"拒绝访问"Stop-Service/Set-Service 必须以管理员身份运行,普通会话会报"无法打开服务/拒绝访问"。
  5. 域策略可能回弹 :如果机器在域/管控网络中,重启后安全策略刷新可能把服务重新改回 Automatic。若发现回弹,说明是服务端强制下发,本地禁用无效,必须走 IT 渠道。

八、验证清单

修复完成后,按以下清单逐项确认:

  • WebView2 应用(Hermes)正常显示界面,不再白屏
  • Crashpad/reports/ 目录不再产生新的 .dmp
  • msedgewebview2.exe 渲染进程稳定存活(多个进程)
  • Get-Service LdxFileServerStopped / Disabled
  • sc.exe query LdDisk.sysSTOPPED / DISABLED
  • sc.exe query LdxghcoreSTOPPED / DISABLED
  • 绿盾客户端 log\ 目录停止更新

九、总结

  • 现象 :WebView2/Chromium 应用白屏、渲染进程 FAIL_FAST (0x80000003)
  • 根因 :天锐绿盾 DLP 通过 Detours 向所有 GUI 进程注入 LdxHook64.dll 等钩子,Chromium 完整性自检失败后进程自毁;Edge 因在白名单中不受影响;
  • 应急WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--no-sandbox --disable-gpu --disable-features=RendererCodeIntegrity(有安全代价);
  • 治本 :禁用 LdxFileServer 服务 + LdDisk.sys/Ldxghcore 驱动后重启(注意服务名带 .sys 后缀的坑);
  • 正规 :联系 IT 在 DLP 控制台豁免 msedgewebview2.exe,恢复完整安全沙箱。

如果你也遇到"某 Chromium 内核应用突然白屏、浏览器却正常"的情况,不妨先看一眼进程模块列表里有没有 LdxHookLdWaterMarkHook64 之类的注入 DLL------大概率就是 DLP/加密软件的锅。


相关推荐
GoppViper1 小时前
旅游行业GEO引擎优化:精准关键词布局策略与实操指南
经验分享·旅游
小HANN1 小时前
保姆级实战:CentOS7 搭建 LAMP 环境部署 WordPress 个人博客
linux·运维·服务器·经验分享
wjcroom1 小时前
在PVE中的直通和共享文件访问
网络·经验分享·虚拟化
德思特2 小时前
国产GNSS模拟器崛起:高端性能如何突破技术壁垒实现国产替代?
经验分享
从零开始的嵌入式之旅2 小时前
day31
linux·c语言·经验分享·笔记·嵌入式硬件
德思特17 小时前
从部署到优化:德思特手持式频谱仪的5G快速部署测试方案
经验分享
沙盘客19 小时前
AFSIM 示例解读(09)· 传感器全家桶 sensor_demos(下):ESM / SAR / 被动测向
c++·经验分享·后端
IT小白杨20 小时前
2026游戏工作室环境隔离指南:从设备指纹到移动IP的部署实践
前端·经验分享·网络协议·tcp/ip·游戏·安全架构·指纹浏览器
GoppViper20 小时前
用户测试如何提升SEO转化率?四种实操方法与案例解析
数据库·经验分享