如何使用脚本下载 Chrome 独立可执行文件而不损坏文件?
几周前,我使用curl制作了一个批处理脚本,用于下载所有我可以找到的Chrome可执行文件,以防万一Chrome被更新弄乱了。
运行后立即脚本,我没有检查可执行文件是否正常运行,因为我认为它们不会有问题。因此,在让脚本堆积了Chrome版本之后,就在几天前,当我尝试安装较旧版本的Chrome时,我感到非常惊讶。脚本下载的文件都没有工作。每次我尝试运行它们时,都会得到“未知安装程序错误”。
这是脚本:
492920670
让我对为什么不起作用的curios,所以我访问了 https://dl.google.com/chrome/install/chromestandalonesetup64.exe 在Chrome中,这使我成为了一个完美工作的Exe。奇怪的是,两者都通过Chrome下载和Curl具有相同的SHA 512 HASH。 当我感到困惑时,我尝试了WGET和PowerShell脚本。 “。
感谢@john Seerden,然后我使用了他的powershell script ,下载了一个google googlechromestaloneenterprise6444444408020"> script .msi工作可执行。 看到这一点,我用 this 帖子,但我不使用Charles,而是使用Chrome Dev工具来获取Chrome Dev工具来获取该工具网络选项卡中的卷曲请求。这也不起作用,同样的错误。
是我可以通过脚本下载完美运行chrome operutables的任何方法,还是有任何方法可以修复损坏的可执行文件? 我宁愿不要求助于无头铬。
$Path = $env:TEMP; $Installer = "chrome_installer.exe"; Invoke-WebRequest "http://dl.google.com/chrome/install/375.126/chrome_installer.exe" -OutFile $Path\$Installer; Start-Process -FilePath $Path\$Installer -Args "/silent /install" -Verb RunAs -Wait; Remove-Item $Path\$Installer
该过程完成后,您将在桌面上看到“Google Chrome”图标。点击并运行它
我使用 WinMerge 比较了这两个独立的 Chrome exes,版本分别为 86.0.4240.111 - 64 位和 87.0.4280.66 - 64 位,ChromeStandaloneSetup64_28-10-2020_14.24.03_valid_Copy_old_version.exe(从 https://dl.google.com/chrome/install/ChromeStandaloneSetup64.exe 下载 - exe 损坏,即 exe 中缺少下载 URL 标签)和 ChromeStandaloneSetup64_valid_Copy_latest_version.exe(从 https://www.google.com/chrome/?standalone=1&platform=win64 - 有效的 exe,又名包含下载 URL 标签的 exe)。
为了进行比较,这里有一个带标签的下载 URL:
以下是未标记的下载网址:
https://dl.google.com/chrome/install/ChromeStandaloneSetup64.exe
在 WinMerge 中,我在 ChromeStandaloneSetup64_valid_Copy_latest_version.exe(右侧文件)中搜索“&lang=ro&browser”,然后转到“编辑”>“选择行差异”(F4),再转到“合并”>“复制到左侧”。接下来,我转到“文件”>“另存为”>“将左侧另存为...
然后我在全新的 Windows 7 虚拟机 (VM) 中运行生成的 exe(修补后的 exe,版本为 86.0.4240.111 64 位),这次它安装正确。为了测试目的,我关闭了网络,然后,当转到 Chrome 中的 3 点菜单 > 帮助 > 关于 Chrome 时,确实,Chrome 是旧版本。之后,我打开网络,它已更新到最新版本 87.0.4280.66 64 位,运行没有问题。
尽管 ChromeStandaloneSetup64_valid_Copy_latest_version.exe(有效 exe)带有区域标识符备用数据流 (ADS),但与损坏的 exe 不同,损坏的 exe 产生的 exe 缺少 ADS,它在 VM 中运行良好。关于 ADS,我下载了两次相同的有效 Chrome exe(87.0.4280.66 64 位),我注意到 ADS 具有完全相同的值。
我还做了额外的测试,我注意到如果生成的 exe 缺少 appguid 和 iid 字段,它将无法安装。
我做的另一件事是弄乱了相应字段中的值,因此我使 appguid 和 iid 字段看起来像这样:
appguid={00000000-0000-0000-0000-0000-00000000000}&iid={00000000-0000-0000-0000-0000000000000
,结果是使可执行文件无法安装,出现错误代码:0x80070057。
完成 exe 编辑后,我开始处理 URL。
至于这个给定的 URL,来自 https://www.google.com/chrome/?standalone=1&platform=win64 (有效 exe):
我精简了 appguid 和 iid,得到:
,这导致 exe 损坏,出现与上面相同的错误代码,错误代码:0x80070057。
接下来我要做的是去 https://codebeautify.org/generate-random-data-from-regexp 并生成一个随机的 appguid 和 iid(使用十六进制值,因为我注意到它在那些字段中使用)使用以下模式:
[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12
,然后使用两个不同的数字:
038C42B4-AF87-AD38-990A-4384A7E29E04 - 用于 appguid
EC7C4A9D-76CB-FBA7-D1C2-70EB689DA8F4 - 用于 iid
,我得到了这个链接:
,在安装过程中,出现“无法连接到互联网。如果您使用防火墙,请将 GoogleUpdate.exe 列入白名单”错误。
因此,由于 appguid 和 iid 来自更高版本的 Chrome(appguid 和 iid 取自 87.0.4280.66 并插入到 86.0.4240.111),我假设,只有当 exe 本身包含的 appguid 和 iid 通过安装过程中的计算产生与 exe 中存储的值或安装过程中计算的值匹配的结果时,安装才会成功完成。我之所以这么说,是因为当我安装由损坏的 exe 生成的有效独立 Chrome exe 时,网络已关闭,并且该系统上没有安装 Chrome。或者这两个值可能以某种方式与操作系统相关联。
总之,我想我最终会使用这些 appguid 和 iid 修改批处理文件中的 URL,除非我决定仔细查看即将发布的 Chrome 版本的 URL,以更好地了解所有这些是如何工作的。
这些:
8A69D345-D564-463C-AFF1-A69D9E530F96 - 用于 appguid
04A7785F-B8A2-B4AA-7A45-17861EB0DE70 - 用于 iid