0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

马哥Linux运维 2018-01-22 09:15 次阅读

让我们一起攻破世界上最流行的WordPress的验证码插件每个人都讨厌验证码——在你被允许访问一个网站之前,你总被要求输入那些烦人的图像中所包含的文本。验证码被设计成,以验证你是一个真正的人的方式,来防止电脑自动填写表单。但是随着深度学习计算机视觉的兴起,它们现在往往很容易被攻破。我在读Adrian Rosebrock的优秀的著作《Python计算机视觉深度学习》。在书中,Adrian简单地描述了他如何用机器学习绕过E-ZPass New York网站的验证码:

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

Adrian没有访问生成验证码图片的应用的源代码的权限。为了破解这个系统,他不得不下载成百上千个示例图像并手动解答它们,用以训练他的深度学习系统。但是如果我们想打破一个开放源代码的验证码系统,将会怎么样?我去wordpress.org插件注册表搜索“验证码”。最靠前的结果是一个叫“真正简单的验证码”的插件,有超过100万个活跃安装:

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

并且最好的一点是,它开源!因为我们有生成验证码的源代码,那么这应该是很容易破解的。为了让事情更有挑战性,让我们给自己一个时间限制。我们是否能够在15分钟内破解这个验证码系统?让我们试试看!重要提示:这绝不是针对“真正简单的验证码”这个插件或它的作者的批评。插件作者本人也说,这个插件不再安全,建议您使用其他东西。这只是一个快速而有趣的技术挑战。但是如果你是剩下的100万个用户中的一个,也许你应该切换到其他插件:)

挑战开始

为了打造一个进攻计划,让我们先来看看这个插件会生成哪种类型的图片。在演示站点上,我们看到这个:

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

好的,所以验证码图像似乎是四个字母。让我们在PHP源代码中验证这一点:

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

是的,它会产生一个四字母的验证码,并采用随机组合的四种不同的字体。我们可以看到,它从不在代码中使用“O”或“I”,以避免用户混淆。这给了我们总共32个可能需要识别的字母和数字。没问题!到目前为止时间过去:2分钟。

我们的工具集

在我们进一步讨论之前,让我们说一下为了解决这个问题我们将会用到的工具:Python3Python是一种非常有趣的编程语言,它有很好的机器学习和计算机视觉库。OpenCVOpenCV是一种流行的计算机视觉和图像处理框架。我们将使用OpenCV来处理验证码图像。它有一个Python应用接口,因此我们可以直接从Python中使用它。KerasKeras是一个由Python写的深度学习的框架。它可以使我们用最少的代码,方便地定义、训练和使用深层神经网络TensorFlowTensorFlow是谷歌的机器学习库。我们会在Keras中写代码,但Keras并没有真正实现神经网络的逻辑本身,它其实是在后台调用谷歌的TensorFlow进行计算。好,现在让我们回到挑战!

创造我们的数据集

训练任何机器学习系统,我们都需要训练数据集。破解一个验证码系统,我们则需要训练数据看起来像这样:

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

这是唯一我不会给你示例代码的部分。我们这样做是为了教育,我不想让你真的去黑WordPress网站。不过,我会给你我最后生成的这10000张图像,以便你可以重复我的结果。到目前为止时间过去:5分钟。

简化问题

现在我们有了训练数据,我们可以直接用它来训练神经网络:

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

有足够的训练数据,这种粗暴的方法甚至也行得通 - 但我们可以使问题更容易解决。问题越简单,训练数据越少,计算资源消耗就越少。毕竟我们只有15分钟!幸运的是,验证码图像总是由四个字母组成。如果我们能用某种方式把图像分割开来,这样每一个字母都是一个独立的图像,那么我们只需要训练神经网络一次识别一个字母:

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

我没有时间浏览10000个训练图像,并在Photoshop中手动将它们分割成单独的图像。这将需要几天,而我只剩下10分钟了。而且我们不能将图像分成四个相同大小的块,因为验证码会将这些字母随机放置在不同的水平位置:

每个图像中的字母随机放置,使分割图像更难一些。

幸运的是,我们仍然可以自动执行此操作。在图像处理中,我们经常需要检测具有相同颜色的像素团。这些连续像素团周围的边界被称为轮廓。OpenCV有一个内置的findContours()函数,可以用来检测这些连续的区域。那么我们将从一个原始的验证码图像开始:

然后,我们将图像转换为纯黑白(这称为阈值设定),这样就很容易找到连续的区域:

接下来,我们将使用OpenCV的findContours()函数来检测图像中各个包含相同颜色像素的连续团:

那么只需将每个区域保存为一个单独的图像文件即可。而且由于我们知道每个图像应该包含从左到右的四个字母,所以我们可以使用这些知识来标记字母。只要我们按顺序保存它们,我们能够用适当的字母名称保存每个字母图像。但是等等 —— 我看到一个问题! 有时候验证码有这样的重叠字母:

这意味着我们最终将提取将两个字母拼凑在一起的区域:

如果我们不处理这个问题,我们最终会创建糟糕的训练数据。我们需要解决这个问题,以免我们不小心让机器把这两个相连的字母识别为一个字母。

我们将把任何宽度比高度还长的区域对半分开,并把它当作两个字母。这是很粗暴,但这么处理对识别这些验证码依然行得通。

现在我们有了一种提取单个字母的方法,让我们在所有的CAPTCHA图像上运行它。目标是收集每个字母的不同变化。我们可以将每个字母保存在自己的文件夹中。下面是我提取所有字母后,我的“W”文件夹的样子:

从我们的10000个验证码图像中提取的一些“W”字母。我一共得到了1147个不同的“W”图像。到目前为止时间过去:10分钟。

创建和训练神经网络

由于我们只需要识别单个字母和数字的图像,我们不需要一个非常复杂的神经网络架构。识别字母比识别诸如猫和狗的图片这样的复杂图像要容易得多。我们将使用具有两个卷积层和两个完全连接层的简单卷积神经网络结构:

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

如果你想知道更多关于卷积神经网络是如何工作的,为什么他们被用作图像识别非常理想,请查看Adrian的书或我以前的文章。用Keras定义这个神经网络体系结构只需要使用几行代码:

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

现在,我们可以开始训练它了!

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

用训练数据集训练10次后,我们达到了近100%的准确度。现在,只要我们想,我们应该能够自动绕过这个验证码了!我们做到了!到目前为止时间过去:15分钟。(~!)

使用训练的模型破解验证码

现在,我们有一个训练有素的神经网络,用它来破解真正的验证码非常简单:1.从使用该WordPress插件的网站抓取真实的验证码图像。2.使用我们用来创建训练数据集的相同方法,将验证码图像分解为四个单独的字母图像。3.要求我们的神经网络对每个字母图像做一个单独的预测。4.使用四个预测字母作为验证码的答案。5.愉快的玩耍吧以下是我们的模型如何解码真正的验证码

或者从命令行

简单地描述了如何用机器学习绕过E-ZPass New York网站的验证码

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机视觉
    +关注

    关注

    8

    文章

    1596

    浏览量

    45602
  • 机器学习
    +关注

    关注

    66

    文章

    8112

    浏览量

    130545
  • python
    +关注

    关注

    51

    文章

    4671

    浏览量

    83457
  • 深度学习
    +关注

    关注

    73

    文章

    5235

    浏览量

    119893

原文标题:Python破解验证码,只要15分钟就够了!

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    鸿蒙原生应用/元服务开发-Serverless账户验证码的问题

    在应用/元服务早期使用过程中,-Serverless账户验证码的格式是[AGC][应用/元服务名称],如下图。 但是,在最近,[应用/元服务]名称直接变成了【default】,用户收到这种验证码后,心里存有疑虑的,这是哪里配置或者设置的问题吗?大家有遇到同样的问题吗?如何
    发表于 12-27 15:55

    织梦dedecms登陆提示“验证码不正确”的完整解决方案

    很多朋友碰到了网站登陆的时候遇到了验证码不正确,考虑到刚刚设置了网站文件夹的权限,估计是权限不够造成的,后来经过了解,dedecms的验证码是data目录的session文件夹,在服务
    发表于 03-10 23:53

    10种意想不到的验证码风格设计

    67条评论】发表评论关键词:验证码,设计 | 作者:老枪 | 收藏这篇资讯众所周知,验证码就是帮助我们的网站防止计算机生成答案。今天的这10个用户体验绝佳、令人意想不到的验证码设计风格
    发表于 05-05 14:03

    什么时候才能发帖不需要验证码?

    每次发帖都要验证码,什么时候才能发帖不需要验证码?
    发表于 06-04 19:17

    12306图片验证码难倒了谁?

    ,现在不光要靠网速……(还有看人品)下面是摘自网上的新闻:  一次性输入正确率仅为8%  为了防止抢票软件破解,铁道部12306网站不断将登录的图形验证码更新,层出不穷的图形码让一些网购车票的旅客
    发表于 12-08 10:29

    论坛注册时不显示验证码

    论坛注册时不显示验证码啊,提交时提示验证码错误,希望早点解决,这是用别人的号发的!!!!!!!!!!!
    发表于 03-01 21:45

    无法验证邮箱,总是提示验证码错误,验证码明明是正确的。

    `无法验证邮箱,总是提示验证码错误,验证码明明是正确的。是不是系统的bug?`
    发表于 05-12 10:41

    为什么短信验证码在我们生活中频频出现

    随着时代的进步和科学技术的发展,越来越多的企业已经离不开短信验证码发送平台了,因为它可以帮助企业处理大量的用户信息,提高接收短信验证码的经验意识。大型网站提供了短信验证码功能,更准确、
    发表于 04-16 23:12

    一文解析验证码与打平台的攻防对抗

    1、验证码与打平台的攻防对抗  众所周知,验证码的出现是为了区分人和机器,但随着科技的发展,黑产从业者的可图之利增多,验证码的战场也进入了
    发表于 09-28 11:02

    java图形验证码生成的设计实现

    今天来学习下图形验证码的生成,首先依赖开源组件:<dependency><groupId>com.github.penggle<
    发表于 10-21 14:42

    平台是如何高效的破解市面上各家验证码平台的各种形式验证码的?

    ,比如说引入机器学习和神经网络等人工智能相关技术来智能识别图片中的验证码要素,提高识别验证要素的准确率等。以下是某个打平台相关人工智能技术
    发表于 11-01 15:21

    以一个真实网站验证码为例,实现了基于一下KNN的验证码识别

    很多网站登录都需要输入验证码,如果要实现自动登录就不可避免的要识别验证码。本文以一个真实网站验证码为例,实现了基于一下KNN的
    的头像 发表于 12-24 17:27 7431次阅读

    如何使用Python机器学习解决验证码的资料说明

    写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类
    的头像 发表于 05-03 13:43 2117次阅读

    爬虫实现目标网站验证码登陆

    在爬虫访问目标网站的过程中,很多网站为了避免被恶意访问,需要设置验证码登录,这样是为了避免非人类的访问。今天我们学习下如何使用Python爬虫实现
    发表于 12-11 15:27 2221次阅读

    带带弟弟OCR通用验证码识别SDK免费开源版

    在使用爬虫登录网站的时候,经常输入用户名和密码后会遇到验证码简单一点的有字母验证码,复杂一点的有滑块验证码,点选文章和点选图片
    的头像 发表于 03-30 17:26 4250次阅读