Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >谷歌家的验证码怎么了?搞他!

谷歌家的验证码怎么了?搞他!

作者头像
崔庆才
发布于 2020-01-02 03:27:57
发布于 2020-01-02 03:27:57
4.6K00
代码可运行
举报
文章被收录于专栏:进击的Coder进击的Coder
运行总次数:0
代码可运行

阅读本文大概需要 16 分钟。

很久没有做爬虫破解类相关的分享了,之前交流群里有朋友提问谷歌系的reCAPTCHA V2 验证码怎么破,因为工作的原因我是很久之后才看到的,也不知道那位朋友后来成功了没有。那今天就来跟大家分享一下 reCAPTCHA V2 的破解。

(小马补充:想加交流群的朋友,进入公众号下方,点击技术交流,有读者群和交流群,点击后都会弹出崔老师的二维码,扫微信二维码拉群~)

如果大家访问国外的一些网站的话,想必肯定见过这样的一个验证码,它上面写着「I'm not a robot」,意为「我不是机器人」,验证码长这个样子:

这时候,只要我们点击最前面的复选框,验证码算法会首先利用其「风险分析引擎」做一次安全检测,如果直接检验通过的话,我们会直接得到如下的结果:

如果算法检测到当前系统存在风险,比如可能是陌生的网络环境,可能是模拟程序,会需要做二次校验。它会进一步弹出类似如下的内容:

比如上面这张图,验证码页面会出现九张图片,同时最上方出现文字「树木」,我们需要点选下方九张图中出现「树木」的图片,点选完成之后,可能还会出现几张新的图片,我们需要再次完成点选,最后点击「验证」按钮即可完成验证。

或者我们可以点击下方的「耳机」图标,这时候会切换到听写模式,验证码会变成这样:

这时候我们如果能填写对验证码读的音频内容,同样可以通过验证。

这两种方式都可以通过验证,验证完成之后,我们才能完成表单的提交,比如完成登录、注册等操作。

这种验证码叫什么名字?

这个验证码就是 Google 的 reCAPTCHA V2 验证码,它就属于行为验证码的一种,这些行为包括点选复选框、选择对应图片、语音听写等内容,只有将这些行为校验通过,此验证码才能通过验证。相比于一般的图形验证码来说,此种验证码交互体验更好、安全性会更高、破解难度更大。

许多国外的网站都采用了此种验证码,由于某些原因,在国内其实无法直接使用,但只需要将验证码的域名更换为 recaptcha.net 同样是可以使用的,所以有时候我们在国内某些站点同样能看到它的身影。

其实上文所介绍的验证码仅仅是 reCAPTCHA 验证码的一种形式,是 V2 的显式版本,另外其 V2 版本还有隐式版本,隐式版本在校验的时候不会再显式地出现验证页面,它是通过 JavaScript 将验证码和提交按钮进行绑定,在提交表单的时候会自动完成校验。除了 V2 版本,Google 又推出了最新的 V3 版本,reCAPTCHA V3 验证码会为根据用户的行为来计算一个分数,这个分数代表了用户可能为机器人的概率,最后通过概率来判断校验是否可以通过。其安全性更高、体验更好。

具体的内容大家可以参考 reCAPTCHA 的官方介绍:https://developers.google.com/recaptcha。

那么在做爬虫的时候,如果我们遇到了这样的验证码?该怎么办呢?不要着急,这篇文章就来介绍一个解决方案。

机器学习 vs 识别服务

之前我在写上一篇 利用深度学习识别滑动验证码缺口位置 的时候,当时朋友留言问我能不能做一个自己调试出的机器学习的,我回复了,我说当然没问题,你等着,我这周就做。

我那周从周一做到周五,我记得用的应该是 yolo,反复修改,小马还经常过来催稿,耗费良久,然后就在那周周五晚上的23:59分,我灵机一动,终于明白了。

去他的机器学习,有服务不好吗?

reCAPTCHA 本身比极验还要复杂,国内网站我暂时没看到破解的,然后这次我用的是俄罗斯的一个服务商 2Captcha 提供的图像识别和一系列行为验证码的识别服务。

其实目前复杂的验证码识别的背后,都是图像识别算法和大量人力的支撑。如果我们仅仅是简单的图形验证码,其可以通过一些图像识别算法将内容识别出来转化为文本内容。如果是较为复杂的图形验证码或者像 reCAPTCHA 类似的行为验证码,其背后会有人来对验证码进行模拟,然后返回其验证成功后的秘钥,我们利用其结果便可以完成一些验证码的绕过。

当然这种网站肯定是要收费的,按照 1000 次识别为单位,其花费的费用为 0.5 美刀到 2.99 美刀不等,比如非常简单的图形验证码可能就是 0.5 美刀,这种验证码对于其人力和算力资源消耗都是相对较小的,对于复杂的 reCAPTCHA 验证码,就要花 2.99 美刀了,因为识别这么一个验证码并不容易,其背后的人可能需要看好多图,点选好多次才能完成一次成功的验证。

比如我这次提到的 2Captcha,他的收费标准是这样子的:

具体的内容或者更新大家可以到其官方说明 https://2captcha.com/2captcha-api#rates 去查看。

后面我用他的服务来破解 reCAPTCHA,当然类你用其他服务商可以的,过程大概都是这样。

准备工作

要使用 2Captcha,第一步当然是注册一下它的账号了,注册完成之后我们可以进入到 2Captcha 的控制台,类似于这样子:

在这里我们可以看到账户余额、API KEY、FAQ 等配置。

这里最重要的就是 API KEY 了,它是我们用来使用 2Captcha 的凭证,我们将它复制下来,后面我们会在代码中使用它。

好,准备工作完成了,我们接下来进入正式内容。

2Captcha for reCAPTCHA V2

在上文我们已经介绍过 reCAPTCHA V2 的使用和交互流程了,下面我们来介绍下其识别和绕过的基本流程。

在这里我们就拿官方的 reCAPTCHA V2 的示例网站来做演示吧,其网址为:https://www.google.com/recaptcha/api2/demo,打开之后界面如下所示:

在这里可以看到有一个表单,上面有一些输入框,下方是 reCAPTCHA V2 验证码。

要识别这个验证码,第一步便是找到这个验证码 sitekey,这个是验证码的唯一标识。

我们打开浏览器的开发者工具,查看其页面源码,首先找到 reCAPTCHA 的源代码,如下图所示:

可以看到 reCAPTCHA 是对应了一个 iframe,我们看到的 reCAPTCHA 内容都是在 iframe 里面呈现出来的。

这里我们可以观察到在 reCAPTCHA 的源码的最外层的 div 上面有一个字段,叫做 data-sitekey,这就是刚才我们所说的 sitekey,它是验证码的唯一标识,比如这里我先将这个 sitekey 保存下来,这里其值为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-

下一步,我们就需要将这个 sitekey 和当前页面的 URL 告诉 2Captcha,让 2Captcha 来帮助我们识别这个 reCAPTCHA 验证码,告诉 2Captcha 之后,2Captcha 会利用这些信息加载出对应的验证码,再利用其背后的人力来对验证码进行识别,最后将识别得到的 token 返回给我们即可。

好,那么接下来怎么把这个信息告诉 2Captcha 呢?

很简单,2Captcha 为我们提供了一个接口,其接口地址为:https://2captcha.com/in.php,我们只需要将对应的信息发送到这个接口就好了。

那么发送需要什么参数呢,在这里介绍一下:

参数

类型

必须

描述

key

String

Yes

我们自己的 API KEY

method

String

Yes

userrecaptcha,定义破解 reCAPTCHA 验证码的方式

googlekey

String

Yes

reCAPTCHA 的 sitekey

pageurl

String

Yes

reCAPTCHA 当前所在的 URL

invisible

Integer Default: 0

No

是否可见,1 代表是隐式验证码,0 代表普通验证码。

header_acao

Integer Default: 0

No

跨域访问配置

pingback

String

No

回调地址

json

Integer Default: 0

No

返回格式,1 代表返回 JSON 格式,0 代表纯文本,默认 0

soft_id

Integer

No

ID of software developer. Developers who integrated their software with 2captcha get reward: 10% of spendings of their software users.

proxy

String

No

代理配置

在这里我们可以构造一个 URL,它包括这几个参数:

•key:注意这里的 KEY 换成你自己的 API KEY•method:直接赋值 userrecaptcha•googlekey:复制的 sitekey•pageurl:当前 URL•json:直接赋值 1,代表返回 JSON 格式

比如在这里我就构造了这个 URL,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://2captcha.com/in.php?key=c0ae5935d807c28f285e5cb16c676a48&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://www.google.com/recaptcha/api2/demo&json=1

这时候我们直接向这个 URL 发起一个 GET 请求即可。

我们可以直接在浏览器里面输入这个 URL,也可以使用 requests 等请求库来完成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests

response = requests.get(url)
print(response.json())

接口会返回如下格式的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{'status': 1, 'request': '62919419695'}

这里它返回了一个 JSON 格式的数据,其中 status 代表请求状态,如果是 1 的话,代表请求成功,另外其还会包含一个 request 字段,其内容是一个 ID,这个 ID 就是识别这个验证码的任务的 ID。因为 2Captcha 背后有很多人来帮助识别验证码,所以 2Captcha 将每个验证码的识别划分为一个个任务,每个任务都有一个唯一的 ID,刚分配任务时,这个任务被标记为 NOT_READY 状态。这些任务接下来会被分发给一个个人,识别完成之后,该任务就会被标记为已经识别状态,同时附有识别之后的信息,如 token 等内容。

好,刚才的接口请求成功之后,这个 reCAPTCHA 的识别任务就已经被下发了,其背后会有对应的人来对这个 reCAPTCHA 验证码进行识别,识别过程可能需要十几秒到几十秒不等,我们可以通过另一个接口来获取任务的结果。

获取结果的接口地址为:https://2captcha.com/res.php,同样我们需要传入一些参数,其参数介绍如下:

参数

类型

必需

描述

key

String

Yes

API KEY

action

String

Yes

get,表示获取验证码的结果

id

Integer

Yes

任务 ID,就是刚才 in.php 接口返回的结果。

json

Integer Default: 0

No

返回 JSON 格式,1 代表使用 JSON 格式,0 代表纯文本格式

在这里我们构造一个 URL,它包括如上的参数:

•key:在这里换成你的 API KEY•action:就直接赋值 get•id:任务 ID•json:在这里用 1,即返回 JSON 格式数据

这样我们就构造了如下的 URL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://2captcha.com/res.php?key=c0ae5935d807c28f285e5cb16c676a48&action=get&id=62919419695&json=1

同样我们可以在浏览器中访问或者用 requests 请求,得到如下结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "status": 1,
    "request": "03AOLTBLSg0fQUUMtP2o3kvJWNm6zla8MEjP_vPh629-xS-d_QrlJwMcxQfSJMUIU92noqbJ16yt5a0PdB3ORW-5MEbqK7NZ82bTnSZohCG_mYVVv8TbuvM1A99DFvlepxGEKlGCoi5lTHJd5z_QQ2mV1trGlI8VJkHjVAhLZzlz67MVgQzIu7aDl39n6aocAIVueQuCyjmA1C3hUECxpNlXJuXYVD10eJrqY_Bu36_2E0uBrmDIkAIjxCzEZWgadToU4ByLReOrNJ7_4t-P8leTUbPC5YBXvoDZZZByz8-vNnHzUu3GNNESzGSCMFfVPYumnXXI6i7TO5p1k-AElgb7qor6vDJGA_RpNNSUgAj8B0synG9APpbMQ4cEprHXle5pJtNCBX_v_8uqJLobomIx0St5l_H1tHGuTgI2UU-nWmR9TwvKp6SR-6G2Fi6pv7c8350tPbqJWWMcV0AXdfM85GjRDh2t7wh1CMukLQE21aIIwHh88kR0Fh0481Kw_umw8IfFCHyHKu8IcTERUL5LZdDzQkiGdF1wqWP-GhySMXEx-eOT7tB6SqPEAmO_mbwtJtA-qKzcHP"
}

如果其返回的是如上格式的数据,就代表 reCAPTCHA 验证码已经识别成功了,其返回的 request 字段的内容就是识别的 token,我们直接拿着这个 token 放到表单里面提交就成功了。

那这个 token 怎么来用呢?

其实如果不走 2Captcha 接口,我们如果人工验证成功之后,在其表单里面会把一个 name 叫做 g-recaptcha-response 的 textarea 赋值,如果验证成功,它的 value 值就是验证之后得到的 token,这个会作为表单提交的一部分发送到服务器进行验证。如果这个字段校验成功了,那就没问题了。

所以,2Captcha 相当于为我们模拟了点选验证码的过程,其最终得到的这个 token 其实就是我们应该赋值给 name 为 g-recaptcha-response 的内容。

那么怎么赋值呢?

很简单,用 JavaScript 就好了。我们可以用 JavaScript 选取到这个 textarea,然后直接赋值即可,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.getElementById("g-recaptcha-response").innerHTML="TOKEN_FROM_2CAPTCHA";

注意这里的 TOKEN_FROM_2CAPTCHA 需要换成刚才我们所得到的 token 值。我们做爬虫模拟登录的时候,假如是用 Selenium、Puppeteer 等软件,在模拟程序里面,只需要模拟执行这段 JavaScript 代码,就可以成功赋值了。

执行之后,直接提交表单,我们查看下 Network 请求:

可以看到其就是提交了一个表单,其中有一个字段就是 g-recaptcha-response,它会发送到服务端进行校验,校验通过,那就成功了。

所以,如果我们借助于 2Captcha 得到了这个 token,然后把它赋值到表单的 textarea 里面,表单就会提交,如果 token 有效,就能成功绕过登录,而不需要我们再去点选验证码了。

最后我们得到如下成功的页面:

至此,我们就成功地借助 2Captcha 来完成了 reCAPTCHA V2 验证码的识别。

总结

本节我们介绍了识别 reCAPTCHA V2 的流程。从个人出发,我觉得工程师使用这样的服务并不是一种令人羞耻的过程,尤其是他可以以比较低的价格实现你的需求的情况下。毕竟你的时间,本身就是一种价值。

最后 2Captcha 这个网站我放在原文链接中,有感兴趣的朋友可以看一下。可能因为服务商的原因,每次打开都要三到五秒才能加载出来,不是 Bug 不用刷新。

另外如果有什么爬虫方面想看的文章主题,也欢迎在下面留言,我们会挑选被点赞较多的主题尽快写文。谢谢!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击的Coder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
国内使用Google reCaptcha验证码
为啥我出这篇文章呢,因为我有几天用了vaptcha进行人机验证,还算好用,但是发现手机上有广告,本着原则问题,我剔除了人机验证。 又发现在邻居@kidultff发现谷歌国内验证也可以,于是探路V3版本
一朵灼灼华
2022/08/05
4.6K0
国内使用Google reCaptcha验证码
国内使用reCaptcha验证码的完整教程
reCaptcha是Google公司的验证码服务,方便快捷,改变了传统验证码需要输入n位失真字符的特点。reCaptcha在使用的时候是这样的:
宜轩
2022/12/26
38.3K0
国内使用reCaptcha验证码的完整教程
验证码破解全流程实战
验证码,全称为“Completely Automated Public Turing test to tell Computers and Humans Apart”,即全自动区分计算机和人类的图灵测试,Captcha。早在上个世纪90年代,为了防止恶意的网络机器人行为,像邮件轰炸、暴力破解密码等,验证码应运而生。
TechLead
2023/10/21
2.6K0
验证码破解全流程实战
Selenium+2Captcha 自动化+验证码识别实战
本文深入探讨了使用Selenium库进行网页自动化操作,并结合2Captcha服务实现ReCAPTCHA验证码的破解。内容涵盖Selenium的基础知识、验证码的分类、2Captcha服务的使用,以及通过实例进行的详细讲解,最后对实践进行总结和优化思考,为读者提供了一条完整的验证码破解实践路线图。
TechLead
2023/10/21
2.1K0
Selenium+2Captcha 自动化+验证码识别实战
原来这样 4 步就能破解,再也不用手输验证码了!
• 目标网站开放凭据(验证码的“站点密钥”,站点url,可选:代理IP)由您(客户端)复制并提交给2captcha服务。您可以使用简单的Web开发人员工具找到它们。
double
2020/04/01
4.2K0
2025最新滑块验证码、图形验证码、解决滑块验证码识别的技术方法大全
滑块验证码(Slider Captcha)自上线以来,以其交互性强、用户体验较好而被广泛应用于各类网站和 APP 的登录、注册、支付等关键环节。相比传统文字验证码或图形混淆验证码,滑块验证码能够更有效地区分真人与机器人,降低恶意脚本的通过率。然而,随着技术的发展,滑块验证码也不断被识别与破解。本文将从「生成与验证组件」和「识别与破解工具」两个大类入手,结合多款 GitHub 开源项目,逐一介绍各自的技术栈、实现原理、优缺点,以及实际使用场景与配置要点,并在最后给出综合对比与推荐,帮助技术选型和快速上手。
猫头虎
2025/06/08
2.6K0
1.3K Star开源好工具,跳过图形验证码
开源日记
2023/12/13
1.2K0
1.3K Star开源好工具,跳过图形验证码
验证码的处理 google recaptcha
google验证码的第三方处理 #经过批量测试,成功率高达百分之九十,1000个邮箱大概4美金,比较实惠 第一部分. 通过请求youtube简介页面,获取网红的channel_id和页面产生的ses
用户8346838
2021/03/10
1.5K0
自动识别recaptcha验证码辅助爆破
最近的项目实在有点多,小的几千块,大的几百万。有些真心不好做,有些只是写写代码。唉,我是废物。几百万的真心吃不下。
洛米唯熊
2021/10/21
3.8K2
手把手使用Python教你破解谷歌(Google)人机验证码—上篇
今天呢,咱们来说一下Google,我们都知道,Google是目前地表最强的搜索引擎了,我们可以借助Google庞大的搜索资源找到一些自己想要的资源,可能是一些收费电影,可能是一些奇门小说,可能是某个角落的种子,不管怎么说,Google搜索还是挺给力的,但是呢,有梯子的我们可能都遇到过,我们搜索的多了,会有下图的这种情况。
Python进阶者
2020/02/19
7.1K1
手把手使用Python教你破解谷歌(Google)人机验证码—上篇
HCaptcha 的模拟点击破解方案来了!
这是「进击的Coder」的第 634 篇技术分享 作者:崔庆才 前面的文章我们介绍过 ReCaptcha 的模拟点击破解教程,但除了 ReCaptcha,还有另外和 ReCapacha 验证流程很相似的验证码,叫做 HCaptcha。 ReCaptcha 是谷歌家的,因为某些原因,咱们国内是无法使用 ReCaptcha 的,所以有时候 HCaptcha 也成了一些国际性网站的比较好的选择。 那今天我们就来了解下 HCaptcha 和它的模拟点击破解流程。 HCaptcha 我们首先看看 HCaptcha
崔庆才
2022/06/01
4.8K1
HCaptcha 的模拟点击破解方案来了!
ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)
验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码、刷票、论坛灌水、刷注册等等。现在的网站基本都有使用验证码来对用户的行为进行验证。从简单的文字验证码、图片验证码、滑动验证码、图片选择验证码等,验证码一直在进化,在和“黑恶势力”做斗争。Google 验证码是 Google 提供的一项免费的验证码服务,接入非常简单,推荐用它来替换传统的图片验证码。
晓晨
2019/04/23
2.9K0
ASP.NET Core  使用 Google 验证码(Google reCAPTCHA)
验证码识别服务2Captcha框架
2Captcha是一个自动验证码识别服务,主要用于解决各种互联网服务中的验证码问题。在许多网站注册账户或进行敏感操作时,为了验证用户是真实的而不是自动化程序,会出现验证码。用户必须正确输入验证码,才能继续使用网站的功能。该框架的目标是帮助客户自动化解决验证码问题。客户可以通过付费将需要解决的验证码发送给2Captcha,然后由2Captcha将这些验证码分发给专业的打码员进行输入。这些打码员是人工操作,而不是机器,他们能够快速有效地识别验证码,确保客户能够顺利通过验证码验证,继续使用所需的功能。
王瑞MVP
2023/07/22
1.2K0
验证码识别服务2Captcha框架
200 行代码实现一个滑动验证码
做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动、点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大致说明下这些验证码的原理以及带大家实现一个滑动验证码。
崔庆才
2019/07/04
1.3K0
怼就完事了,总结几种验证码的解决方案
截止到今天咸鱼已经写了很多期关于 Js 逆向的文章,不过这么多的文章都有一个共同点,都是关于加密参数或者密码加密的解析,很多读者在后台私信希望能够出一些关于滑动验证或者人机验证的分析教程。
咸鱼学Python
2020/01/14
3K0
怼就完事了,总结几种验证码的解决方案
关于行为验证码,你不知道的一些问题!
验证码(CAPTCHA)全称为:Completely Automated Public Turing test to tell Computers and Humans Apart,全自动区分计算机和人类的图灵测试,是一种区分用户是计算机还是人的公共全自动程序。
用户9953929
2023/05/09
1.1K0
ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码
Google reCAPTCHA(v3下同) 的使用不需要“梯子”,但申请账号的时候需要!
乔达摩@嘿
2020/09/11
2.3K0
ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码
【验证码逆向专栏】某多多验证码逆向分析
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
K哥爬虫
2024/11/25
2290
【验证码逆向专栏】某多多验证码逆向分析
vue+drf+第三方滑动验证码的接入实现
近期在项目开发练习中用到了登录功能 + 验证码的需求,验证码一般分为三种类型:图片验证码、短信验证码、滑动验证码,相关实现思路如下
仙人技术
2021/02/04
1.5K0
django 人机校验我是人类-使用hCaptcha或Turnstile代替simple-captcha
首先,确保你已经完成了django知识的学习, 以便不出现未经了解且不易理解的错误,本文不会叙述基础教程,如若此, 请跳转至djangoproject官网教程.
zmh-program
2023/02/06
2K0
推荐阅读
相关推荐
国内使用Google reCaptcha验证码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验