前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原来这样 4 步就能破解,再也不用手输验证码了!

原来这样 4 步就能破解,再也不用手输验证码了!

作者头像
double
发布2020-04-01 14:58:45
3.6K0
发布2020-04-01 14:58:45
举报
文章被收录于专栏:算法channel算法channel

解惑之术

• 解决方案 1

• 解决方案 2

• 具体实现

解决方案 1

还在为谷歌类验证码挠破头皮?

还在为滑块验证码感到头皮发凉?

谷歌的这种验证是reCaptcha(v2.0)该服务使用的简单算法如下:

• 目标网站开放凭据(验证码的“站点密钥”,站点url,可选:代理IP)由您(客户端)复制并提交给2captcha服务。您可以使用简单的Web开发人员工具找到它们。

• 服务端的工作人员使用提供的凭据解决reCaptcha。

• 在10到30秒钟内,您会以g-recaptcha-response令牌的形式请求答案。

• 您可以在带有recaptcha的目标网站[提交]表单内使用此g-recaptcha-response令牌。

另外,如果你想通过javascript逆向的方式去解决验证码方案,往往逆向的难度都是比较大的,例如某团的js逆向验证码:

虽然验证码是简单的英文字母验证码,可以使用简单的ocr进行字母识别,但是我们看看提交的表单:

这里的token参数有加密,让我们继续看看后面:

我们可以通过后缀看到==结尾,通常是通过base64的方式进行加密,而表单的最后一个参数是图片的字母。作者尝试过逆向其中的token参数,发现里面的js文件进行了混淆,难度瞬间升到顶级。所以我们对于验证码的绕过,使用第三方平台服务比较方便。

而对于滑块类验证码,我们需对样本数据进行数据标注,即将滑块的位置标注,用目标识别的模型,预测出滑块位置,最后通过轨迹方程,通过滑块验证。你可以自己搭建模型或者github上克隆别人的代码,通常项目作者与自己所使用的库版本不兼容,或者什么劈里啪啦的原因,导致使用的时候会报错(本人在学习yoloV3的时候深有体会…)。如果你想快速的开发上线功能的话,报错、准确率不高的情况就比较愁人。

解决方案 2

那么我再另外提供一个思路,在一天苦苦的在想还有什么破解方法的时候,我偶然间看到俄罗斯的一个服务商 2Captcha 提供的图像识别和一系列行为验证码的识别服务。他是通过图像识别算法和大量人力的支撑,相当于将我们的训练工作省去了,我们可以直接调用他们训练过的模型,或者其背后会有人来对验证码进行模拟,然后返回其验证成功后的秘钥,我们利用其结果便可以完成一些验证码的绕过。然后我们就可以猥琐、美滋滋地进行学习333。

当然这种网站肯定是要收费的,按照 1000 次识别为单位,其花费的费用为 0.5 美刀到 2.99 美刀不等,对于谷歌这类的验证码,具体的内容大家可以到其官方说明 https://2captcha.com/2captcha-api#rates 去查看。下面我们就来以谷歌验证码为例子,使用第三方平台,一起来体验一下其魅力。打开官网,看看使用该类型的验证码服务需要提供什么数据:

大概操作就是通过源码找到验证码元素里面的id信息。

具体实现

1.准备chromedriver、selenium,或者requests。

在准备登陆目标网站之前发现有这个东西阻拦着我们。

2.当打开目标网页的时候,发现有滑块类|谷歌类验证码。

• 让我们打开网页调试查看源代码,查看此验证的元素查找以www.google.com/recaptcha/api2/anchor开头的链接,或查找 data-sitekey参数。

• 让我们复制这个属性的值

• 让我们把这个属性的值发送至服务端,相当于告诉服务器我们遇到的哪一个验证。

3.让我们试下将验证发给服务器

请求接口:https://2captcha.com/in.php 让我们看看服务端需要我们发什么参数过去

那我们就照着要求发送吧。

代码语言:javascript
复制
import requests
from urllib.parse import urlencode
from json import loads

url = "http://2captcha.com/in.php?"
params = {
    'key': 'c************************a48',  # 服务的密钥
    'method': 'userrecaptcha',  # 直接赋值
    'googlekey': '6LfxxxxxxxxxxxxxxxxxxxxxRMFJYMz8',    # 从元素里复制下来的sitekey
    'pageurl': 'http://google.com/recaptcha/api2/demo', # 当前的url
    'json': 1 # 拿到json形式的数据
}
response = request(method='get', url=url+urlencode(params)).text
print(loads(response))

>>{“status”:1,“request”:2123279149} # 证明成功了,我门只需要拿到request的值就能拿到返回
结果接口:https://2captcha.com/res.php

我们再看一下这个接口要求的参数是什么:

我们照猫画虎,构造url

代码语言:javascript
复制
url = "http://2captcha.com/res.php?"
params = {
    'key': 'c************************a48',  # 服务的密钥
    'action': 'get',  # 直接赋值
    'id': 2123279149,    # request值
    'json': 1
}
response = request(method='get', url=url+urlencode(params)).text
print(response)

我们就拿到了类似这么长的一个东西。

03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB-50GQHPEBJUHNnhJyDzwRoRAkVzrf7UkV8wKCdTwrrWqiYDgbrzURfHc2ESsp020MicJTasSiXmNRgryt-gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3-egcplD1uLGh79wC34RF49Ui3eHwua4S9XHpH6YBe7gXzz6_mv-o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q

拿到这个怎么用呢??

找到ID为g-recaptcha-response的元素,并通过删除display:none参数使其可见 。

4.决胜之日

完成上面的操作后,就会出现一个文本框,然后通过元素定位,将res拿到一大串的东西输入.

我们再通过检查元素,定位至Submit的按钮元素;最后通过selenium语句实现自动化点击:find_element_by_id_name(‘recaptcha-demo-submit’).click()(注意:或者其他定位语句,例如:find_element_by_xpath等):图片出现如下就说明,已经验证通过了!!!

以上操作都可通过selenium自动化完成,且若不能成功返回数据的,请看官方文档,里面详细的介绍的出现错误的类型及其解决方式。

链接:https://2captcha.com?from=8995879

最后,我在这里说一下,对于开发周期太短,技术实现太复杂的情况我推荐用服务商的接口,因为如果花太多时间在绕过验证码这方面,还不如优化一下代码,使得代码运行速度更快、鲁棒性更强,(另外实在不行的情况下我们也可以让功能先上线再说…技术的东西慢慢不上),毕竟攻城狮能合理调配资源解决问题也是好攻城狮;还有说一句,破解完成后的感觉实在是太棒了!

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

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决方案 1
  • 解决方案 2
  • 具体实现
    • 1.准备chromedriver、selenium,或者requests。
      • 2.当打开目标网页的时候,发现有滑块类|谷歌类验证码。
        • 3.让我们试下将验证发给服务器
          • 4.决胜之日
          相关产品与服务
          验证码
          腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档