代码共享:运用Python和Tesseract来辨认图形验证码

访客5年前黑客资讯1174

 各位在企业中做Web缝隙扫描或许浸透测验的朋友,或许会常常遇到需求对图形验证码进行程序辨认的需求。许多时分验证码分明很简略(关于非互联网企业,或许企业界网中的运用来说特别如此),但由于没有趁手的辨认库,也只能苦哈哈地进行人肉辨认,或许无法地抛弃使命。在这里,我共享一下自己运用Python和开源的tesseract OCR引擎做验证码辨认的经历,并供给相关的源代码和示例供咱们学习。

一、关于图形验证码辨认与tesseractOCR
虽然大都图型验证码只要戋戋几个数字或字母,但你或许听说了,在进行机器辨认的过程中,你要搜集样本,对图片去噪、二值化、提取字符、核算特征,乃至还要祭出神经 *** 去练习数据进行机器学习……还没开干,退堂鼓早打响三遍了。其实我底子不想去研究那么多深邃的理论,只想要寥寥数行Python代码就搞定它,然后把首要精力投入到更重要的浸透测验中去。在这种情况下,tesseract就能帮上大忙了。
Tesseract的OCR引擎最早是HP实验室开发的,曾经是 OCR业界最精确的三款辨认引擎之一。2005年该引擎交给了Google,作为开源项目发布在Google Project上了。Tesseract供给独立程序和API两种方式供用户运用。纯白色布景、字符规整无搅扰像素的验证码图片能够直接调用tesseract程序来进行辨认。如要更便利灵敏地在自己的程序中进行辨认,则能够运用tesseract的API。
二、Tesseract的编译和装置
Tesseract的项目主页(https://github.com/tesseract-ocr/tesseract)上wiki中有具体的编译装置过程,咱们能够参阅,本文中咱们将以3.05.01版别为根底。我的体系环境是RHEL 7.4,64位版别。首先用yum装置各种依靠的图形库,然后用源码装置Leptonica(官方主页http://www.leptonic *** /download.html,版别需求1.74以上),编译装置很简略,解压后,以默许参数顺次履行configure,make,make install指令即可。装置完之后需履行:
exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig
否则鄙人一步tesseract的configure脚本会报找不到Leptonica。
将tesseract的源码解压后进入到源码主目录下顺次履行:
./autogen.sh
./configure--with-extra-libraries=/usr/local/lib
make
make install
即可成功装置。
依据项目wiki,Data Files节的攻略下载相应的数据文件,由于咱们只辨认英文和数字验证码,所以下载3.04/3.05版别的英语文件eng.traineddata即可,下载后放到/usr/local/share/tessdata目录下。至此,tesseract就装置结束了。
三、为Python封装tesseract API
tesseract供给的是C++ API(接口界面是TessBaseAPI类),最中心的函数便是TessBaseAPI::TesseractRect这个函数。为了能在Python中便利地运用,我将其封装为Python模块了,具体代码放在github上:https://github.com/penoxcn/Decaptcha。该模块名为decaptcha,源文件包含以下四个文件:
setup.py、decaptcha.i、decaptcha.h和depcaptcha.cpp。
 将以上文件放在同一个暂时目录下,然后履行以下指令进行编译和装置:
python setup.py install
装置时需求调用swig指令,所以体系需求先装置swig。
假如tesseract不是装置在默许的途径下,请参照setup.py代码自行修正相关的头文件和库文件的途径即可。
装置完之后进入Python交互环境试着import一下看是否正常:
from decaptcha import Decaptcha
假如报错找不到libtesseract,那或许是tesseract的库目录(/usr/local/lib)没有在Python的库搜索目录中。这时分能够将tesseract的库目录添加到体系的/etc/ld.so.conf文件中(加了之后需求履行ldconfig指令以收效);或许每次import decaptcha模块之前,都先履行以下Python代码:
import sys
sys.path.append("/usr/local/lib")
四、装置Python PIL库
PIL的全称是Python Imaging Library,是一个强壮而易用的图画库。在其主页(https://www.hack56.com/images/5k2jec3zaav.png') # Your image here!  
img = img.convert("RGBA") 
pixdata = img.load() 
width,height = img.size
print 'imgsize: %dx %d' % (width, height)
print'pixel[2,4]:', pixdata[2, 4] #eg,(0xD3,0xD3,0xD3,0xFF)
五、实战验证码辨认
至此,进行图形验证码辨认的依靠环境都已准备好,咱们能够开干了。
辨认的流程简略来说如下:
1. 用Image加载图画,转为RGBA格局,然后获取像素数据;
2. 将RGBA格局的像素数据转化为0和1的字节串(其实便是二值化处理);
3. 调用decaptcha模块进行图画辨认,取得验证码字符串
实践的代码也十分简略,请看我项目Decaptcha目录下的decaptcha_test.py文件,要害代码也就十几行。影响代码长短或复杂性的,便是二值化这一步了。其实许多图形验证码比较简略,仔细剖析一下,不难得出二值化的条件。下面以我工作中遇到过的一些验证码为例:
有5组,均来自于我公司的不同事务网站。辨认代码请参看我项目目录下decaptcha_demo.py文件,一切的示例验证码放在images目录下。咱们能够用图片编辑器翻开相关的验证码文件调查和剖析像素的规则。
之一组aa系列,字符色彩偏白,布景偏黑,所以可试着以像素RGB均值(或总和)大于某个数值为条件进行转化:r+g+b>=480则为1,否则为0。

[1] [2]  黑客接单网

相关文章

使用视觉含糊测验技能探究zalgoscript

请咱们先调查下面这条JavaScript句子: ̀̀̀̀̀́́́́́̂̂̂̂̂̃̃̃̃̃̄̄̄̄̄̅̅̅̅̅̆̆̆̆̆̇̇̇̇̇̈̈̈̈̈̉̉̉̉̉̊̊̊̊̊ͅͅͅͅͅͅͅͅͅͅͅalert(̋̋̋ͅ...

好用的Google缝隙爬虫:Google Mass Explorer

这是一款根据谷歌搜索引擎的自动化爬虫。 爬虫介绍 爬虫大体机制便是: 先进行一次谷歌搜索,将成果解析为特定格局,然后再提供给exp运用。 我们能够测验运用–help来列出一切参数。 这个项目笔者会持...

根据Session的身份盗取

一、Session是什么 暗码与证书等认证手法,一般用于登录进程。用户登录之后,服务器通常会树立一个新的Session保存用户的状况和相关信息,用以盯梢用户的状况。每个Session对应一个标识符Se...

Modbus TCP流量剖析

Modbus协议 Modbus是全球第一个真实用于工业现场的总线协议,ModBus选用主/从(Master/Slave)方法通讯。最大可支撑247个隶属控制器,但实践所支撑的隶属控制器数还得由所用通讯...

Pastebin Hacking新姿态:运用jQuery替换进行歹意软件传达

跟着各种网络技能不断发展,黑客关于网站进犯也总是不断改换战略以及通过相互之间的交流来改善进犯技能。而事实上就现在网站安全方面,面对的应战首要也正是来自于进犯技能不断的演进,使得防护也需不断晋级。在之...

恣意用户暗码重置(四):重置凭据未校验

在逻辑缝隙中,恣意用户暗码重置最为常见,或许出现在新用户注册页面,也或许是用户登录后重置暗码的页面,或许用户忘掉暗码时的暗码找回页面,其间,暗码找回功用是重灾区。我把日常浸透过程中遇到的事例作了缝隙成...