Google reCAPTCHA v2在后台如何工作?


303

这篇文章是指Google ReCaptcha v2(不是最新版本)

最近,Google推出了简化的“验证码”验证系统(视频),使用户只需单击即可通过“验证码”。

但是,如何通过单击将机器人与人区分开?

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

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

这怎么工作?


1
大概类似于他们向人类发送验证码和向机器人发送验证码的方式
mukunda 2014年

1
我的理解是-仍然存在一个验证码,但是除非您提出可疑请求,否则您将永远不必解决它。
凯尔姆2014年

@Louie什么是“被盗”?有人问了同样的问题,并链接了相同的(也是唯一的)帖子,但是措辞略有不同,答案都不同。更重要的是,原始Quora问题发布于12月3日,即该问题的一天。似乎是什么问题?
wchargin 2015年

10
@CiroSantilli六四事件法轮功 链接不见了
TechLife 2015年

14
@TechLife真的!似乎已经移到github.com/neuroradiology/InsideReCaptcha了?提醒自己:总是叉东西。
西罗Santilli郝海东冠状病六四事件法轮功2015年

Answers:


200

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

我假设它查看的是您在单击之前的行为,光标如何移至检查(有机路径/加速度),单击复选框的哪一部分(随机放置或每次都居中),浏览器指纹,Google Cookie和内容,单击与您的指纹或帐户绑定的位置记录(如果检测到)等。

假冒“有机”行为的方式很难使持续学习的模式检测引擎蒙混过关。在不确定的情况下,它仍会提示您匹配实际的验证码字符串。


73
这似乎是正确的,应该解释为什么我总是必须用木棍在PSVita上键入一个字符串。它不会像普通鼠标那样移动。
Domino

3
我想知道Google如何对足够数量的记录的有机行为做出反应。
Markus Malkusch,2015年

16
鼠标移动绝对无助于此。将光标放在该复选框将出现的位置上。导航到该站点而不移动光标。单击复选框,它将通过。
德里克·朕会功夫,2015年

3
@Derek,我认为这不能证明任何事情。Cookies,IP和许多其他因素可能会导致您无法通过鼠标移动。我不想进行测试,但是,如果您要使用新IP来启动一台新计算机并且根本不使用鼠标,那么我敢打赌它会失败。
凯门2015年

13
请注意,您也可以在其上移动并按空格键。
JSideris

74

已发布新论文,并针对reCAPTCHA进行了多项测试:

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

一些重点:

  • 通过将Cookie保持有效期超过9天(通过浏览具有Google资源的网站),您只需单击复选框即可通过reCAPTCHA;
  • 基于每个IP的请求没有限制;
  • 浏览器的用户代理必须是真实的,并且Google针对您的环境运行测试以确保它与用户代理匹配;
  • Google测试浏览器是否可以渲染Canvas;
  • 屏幕分辨率和鼠标事件不会影响结果。

Google已经修复了Cookie漏洞,并可能会限制某些基于IP的行为。

另一个有趣的发现是Google在JavaScript中运行的VM混淆了许多reCAPTCHA代码和行为。该VM被称为botguard,用于保护除reCAPTCHA之外的其他服务:

https://github.com/neuroradiology/InsideReCaptcha

更新2017

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

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

更新2018

Google推出了reCAPTCHA v3,它看起来像一个“人类得分预测引擎”,该引擎已针对每个网站进行了校准。可以将其安装到网站的不同页面(类似于Google Analytics(分析)脚本),以帮助reCAPTCHA和网站所有者在填充reCAPTCHA之前了解人类与机器人的行为。

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


4
mouse events don't affect the results这很有趣,因为我(以及我相信许多其他人)曾认为那是影响结果的主要因素。我认为在移动设备而不是复选框上,用户被要求选择所有相同的图像,因为触摸屏上没有鼠标移动。但是,再次查看介绍性博客文章,似乎并非如此。也许选择图像不是在键入失真的文本,而不是在选中复选框。您(或任何人)知道reCAPTCHA是否曾经允许仅在移动设备上选中一个复选框吗?
Nateowami

鼠标事件确实会影响结果。如果按TabEnter选中复选框,它将显示图像验证码,供您根据条件选择它们。
mbomb007'9

1
@ mbomb007鼠标事件可能会影响结果,但是按TabEnter不会一直显示图像验证码。大多数情况下,按TabEnter接受
Manish Ojha '18

24

我的机器人在对抗ReCaptcha方面运行良好。

这是我的解决方案。

让您的机器人执行以下步骤:

首先编写一个人类鼠标移动功能,使您的鼠标像B样条线一样移动(请向我询问源代码)。这是最重要的一点。

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

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

  1. 如果先使用VPN交换机IP

  2. 清除所有浏览器Cookie

  3. 清除所有浏览器缓存

  4. 随机设置以下用户代理之一:

    一个。Mozilla / 5.0(兼容; MSIE 9.0; Windows NT 6.1; Trident / 5.0)

    b。Mozilla / 5.0(Windows NT 6.1; WOW64; rv:44.0)Gecko / 20100101 Firefox / 44.0

5每次使用不同的10x10随机范围将人类鼠标的功能从随机点移动到我不是机器人图像

  1. 然后单击之间有随机延迟的

    WM_LBUTTONDOWN

    WM_LBUTTONUP

  2. 从Image Captcha截取屏幕截图

  3. 发送截图到

    http://www.deathbycaptcha.com

    要么

    https://2captcha.com

让他们解决。

  1. 从验证码求解器收到单击坐标后,使用人类鼠标移动功能移动并单击Recaptcha图像

  2. 使用您的人类鼠标移动功能来移动并单击以重新验证按钮

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

Chears Google

汤姆


2
为什么需要“人类鼠标移动功能”?看起来没有必要实现您的目标。
barbolo

9
“人类鼠标移动”功能是最重要的一点。Google会在验证码中检测Mousecap,Mousespeed,MouseWay,MouseButton向下和向上事件,Clickpositions,Mouse EntryPoint到验证码中,...,并将此信息通过Javascript发送到Google数据库,其中包含数百万条真实的Human Mousemove跟踪信息。解释完所有捕获的信息后,仅当Google算法说它是人类时,验证码才会标记为已解决。
Ingo

3
@ barbolo:请检查这个谷歌官方博客security.googleblog.com/2014/12/... - >谷歌表示,“去年为了解决这个问题,我们开发了一个先进的风险分析为后台验证码是积极考虑与CAPTCHA用户的整个订婚–之前,之中和之后–确定该用户是否是人类。”
Ingo,2016年

6
第8步使用外部API,由人工为您解决验证码。机器人没有解决任何问题。
Andrea Lazzarotto'7

14
是我自己,还是让机器人编写者使用Stack Overflow帮助解决(并讨论!)reCAPTCHA的其他人感到既困扰又着迷?
食人魔赞美诗

3

我想提出我的猜测,因为这不是一种开放技术。

谷歌说,这是关于从人之前,期间和之后进行信息梳理,以区分人与机器人。但是我对该复选框的最终点击更感兴趣。

假设POST数据(已解决CAPTCHA)具有一个称为“指纹”的字段,该字段是根据用户行为计算得出的字符串。我认为可能存在有关该复选框位置的字段。我猜想此复选框位于Google后端随机生成的坐标系中,并由我网站的公共密钥加密。因此,机器人可能会“猜测/计算”此框的位置,但是当网站所有者使用私钥进行GET查询以验证用户身份时,Google会解密坐标系并说出用户是否单击了正确的位置。因此,在这个仅由Google和网站所有者拥有的随机坐标系中,只有一个可能的右键单击(带有一些偏移,它是一个方框)的位置。


如果浏览器足够好,可以实际显示该框并检测点击,那么黑客机器人为什么不能做到这一点呢?但是,我可以将复选框的位置设置为非常精确的位置(以小数点表示),因此,如果检测到单击时使用相同的小数点,则表示这是一个机器人,它不会费心将随机小数点添加到点击位置。但这并不是万无一失的。
Domino

据说Google使用的是“学习”算法,因此,如果某些具有相同特征的客户似乎遵循相同的一般路线和到达目的地的一般时间,并且每天发生10万次,那么他们可能就没有合法性。
塞伦斯

1
模拟方形区域中的点击应该相对容易。不管Google如何在发送前加密数据。
尤金·C

0

请记住,Google还将reCaptcha与

Canvas fingerprinting 

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.