解决Windows编译Chromium源码后出现的「Pardon the Interruption」错误
解决Windows编译Chromium遇「Pardon the Interruption」拦截的源码修改方案
网站的拦截逻辑不止看User-Agent,还会校验Chromium的平台特征指纹——自行编译的Windows版Chromium,和Edge、官方Chrome这类商用Chromium浏览器的指纹差异太大,才会被判定为异常客户端。下面是具体的源码修改点:
一、修正浏览器品牌标识(Brand List)
现在很多网站会通过navigator.userAgentData.brands识别浏览器,自行编译的Chromium默认品牌列表和官方Chrome不一样,直接修改这个:
- 目标文件:
third_party/blink/renderer/core/frame/navigator_user_agent.cc - 定位到
NavigatorUAData::GetBrands()方法,把返回的品牌数组替换为和官方Chrome一致的内容:
版本号对应你编译的Chromium版本,或者直接使用当前稳定版Chrome的版本号。Vector<mojom::blink::BrandVersionPtr> NavigatorUAData::GetBrands() const { Vector<mojom::blink::BrandVersionPtr> brands; brands.emplace_back(mojom::blink::BrandVersion::New(" Not A;Brand", "99")); brands.emplace_back(mojom::blink::BrandVersion::New("Chromium", "118")); brands.emplace_back(mojom::blink::BrandVersion::New("Google Chrome", "118")); return brands; }
二、统一系统平台指纹
网站还会读取navigator.platform、navigator.oscpu,自行编译的版本可能返回原始标识,改成官方Chrome的标准值:
- 目标文件:
third_party/blink/renderer/core/frame/navigator.cc - 修改
Navigator::platform()和Navigator::oscpu()方法:String Navigator::platform() const { return "Win32"; // 64位系统也可保持该值,官方Chrome默认返回这个 } String Navigator::oscpu() const { return "Windows NT 10.0; Win64; x64"; // Win11的标识和该值一致,无需修改 }
三、修改程序核心标识
部分网站会检测浏览器的进程名、产品名称,自行编译的Chromium默认名称和官方不一样,修改以下两处:
- 目标文件:
chrome/common/chrome_constants.cc - 修改
kProductName和kExecutableName:const base::FilePath::CharType kProductName[] = FILE_PATH_LITERAL("Google Chrome"); const base::FilePath::CharType kExecutableName[] = FILE_PATH_LITERAL("chrome.exe"); - 额外修改
chrome/app/chrome_exe.rc(Windows资源文件),把里面的产品名称、文件描述改成和官方Chrome完全一致,避免资源层面的指纹差异。
四、对齐V8引擎标识
部分高级指纹检测会校验V8引擎的版本和嵌入方信息,修改此处:
- 目标文件:
v8/src/version.cc - 修改
kVersion和kEmbedder字段,对应你Chromium版本的官方V8版本号:const char* const kVersion = "11.8.172.13"; // 替换为你编译版本对应的V8版本号 const char* const kEmbedder = "Google Chrome";
编译验证
改完所有文件后,重新执行编译命令:
autoninja -C out/Default chrome
编译完成后打开浏览器,测试之前被拦截的网站即可。
内容的提问来源于stack exchange,提问作者Jaspreet Singh
相关产品推荐
相关产品推荐

