15分钟破解网站验证码

概述

很多开发者都讨厌网站的验证码,特别是写网络爬虫的程序员,而网站之所以设置验证码,是为了防止机器人访问网站,造成不必要的损失。现在好了,随着机器学习技术的发展,机器识别验证码的问题比较好解决了。

样本采集工具

这里我们采用wordpress的Really Simple CAPTCHA生成验证码的插件,之所以选择这个插件,一个是它的安装量很大,二个是因为它是开源的,我们可以利用它批量的生成验证码图片。

目标估计

我们通过demo网站得知,Really Simple CAPTCHA生成的是包含4个数字或者字母的图片,通过阅读源码得知,这个插件还屏蔽了O和I这两个比较容易混淆的字母,也就是说,还剩下32个字符,看来可以完成。 ??目前花费了两分钟。

依赖

我们要用到以下的工具和库。

  • python3
  • opencv
  • keras
  • tensorflow

创建样本集

为了达到目的,我们首先要准备样本集,样本如下:

使用Really Simple CAPTCHA插件的源码,我们很方便的批量生成10000个验证码图片和对应的结果,待我们生成完成后,大概如下:

这地方大家可以根据自己的实际情况修改Really Simple CAPTCHA插件的源码,来生成自己想要的样本集。如果你觉着麻烦,也可以下载我生成好的。

目前为止,我们花了五分钟。

如何训练

我们现在有了样本集了,我们可以直接那图片和对应的结果直接进行神经网络的训练。

只要我们的样本够多,最终也能达到我们想要的效果。

但我们也可以采用更好的训练方法,这个训练方法使用更少的样本数据,但是结果要比直接训练的方法好很多,我想你已经猜到了,这个方法就是把图片中的四个字符切割开,形成四个样本。这方法之所以可行,是因为所有的验证码图片都是4个字符的。

10000张图片,一张一张手动用PS去切割,肯定不现实,而且由于图片的横向排列并不是等间距的,字符间的距离大小不一致,手动切割肯定不可能了。

其实我们只要画出一个矩形,保证矩形框里只有字符就可以,然后从图片中切出这样的一个矩形,就形成了一个单个字符的图片样本。幸运的是,这个操作opencv已经帮我们实现了,opencv有个函数叫做findContours(),可以按照同样色值的区域裁剪我们想要的矩形。 - 首先准备一个图片:

- 转换图片为黑白色。这样有字符的地方为黑色,空白为白色,便于opencv裁剪。

-接下来我们用opencv的findContours函数切割图片。

接下来,我们就把图片从左到右进行切割,并存储切割后的图片,以及图片对应的字符。但是实际操作的过程中,我发现一个问题,就是有时候两个字符靠的太近,导致opencv在切割的时候,把两个字符切割刀一个图片里了,比如:

切割完的效果是:

如果不解决这个问题,我们的样本集就不准了,那训练出来的模型也就不可能正确了。我的解决方法是,首先设置一个字符宽最大的像素,如果超过这个像素,则认为一个图片中包含了两个字符,然后我们选择把这个图片对半切割,分成两个字符。例如:

好,我们现在得到了一个验证码图片对应的4个字符的图片,现在我们把所有的样本图片都切割好,然后,把相同的字符对应的图片放到一个文件夹,这么做的目的是尽量多的找出同一个字符的多种样式。结果如下:

到目前为止,我花了10分钟。

训练模型

因为我们只是识别图片对应的数字或者字母,所以我们不需要特别复杂的神经网络算法。识别字符比识别小猫小狗的简单多了。

??

我这地方使用卷积神经网络,two convolutional layers and two fully-connected layers。

这地方对卷积神经网络算法就不做详细介绍,感兴趣的同学,可以google学习一下。 ?

?

训练完成后,我们需要测试一下。15分钟花完。

总结

整个过程看起来很简单: - 从使用我们上述提到的插件的wordpress网站上下载验证码图片 - 把图片切割成包含单个字符的小图片 - 使用神经网络算法训练模型 - 预测新的验证码图片对应的字符

下面是我的测试:

代码

https://pan.baidu.com/s/1o94k2k6

你可以从这得到完整的代码和示例图片,你可以参照README来运行相关的程序。

原文地址:https://www.cnblogs.com/bjcoder/p/8253765.html

时间: 2024-10-09 22:20:01

15分钟破解网站验证码的相关文章

使用tesseract-ocr破解网站验证码

使用tesseract-ocr破解网站验证码 博客分类: 图像识别.机器学习.数据挖掘 GroovyHPGoogleBlog 首先我得承认,关注tesseract-ocr, 是冲着下面这篇文章的噱头去的,26行groovy代码破解网站验证码 http://www.kellyrob99.com/blog/2010/03/14/breaking-weak-captcha-in-slightly-more-than-26-lines-of-groovy-code/ 当然,看了之后才知道,原来是调用了三

针对中小型网站 3000人左右/15分钟 的服务器架构

本文涉及的服务器构架主要针对3000人左右/15分钟的中小型网站, 多见于discuz!论坛构建的社区等等 环境为linux(内核2.6+), nginx, php(fastcgi), mysql 等高效开源软件构成, 成本低廉, 是普通个人站长朋友的首选,  但是针对部分企业, 这个方案也是一个非常不错的选择! 至于nginx和apache等web服务器的性能比较这里就不多说了 本文是以实例的方式来描述安装以及配置等情况, 供各位参考 1. 硬件环境 一台web服务器, 一台db服务器, 没有

15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)

15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码) 前言 设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经验的凝练和总结,能更大限度的优化代码以及对已有代码的合理重构.作为一名合格的前端工程师,学习设计模式是对自己工作经验的另一种方式的总结和反思,也是开发高质量,高可维护性,可扩展性代码的重要手段. 我们所熟知的金典的几大框架,比如jquery, react, vue内部也大量应用了设计模式, 比如观察

老司机教你使用shel脚本15分钟部署LNMP

防伪码:我喜欢出发,只为到达的地方都属于昨天!          老司机教你使用shel脚本15分钟部署LNMP 一.环境简介 1.LNMP,顾名思义,就是Linux系统下Nginx+MySQL+PHP的一种网站服务器架构. 2.Linux是目前最流行的免费操作系统,代表版本有debian.centos.fedora.gentoo等, 今天我们使用CentOS-6.5作为LNMP架构的基础. 3.Nginx是一个高性能的HTTP和反向代理服务器,其性能稳定.功能丰富.运维简单.处理静态文件速度快

云主机送IP免备案,15分钟交付使用

IDC云主机服务其实就是一种互联网的服务项目之一,能够为客户提供多项的.全面化的服务,其中包括域名的申请.虚拟主机的租用或者 主机的托管项目等等.尤其是当今的社会信息化,云主机服务的重要性在网络时代越来越重要,而且被应用的范围越来越广,最简单直接的 就是一种云储存等服务. 在网站IDC服务中,申请域名是网站非常重要的环节,因为域名代表着网站的形象和价值,域名也就是网站价值评估的内容之一.网 站域名越简单越容易被记忆,那么对于网站流量来说是非常好的引导. 另外就要说到重点了,那就是IDC云主机的租

你的第一台负载均衡器 - 15分钟的入门课

"我是负载均衡新手,文档太复杂,需要入门资料." "我要初始化一台负载均衡器,人生第一次,需要指导." 如果你是新手,如果你第一次接触负载均衡器,如果它的名字是Citrix NetScaler,那恭喜,前面的问题完全不是问题了.请直接开机,打开浏览器,按照向导在几分钟内就可以配置完成,你从此迈过了负载均衡应用交付的门槛,一个新的世界豁然开朗: 输入用户名密码配置管理地址后便会看到这个向导界面 您看到了一个陌生的词,Subnet IP Address,如何继续? 请先

15 分钟学会使用 Git 和远程代码库

Git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本的Git和远程代码库干活的工作步骤,在15分钟内. 工作步骤 我会展示以下的步骤,通常能帮我独自在一台或多台机器上做项目. 创建一个远程的空代码库(在BitBucket上) 在本地代码库添加一个项目 在分支上开发新功能 a) 保留新功能 或者 b) 丢弃它们 也许,回到某个早先的时间点 将本地代码库

[ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

[ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>      [ASP.NET MVC2 系列] ASP.Net MVC教程之<ASP.NET MVC 概述>     [ASP.NET MVC2 系列] 理解MVC应用程序的执行过程     [ASP.NET MVC2 系列] ASP.NET MVC Routing概述      [ASP.NET MVC2

Python识别网站验证码

http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内容.入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足. 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过对图片的像素点进行一系列的操作,最后输出验证码图像内的每个字符的文本矩阵. 读取图片 图片降噪 图片切割 图像文本输出 验证字符识别 验证码内的字符识别主要以机