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

访客6年前黑客资讯1249

 各位在企业中做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]  黑客接单网

相关文章

“神起”僵尸网络的诱捕与反击(上)

2019年5月中旬,蜜罐体系监测到了一同进犯事情,引起了咱们的留意,小伙伴们敏捷跟进分析,并经过技术手段拿下黑客操控端服务器,发现黑客运用了一款名为“神起ddos集群”的软件,操控了3000+的僵尸网...

30秒攻破恣意密码保护的PC:深化了解5美元黑客神器PoisonTap

近来,闻名硬件黑客Samy Kamkar运用5美元设备打造的黑客东西PoisonTap,只需30秒,就可以攻破设置有恣意暗码的电脑体系,并完成长时间后门装置。PoisonTap不是暴力破解暗码,而是...

怎么全面防护Webshell(下)?

 在进行查询时,最要害的部分之一是找到黑客的进口点,尤其是当运维团队将受进犯的服务器康复正常后,咱们意识到有许多的服务器现已被各种webshell、rootkits和暗码导出东西感染时。 需求快速的...

Zabbix运用Pycurl模块监控web页面状况

因为网络的问题,zabbix自带web模块用不了,后台研制2b,老是更新正式环境安装包,导致一向出问题,老是给他们擦屁股,早说过这事,他们不合作,现在出问题了,挺爽j_0025.gif,这锅我表明不背...

SCP指令注入

我最近正在研讨Java文件传输,碰到了一些风趣的问题。这些问题是我在看到一篇博客中的几个示例代码中发现的。这篇文章描述了用Java履行SCP指令的体系,运用的是盛行的JSch库。当我通读整个代码之后,...

黑客接单网:端口映射该怎么做,看完这些内容,原来端口映射如此简单

黑客接单网:端口映射该怎么做,看完这些内容,原来端口映射如此简单

端口映射是什么? 端口映射就是将外网的IP地址上的端口映射到内网中一台机器,当访问这个外网ip的端口,就会将用户的央求映射到指定机器中,不理解看下面就懂了。 远控端口映射原理 不少人学员初学远控的时...