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

mot*_*yyy 4 java macos selenium selenium-chromedriver apple-silicon

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

\n

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

\n
perl -pi -e \'s/cdc_/dog_/g\' `which chromedriver`\n
Run Code Online (Sandbox Code Playgroud)\n

当我在 Apple Silicon Mac 上运行此程序时,chromedriver 在启动时立即被终止

\n
\xe2\x95\xad\xe2\x94\x80 motopascyyy@mbp2022 \xe2\x9e\x9c ~\n\xe2\x9e\x9c perl -pi -e \'s/cdc_/dog_/g\' `which chromedriver`\n\xe2\x95\xad\xe2\x94\x80 motopascyyy@mbp2022 \xe2\x9e\x9c ~\n\xe2\x9e\x9c chromedriver\n[1]    16612 killed     chromedriver\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
\xe2\x95\xad\xe2\x94\x80 motopascyyy@mbp2022 \xe2\x9e\x9c ~\n137 x  perl -pi -e \'s/dog_/cdc_/g\' `which chromedriver`\n\xe2\x95\xad\xe2\x94\x80 motopascyyy@mbp2022 \xe2\x9e\x9c ~\n\xe2\x9e\x9c chromedriver\nStarting ChromeDriver 101.0.4951.41 (93c720db8323b3ec10d056025ab95c23a31997c9-refs/branch-heads/4951@{#904}) on port 9515\nOnly local connections are allowed.\nPlease see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.\nChromeDriver was started successfully.\n
Run Code Online (Sandbox Code Playgroud)\n

根据对几个不同线程的建议,我已将 perl 命令更改为查找$cdc_而不是$dog_,虽然 chromedriver 仍将启动,但机器人检测逻辑将无法工作。

\n

我对修改前后的 chromedriver 进行了比较,没有发现重大差异(Intel 和 Appel Silicon 看起来都一样)

\n
63464c63464\n<   var key = \'$cdc_asdjflasutopfhvcZLmcfl_\';\n---\n>   var key = \'$dog_asdjflasutopfhvcZLmcfl_\';\n63504c63504\n<   const Symbol = window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol || window.Symbol;\n---\n>   const Symbol = window.dog_adoQpoasnfa76pfcZLmcfl_Symbol || window.Symbol;\n63531c63531\n<     const Array = window.cdc_adoQpoasnfa76pfcZLmcfl_Array || window.Array;\n---\n>     const Array = window.dog_adoQpoasnfa76pfcZLmcfl_Array || window.Array;\n63688c63688\n<   const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;\n---\n>   const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;\n63757c63757\n<   const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;\n---\n>   const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;\n63829c63829\n<     const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;\n---\n>     const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

编辑2022-05-09

\n

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

\n
Exception Type:        EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

bri*_*anj 7

做了一些谷歌搜索,可以删除旧签名并强制使用“临时”签名。之后,chromedriver 即可供个人使用。

perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver
codesign --remove-signature /path/to/chromedriver
codesign --force --deep -s - /path/to/chromedriver
Run Code Online (Sandbox Code Playgroud)

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

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

今天我刚买的M1也遇到了同样的问题,一直在兜圈子。我买了那台M1 Powerbook来开发爬行工作,所以我非常沮丧。感谢您让我了解 M1 代码签名要求。