我不是机器人:谷歌最新版验证码系统ReCaptcha破解已开源
选自 Github
作者:George Hughey
机器之心编译
每个人都讨厌验证码,这些恼人的图片中包含你必须输入的字符,我们只有正确地填写才能继续访问网站。验证码旨在确认访问者是人还是程序,并防止恶意程序的入侵。然而,随着深度学习和计算机视觉技术的发展,现在这些认证方法可以被我们轻松破解了。
在这一个项目中,作者破解了最新版的 ReCaptcha,并开源了所有代码。不过项目作者声明:「这份代码能够解决最新版的 ReCaptcha,但仅限于在自己网站上使用,且仅用于教育目的。」
reCAPTCHA 项目是由卡内基梅隆大学开始构建的系统,这个项目将从书本上扫描下来、无法被 OCR 准确识别的文字显示在 CAPTCHA 问题中,从而判断访问者到底是程序还是人类。自 2014 年以来,reCAPTCHA 改为在「我不是机器人」(I'm not a robot)的方框中打勾,进而完成判别。
这个名为 unCaptcha 的项目最早创建于 2017 年 4 月,并在当时实现了 85% 的 ReCaptcha 对抗率。不过后来谷歌发布了新版本的 ReCaptcha,且新版的 ReCaptcha 主要有以下两个主要改进:
更好的浏览器自动检测使用短语语音而不是数字
这些改进最开始成功地防御了第一版 unCaptcha 的攻击,然而到了 18 年 6 月份,这些挑战基本都已被解决。本项目的作者同样与 ReCaptcha 团队取得了联系,他们完全了解这次攻击。此外,ReCaptcha 团队还允许该项目作者发布 unCaptcha2 的代码,尽管它目前仍然能有效破解 ReCaptcha 验证码。
unCaptcha2 简介
由于 ReCaptcha 添加了语音形式的验证码识别,破解 ReCaptcha 比以前变得更加容易。因为我们只需要调用一个免费的语音识别 API,对所有验证码的识别准确率就能达到 90% 左右。另外由于 ReCaptcha 会阻止浏览器自动化引擎 Selenium,unCaptcha2 会使用屏幕点击器(clicker)移动到屏幕上特定的像素,从而像人一样浏览网页。当然在模拟人类浏览的过程中,每一个新用户的坐标都需要更新,这个目前并不是太鲁棒。
unCaptcha2 的方法非常简洁:
导航至谷歌的 ReCaptcha 演示网站导航至 ReCaptcha 的语音库下载语音使用语音识别 API 识别语音解析 API 返回的参数和识别结果提交识别结果,判断是否成功
如下所示 unCaptcha2 的测试界面:
如何使用 unCaptcha2
因为 unCaptcha2 必须指定屏幕上的特定坐标,因此我们必须基于设置更新坐标。这些坐标更新的代码写在了 run.py 文件的最上面。在 Linux 系统中,使用命令行 xdotool getmouselocation—shell 可以定位鼠标在屏幕上的坐标位置。
我们还需要配置到底使用哪一个语音识别 API,国内的 BAT、讯飞和搜狗等都提供高效的语音识别 API,而国外的谷歌、微软和 IBM 也一样。谷歌、微软和 IBM 的的 API 结构都已经在 queryAPI.py 中,我们只需要配置用户名和密码就行了。如果你要使用谷歌 API,我们需要使用谷歌应用的证书参数配置环境变量 GOOGLE_APPLICATION_CREDENTIAL。
最后,安装剩下的依赖项就能愉快地破解了:pip install -r dependencies.txt。
阅读更多
我不是机器人:谷歌最新版验证码系统ReCaptcha破解已开源的更多相关文章
- 关于表单重复提交之验证码 和谷歌Kaptcha图片验证码的使用
表单重复提交之-----验证码 表单重复提交有三种常见的情况: 一:提交完表单.服务器使用请求转来进行页面跳转.这个时候,用户按下功能键 F5,就会发起最后一次的请求. 造成表单重复提交问题.解决方法 ...
- linux驱动程序之电源管理之新版linux系统设备架构中关于电源管理方式的变更
新版linux系统设备架构中关于电源管理方式的变更 based on linux-2.6.32 一.设备模型各数据结构中电源管理的部分 linux的设备模型通过诸多结构体来联合描述,如struct d ...
- 谷歌Chrome浏览器提示adobe flash player已过期完美解决办法
最近使用谷歌Chrome浏览器提示adobe flash player已过期,浏览网页时一些flash元素的东西都无法正常显示,在网上尝试寻找很多方法,都不能解决,最后,经测试有效方法如下:一:下载最 ...
- 15 分钟用 ML 破解一个验证码系统
人人都恨验证码——那些恼人的图片,显示着你在登陆某网站前得输入的文本.设计验证码的目的是,通过验证你是真实的人来避免电脑自动填充表格.但是随着深度学习和计算机视觉的兴起,现在验证码常常易被攻破. 我拜 ...
- 新版raspbian系统的固定IP配置和启用root账户的ssh登录功能的方法
1. 2016新版raspbian系统的固定IP配置: 自2016年2月份新版raspbian系统发布以后,树莓派的固定IP配置方法就与之前不一样了. 之前在raspbian系统中编辑/etc/net ...
- Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统
一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...
- 如何下载官网最新版 win10 系统?
如何下载官网最新版 win10 系统?步骤: 一. 下载 遨游浏览器 将UA切换成,手机访问:推荐 UC浏览器,UA设置: Mozilla/5.0 (Linux; U; Android 8.0.0; ...
- C#联通新版验证码识别的实现
以前写了篇 联通充值卡自动充值的实现,最近发现联通官网改版了,随便看了下发现新版的验证码和以前的不同,发了点时间研究了下他的识别码,它现在的验证码如下 现在将识别步骤说下 1,转换灰度图片 2,清除2 ...
- TeamViewer如何绑定谷歌二次验证码/谷歌身份验证?
1.下载TeamViewer,找到谷歌二次验证界面 下载.注册TeamViewer后,点击右上角账户名-“编辑配置文件” [常规]-“双重验证”,点“启用” 进入[激活双重验证]界面,点“启动激活 ...
随机推荐
- cpp 内嵌函数(lambda,struct)
auto testFun = [this](int t)->void{ } []()->反回值{ } []内传入函数运行环境所用变量 ()内传入变量 捕捉块 lambda表达式的方括号部分 ...
- luogu P3297 [SDOI2013]逃考
传送门 gugugu 首先每个人管理的区域是一个多边形,并且整个矩形是被这样的多边形填满的.现在的问题是求一条经过多边形最少的路径到达边界,这个可以最短路. 现在的问题是建图,显然我们应该给相邻的多边 ...
- luogu P3240 [HNOI2015]实验比较
传送门 首先根据题目条件,题目中如果是=的点可以缩起来,然后\(a<b\)连边\(a\rightarrow b\),而且所有点入度为最多1,那么判掉有环的不合法情况,题目中的依赖关系就是一颗外向 ...
- 往github上传代码忽略node_modules文件夹
首先必须在你初始化 git 仓库的那个文件夹建立 .gitigonre 文件,在这个文件夹里面写入下面代码 node_modules npm-debug.log package-lock.json ...
- python 生成器的GeneratorExit异常
转载自:https://blog.csdn.net/hedan2013/article/details/72810653 当一个生成器对象被销毁时,会抛出一个GeneratorExit异常.请看下面的 ...
- AJAX的来龙去脉(由来)-如何被封装出来的--ajax发送异步请求(四步操作)
<黑马程序员_超全面的JavaWeb视频教程vedio\JavaWeb视频教程_day23_ajax> \JavaWeb视频教程_day23_ajax\day23ajax_avi\14.打 ...
- Ajax 及里面的XStream《黑马程序员_超全面的JavaWeb视频教程vedio》
1. ajax是什么? * asynchronous javascript and xml:异步的js和xml * 它能使用js访问服务器,而且是异步访问! * 服务器给客户端的响应一般是整个页面,一 ...
- Css - 元素的显示模式
Css - 元素的显示模式 块元素(block) 块元素是指: 1.独占一行,每个div上下之间没有留白,上面的div的底部与下面的div的顶部紧紧靠在一起没有任何缝隙 2.可设置宽高,默认宽度是父元 ...
- MySql 在cmd下的学习笔记 —— 有关用户权限的操作(grant)
用户连接到MySQL时: [用户] <----> [服务器] 分为2个阶段: 1:有没有权限连接: 2:有没有执行此操作的权利.(如select, update……) 判断依据:( ...
- delete 和 delete []的区别
(1). 针对简单类型 使用new分配后的不管是数组还是非数组形式内存空间用两种方式均可 如: int *a = new int[10]; delete a; delete [] a; ...