这篇文章涉及谷歌ReCaptcha v2(不是最新版本)

最近谷歌推出了一个简化的“验证码”验证系统(视频),用户只需点击它就可以通过“验证码”。

但它如何通过点击来区分机器人和人呢?

根据这个答案,(假设有类似的实现),首先“recaptcha”生成一个隐藏的密钥并将其附加到一个隐藏的输入元素上,并惰性地呈现一个带有相同密钥的复选框(不是一个实际的复选框输入,而是一个div),当单击该密钥时,将发送一个异步请求(XHR)到谷歌后端服务器,以将其标记为有效的验证密钥(即当表单提交时必须验证的密钥)。

但为什么机器人不能自动点击(至少,基于浏览器的机器人)?

这是如何工作的呢?


当前回答

请允许我提出我的猜测,因为这不是一个开放的技术。

谷歌说它是关于从之前,期间,之后的信息来区分人类和机器人。但我更感兴趣的是最后点击复选框。

Say, the POST data (solved CAPTCHA) has a field called fingerprint, a string calculated from user behavior. I think there may be a field about that check box location. I guess this check box is in a coordinate system randomly generated by Google back-end and encrypted by the public key of my site. So, a robot may "guess/calculate" a location about this box, but when site owner makes the GET query with private key to verify user identity, Google will decrypt the coordinate system and say if the user click on the right place. So, only one possible right click(with some offsets, it's a square box) location in this random coordinate system owned by only Google and site owners.

其他回答

请记住谷歌同时使用reCaptcha

Canvas fingerprinting 

唯一识别用户/浏览器没有cookies!

我的机器人在ReCaptcha上运行良好。

这是我的解决方案。

让你的机器人这样做。

首先写一个人的鼠标移动函数移动你的鼠标像b样条(问我源代码)。这是最重要的一点。

也可以使用像https://www.purevpn.com这样的VPN来获得更好的结果

对于每一个Recpatcha执行以下步骤:

如果先使用VPN交换机IP 清除所有浏览器cookie 清除所有浏览器缓存 随机设置一个用户代理: a. Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;三叉戟/ 5.0) b. Mozilla/5.0 (Windows NT 6.1;WOW64;rv:44.0) Gecko/20100101 Firefox/44.0

5移动你的鼠标与人类鼠标移动功能从一个随机点到I am not a Robot Image每次不同的10x10随机范围

然后点击ever与随机延迟之间 WM_LBUTTONDOWN 而且 WM_LBUTTONUP 从图片验证码截屏 发送截图至 http://www.deathbycaptcha.com 或 https://2captcha.com

让它们解出来。

从验证码求解器接收点击坐标后,使用您的人体鼠标移动功能来移动和单击验证码图像 使用人体鼠标移动功能移动并单击到“验证验证”按钮

在75%的尝试中,所有的Recaptcha将被解决

谷歌Chears

Tom

这只是猜测,但基于谷歌对他们使用的“风险分析引擎”的引用(http://googleonlinesecurity.blogspot.com/2014/12/are-you-robot-introducing-no-captcha.html)

我认为它会查看你在点击之前的行为,你的光标如何移动到检查(有机路径/加速),复选框的哪个部分被点击(随机位置,或每次都在中心),浏览器指纹,谷歌cookie和内容,点击与你的指纹或账户绑定的位置历史(如果它检测到一个)等等。

以欺骗持续学习模式检测引擎的方式来伪造“有机”行为是相当困难的。在不确定的情况下,它仍然提示您匹配实际的CAPTCHA字符串。

请允许我提出我的猜测,因为这不是一个开放的技术。

谷歌说它是关于从之前,期间,之后的信息来区分人类和机器人。但我更感兴趣的是最后点击复选框。

Say, the POST data (solved CAPTCHA) has a field called fingerprint, a string calculated from user behavior. I think there may be a field about that check box location. I guess this check box is in a coordinate system randomly generated by Google back-end and encrypted by the public key of my site. So, a robot may "guess/calculate" a location about this box, but when site owner makes the GET query with private key to verify user identity, Google will decrypt the coordinate system and say if the user click on the right place. So, only one possible right click(with some offsets, it's a square box) location in this random coordinate system owned by only Google and site owners.

一篇新的论文发布了针对reCAPTCHA的几个测试:

https://www.blackhat.com/docs/asia-16/materials/asia-16-Sivakorn-Im-Not-a-Human-Breaking-the-Google-reCAPTCHA-wp.pdf

以下是一些最突出的结果:

通过保持cookie活跃9天(通过浏览谷歌资源的网站),您可以通过仅单击复选框通过reCAPTCHA; 没有基于每个IP的请求限制; 浏览器的用户代理必须是真实的,谷歌对您的环境运行测试,以确保它与用户代理匹配; 谷歌测试浏览器是否可以渲染Canvas; 屏幕分辨率和鼠标事件不会影响结果;

谷歌已经修复了cookie漏洞,并可能限制了一些基于ip的行为。

另一个有趣的发现是,谷歌用JavaScript运行VM,混淆了大部分reCAPTCHA代码和行为。该虚拟机被称为botguard,用于保护除reCAPTCHA之外的其他服务:

https://github.com/neuroradiology/InsideReCaptcha

更新2017

最近在WOOT 2017上发表的一篇论文(来自8月)在解决noCAPTCHA reCAPTCHA音频挑战方面达到了85%的准确率:

http://uncaptcha.cs.umd.edu/papers/uncaptcha_woot17.pdf

更新2018

谷歌推出了reCAPTCHA v3,它看起来像一个“人类得分预测引擎”,每个网站都进行校准。它可以安装到网站的不同页面(像谷歌Analytics脚本一样工作),以帮助reCAPTCHA和网站所有者在填写reCAPTCHA之前了解人类与机器人的行为。

https://www.google.com/recaptcha/intro/v3beta.html