当cdc_被修改时,Chromedriver在Apple Silicon上被杀死



我遇到了一个问题,在我修改它后,Chromedriver将在启动时立即死亡,而不是被网站检测到。

为了访问我的银行网站上的数据,我构建了一个基于java的工具,它使用Selenium和Chromedriver。我的银行正在使用一些机器人检测软件,所以如果你只是运行常规的chromedriver,你就会被检测到,它会抛出一个通用的错误。在我旧的英特尔Mac上,为了解决这个问题,我只需运行这个命令,一切都会正常工作:

perl -pi -e 's/cdc_/dog_/g' `which chromedriver`

当我在我的苹果硅Mac上运行这个程序时,chromedriver在启动时立即被杀死

╭─ motopascyyy@mbp2022 ➜ ~
➜ perl -pi -e 's/cdc_/dog_/g' `which chromedriver`
╭─ motopascyyy@mbp2022 ➜ ~
➜ chromedriver
[1]    16612 killed     chromedriver

如果我用perl -pi -e 's/dog_/cdc_/g' /path/to/chromedriver还原命令,它将再次开始运行。

╭─ motopascyyy@mbp2022 ➜ ~
137 x  perl -pi -e 's/dog_/cdc_/g' `which chromedriver`
╭─ motopascyyy@mbp2022 ➜ ~
➜ chromedriver
Starting ChromeDriver 101.0.4951.41 (93c720db8323b3ec10d056025ab95c23a31997c9-refs/branch-heads/4951@{#904}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

根据对几个不同线程的建议,我已经更改了perl命令来查找$cdc_而不是$dog_,虽然chromedriver仍然会启动,但bot检测逻辑将不起作用。

我在修改之前和之后在chromedriver之间做了一个差异,并且没有看到重大差异(英特尔和Appel Silicon看起来都一样)

63464c63464
<   var key = '$cdc_asdjflasutopfhvcZLmcfl_';
---
>   var key = '$dog_asdjflasutopfhvcZLmcfl_';
63504c63504
<   const Symbol = window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol || window.Symbol;
---
>   const Symbol = window.dog_adoQpoasnfa76pfcZLmcfl_Symbol || window.Symbol;
63531c63531
<     const Array = window.cdc_adoQpoasnfa76pfcZLmcfl_Array || window.Array;
---
>     const Array = window.dog_adoQpoasnfa76pfcZLmcfl_Array || window.Array;
63688c63688
<   const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
---
>   const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
63757c63757
<   const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
---
>   const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
63829c63829
<     const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
---
>     const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;

还有其他人遇到过类似的问题吗?

编辑2022-05-09

我看了看控制台,似乎运行perl命令足以修改包,使代码签名无效。根据控制台,进程被终止的原因是:

Exception Type:        EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))

目前还不清楚为什么这在英特尔机器上没有问题。

我在谷歌上搜索了一下,可以去掉旧的签名并强制使用"ad-hoc"签名。之后,chromedriver可用于个人使用。

perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver
codesign --remove-signature /path/to/chromedriver
codesign --force --deep -s - /path/to/chromedriver

修改可执行文件,删除签名,并添加新签名。下面是我收集这些命令的链接:

https://eclecticlight.co/2020/11/03/code-signatures-3-fixing-signature-problems/https://www.purebasic.fr/english/viewtopic.php?t=78137

今天在我最近购买的M1上遇到同样的问题后,我一直在兜圈子。我买M1 Powerbook是为了开发爬行工作,所以我非常沮丧。感谢您让我了解M1代码签名需求。

相关内容

  • 没有找到相关文章

最新更新