大小一样、版本一样为什么一个 Chromedriver 被反爬另一个却畅通无阻一场由fc /b命令引发的二进制探案实录诡异的现场两个“一模一样”的驱动行为却截然相反最近在做 Web 自动化测试时遇到了一个令人匪夷所思的场景。手头有两个chromedriver.exe文件右键属性 → 详细信息 → 文件版本、产品版本完全一致。文件大小字节数一模一样。甚至连文件名的拼写都分毫不差。按常理推断这就是两个完全相同的文件。然而当我在 Selenium 中分别调用它们去访问同一个带有反爬机制的网站时结果却大相径庭驱动 A位于 F 盘浏览器正常打开页面加载完整数据抓取如丝般顺滑。驱动 B位于 D 盘页面直接返回 403 错误或者无限跳转验证码甚至直接白屏——典型的被反爬虫系统识别为自动化工具的后果。这不禁让我怀疑这两个文件真的只是“看起来”一样吗第一回合绕过版本号直击二进制真相既然表面信息无法解释差异那就必须祭出 Windows 自带的文件对比工具fcFile Compare让它用最原始的二进制方式告诉我答案。在命令行中敲下fc /b F:\seleniumdriver\chromedriver.exe D:\workspace-explore\selenium\src\chromedriver.exe屏幕上很快滚动出一长串差异报告。我截取了其中最关键的一小段00CB489F: 63 77 00CB48A0: 6F 69 00CB48A2: 73 64 00CB48A4: 6C 77 00CB48A5: 65 2E 00CB48A6: 2E 63 00CB48A7: 6C 64 00CB48A8: 6F 63看到这里真相已经呼之欲出。让我们把这些十六进制数字翻译成人类可读的 ASCII 字符偏移地址左边 (F盘) 十六进制ASCII 字符右边 (D盘) 十六进制ASCII 字符00CB489F63c77w00CB48A06Fo69i00CB48A273s64d00CB48A46Cl77w00CB48A565e2E.00CB48A62E.63c00CB48A76Cl64d00CB48A86Fo63c结论一目了然F 盘驱动能用的那个内藏字符串cosle.loD 盘驱动被反爬的那个内藏字符串widw.cdc两个文件的差异不在于代码逻辑的大规模重构而仅仅在于这8 个字节的不同。但正是这 8 个字节决定了浏览器在网站眼里是“真人”还是“机器人”。第二回合解码cdc幽灵——Chromedriver 的阿喀琉斯之踵为什么 D 盘文件里保留的cdc这三个字母如此致命这要从 Chromium 内核的自动化机制说起。为了能让外部程序如 Selenium、Puppeteer控制浏览器Chrome 开发者们在 JS 运行环境中预埋了一个环境变量。在未经修改的 Chromedriver 启动浏览器时会在页面的window对象下挂载类似这样的属性var$cdc_asdjflasutopfhvcZLmcfl_// ... 内部对象网站的反爬脚本根本不需要读懂这一长串乱码到底代表什么它只需要在 JS 中执行一条简单的正则判断// 检测当前环境是否存在以 $cdc_ 开头的属性if(Object.keys(window).some(keykey.includes(cdc))){// 判定为机器人立即拦截blockRequest();}D 盘驱动中的widw.cdc恰好保留了.cdc这个特征子串导致网站的反爬规则一击必中。F 盘驱动中的cosle.lo则被某位无名大侠用十六进制编辑器进行了“等长替换”手术。他把原本属于cdc的十六进制值63 64 63改成了73 6C 65对应字母sle彻底抹去了cdc关键词。由于替换前后的字节数相同既骗过了反爬系统又没有破坏 PE 文件的结构对齐更没有让文件体积发生哪怕一个字节的改变。第三回合解密“大小不变”的魔术——PE 文件的数学美感很多朋友可能会疑惑修改了文件内容为什么文件大小还能保持不变这并非魔法而是 Windows 可执行文件PE 格式的区块对齐机制使然。PE 文件在磁盘上的存储是以512 字节或 4KB为最小分配单元的。链接器在生成 exe 时如果有效数据没有填满最后一个对齐块会用大量的00空字节进行填充。举个例子真实代码体积2,345,678 字节。下一个 512 对齐边界2,346,496 字节。中间多出来的818 个字节全是无意义的填充区Padding。黑客所做的等长替换相当于在一篇 Word 文档里把所有的“狗”替换成“猫”——字符数量没变文章总字数自然没变。只要修改量没有突破填充区的冗余空间文件落盘大小就是纹丝不动的。总结给你的 Selenium 侦察兵换上“便衣”通过这次二进制对比探案我们可以得出以下几条实用建议1. 不要迷信“文件大小”和“版本号”在反爬攻防领域MD5 / SHA256 哈希值才是检验文件是否被篡改的唯一真理。大小一样不代表内容一样。2. 默认的官方驱动是“裸奔”的如果你发现 Selenium 一打开就触发验证码不妨打开 F12 控制台输入navigator.webdriver。如果返回true说明你的驱动正穿着工装大喊“我是机器人”。3. 两种合规的防检测方案方案一自行寻找针对特定 Chrome 版本发布的“Undetected Chromedriver”或“Patched Chromedriver”就是 F 盘那种做过字节替换的。方案二在代码中显式添加启动参数并复用真实用户数据目录options.add_argument(--disable-blink-featuresAutomationControlled)options.add_argument(--user-data-dirC:/Users/你的用户名/AppData/Local/Google/Chrome/User Data)4. 安全警示本文涉及的二进制补丁技术仅用于合法合规的自动化测试、数据采集研究。由于修改后的文件并非官方编译产物严禁在非受控环境中运行来历不明的 exe 文件以防其中捆绑恶意代码。下次再遇到那个“一模一样的双胞胎”驱动记得先用fc /b命令给它们做一次彻底的“DNA 鉴定”。真相往往就藏在那些肉眼看不见的字节里。