飘在云端

东西南北,海角天涯

· 浏览器 · · 185次浏览

谷歌浏览器真·关闭下载警告拦截/下载完病毒扫描/允许下载完自动打开

之前写的文章,太过凌乱,目前已归档,前文:https://www.0z.gs/webDevelopment/shabi-Chrome.html ,新方法梳理重写到本篇文章


更新时间:2023-3-7

我将陆续更新新方法,现在是第一部分内容

访问以下网址可能需要魔法

https://chromium.googlesource.com/chromium/src/+/refs/heads/main/components/safe_browsing/content/resources/BUILD.gn
https://chromium.googlesource.com/chromium/src/+/refs/heads/main/components/safe_browsing/content/resources/gen_file_type_proto.py
https://chromium.googlesource.com/chromium/src/+/main/chrome/browser/resources/safe_browsing/README.md

我们先看看 gen_file_type_proto.py 做了什么事

将 ASCII 编码的 download_file_types.asciipb 源码文件转换为二进制文件。为每个平台系统生成一个单独文件,只包含该系统所需的值。
导入了一些模块,如 os,re 和 sys。它还从 binary_proto_generator 模块中导入了 BinaryProtoGenerator 类

脚本定义了一个名为 DownloadFileTypeProtoGenerator 的类,该类继承自 BinaryProtoGenerator 类。它定义了几个方法,用于导入协议模块、创建空白协议缓冲区实例、验证协议缓冲区中基本值、使用解析后的协议缓冲区生成二进制协议以及添加和验证命令行选项。
定义了一些辅助函数,用于过滤给定平台类型的协议缓冲区、修改文件类型的平台设置以及创建输出文件所需的子目录。

可以运行这个脚本来将 ASCII 编码的 download_file_types.asciipb 协议转换为二进制的成品文件。并使用参数来指定要为哪个平台类型生成文件。

从脚本里可以看到可能有很多依赖模块,搞不好可能得下载整个项目去编译,我连尝试单独构建 pb 二进制的想法都没有,那我们直接看文件的数据吧

使用 winhex 工具,比较二进制文件的原始底层数据,以十六进制查看,并设定字符集为 ASCII ,对比编译前的原型源码文件 download_file_types.asciipb,根据源码文件,挑选一些默认状态下被定义为安全类型的后缀名,找到每个后缀名的数据区间,并分析它们的数据结构

我们先读取文件头的一段数据,选定范围为文件头第1个数据到第一个后缀名 jpg ascii 编码前面的数据

08 3A 15 0A D7 23 3C 1A 10 0A 03 6A 70 67 10 C2 02 20 00 2A 04 10 00 18 01 1A 11 0A 04

上面中的 6A 70 67 是 jpg 的 ascii 编码,多找几个后缀名的 ascii 编码数据,对比分析,结合 ASCII 对应编码表

可得出 08 3A 15 0A D7 23 3C 1A 10 0A 03 这一段中,0A 03,0A 是一个开始标志,后面跟随的 03 表示后缀长度,如果是 jpeg ,则为 0A 04,bzip2,则为 0A 051A 10表示特定作用,3C ascii 对应字符是 <,这里应该是文件内容前面的一些注释说明结束了,后面都是定义不同扩展名的行为数据了,也就是文件头数据是 08 3A 15 0A D7 23 3C

我们继续看上面的那段数据,知道了开头,寻找 jpg 这段数据内容的结尾,可以看到在 18 01 1A 11 0A 04中出现了重复部分,0A 04描述了下一个后缀名的长度,因为文件开头区域是截止到 3C,在描述后缀名前的数据只有 1A 10,这里与 1A 11 结构相似,应该是特定作用

最后,jpg 的数据定义区间就出来了,后缀名 6A 70 67之后的数据结构不急,我们继续与其他后缀名数据多对比几个,就知道作用了

1A 10 0A 03 6A 70 67 10 C2 02 20 00 2A 04 10 00 18 01

我们继续分析,到了第一个 avif 后缀名,发现数据结构变化

1A 11 0A 04 61 76 69 66 10 8D 03 20 00 2A 04 10 00 18 01

开头不再是 1A 10,而是 1A 11 打头了,多对比几个后缀名数据结构,并查看原型源码文件 download_file_types.asciipb,注意到 紧跟 后缀名的 ascii 编码,有个 10 xx的数据结构,10 可以理解为一个分隔符,表示该后缀名的某些定义开始,并且源码中有个 uma_value 字段,经过大量数据对比,虽然有些不符合,10 xx 中的 xx 基本就是 uma_value 值,根据编译脚本内容,这个值其实就是给每一个后缀名分配的唯一 ID

txt 为例,这段数据中

10 CD 02 20 00 2A 04 10 00 18 01 1A 10 0A 03 74 78 74 10 CE 02 20 00 2A 04 10 00 18 01 1A 14

18 01 表示该类型文件是安全的,允许完成后自动打开,18 00 则为始终不允许自动打开,在 0A 03开始,0A 类似一个分隔符作用,表示开始新的一个后缀名规则,03 表示后缀名长度,紧接着是 74 78 74(txt 的 assci 值)

根据目前的分析结果,先测试一下加白所有后缀名,浏览器安全浏览保护级别设置为关闭,这样就会单独触发后缀名风险类型拦截

保留开头的 08 3A 15 0A D7 23 3C,选择之后的数据到文件末尾的 22 0A 10 12 20 02 2A 04 10 00 18 01 28 0A之间的区域,填充为 0,保存,重启浏览器

测试 URL 样例 1,崩坏3 桌面服客户端下载器,访问 https://www.bh3.com/ ,点击 崩坏3桌面服下载,点击 官方下载器,下载直链:https://bundle.bh3.com/public/PC/Bh3_release_2.23.2.0.exe ,依旧触发拦截

测试 URL 样例 2,QQ 电脑管家在线下载器,进入 https://guanjia.qq.com/product/weixin/ 页面,点击 微信、管家一键下载,之前触发拦截,这次直接秒下,下载直链:https://pm.myapp.com/invc/xfspeed/qqpcmgr/download/QQPCDownload70580.exe

测试 URL 样例 3,Microsoft Edge 浏览器在线下载器,访问 https://www.microsoft.com/en-us/edge/download?form=MA13FJ ,点击 Download for Windows 11 / 10 ,依旧触发拦截,下载直链:https://c2rsetup.officeapps.live.com/c2r/downloadEdge.aspx?platform=Default&source=EdgeStablePage&Channel=Stable&language=zh-cn&brand=M100

测试 URL 样例 4,逍遥模拟器安装包,访问 https://www.xyaz.cn/,点击 立即下载 → 个人版,下载直链:https://download.microvirt.com/download/XYAZ-Setup-8.1.2-ha12ab0d7e.exe

也就是没完全成功,如果后缀名没有在里面被明确定义,可能会触发其他安全机制,目前看是可能检测了类似 referer header值里面的域名,因为当 referer 为空去下载风险文件直链,是不触发的,或者 referer 里面的域名没有命中风控

使用 CORS Unblock 扩展移除拦截网站的 Referer 和 Origin 请求 header,确定是 referer 问题。

我这安全浏览关了个寂寞?

继续理清关键数据结构,根据 safe_browsing 说明,得知有一些必须的关键字段,extensionuma_valueping_settingplatform_settings.danger_levelplatform_settings.auto_open_hint
其中,is_archive 这个字段在某些情况下是必须的,如果是归档类、封装的容器类的格式,如压缩格式,就是必须保留这个字段

2023-5-11 已弃疗,直接通配符匹配把所有扩展名给和谐掉

评论 (0条)