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

访客5年前黑客资讯1175

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

相关文章

SP eric靶机通关攻略-黑客接单平台

咱们好,今日给咱们带来的靶机是SP eric,这个靶机有两个flag,咱们的方针便是把它们都找出来,flag的方位现已供给,如下: · /root/flag.txt · /root/eric/flag...

ASP.NET网站管理工具装备办法

注意事项, 你登录到期2003时的用户名,及其相关权限,添加到 sql server C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/CONFIG/mach...

探究根据.NET下完成一句话木马之Asmx篇

0×01 前语 上篇介绍了一般处理程序(ashx)的作业原理以及完成一句话木马的进程,今日接着介绍Web Service程序(asmx)下的作业原理和怎么完成一句话木马,当然介绍之前笔者找到了一款as...

用于浸透测验WordPress的Ruby结构:WordPress Exploit Framework

这个Ruby结构包括一些能够浸透测验WordPress网站和体系的模块,用户也能够自己开发模块扩展其功用。 运转它需求什么条件? 保证体系上装置了Ruby 2.2.x,翻开一个指令行窗口,切换当时目录...

Django 开发中你不可不知的 7 个 Web 安全头-黑客接单平台

Web 是一个不断发展的渠道,有许多向后兼容的问题。 新的 web 安全实践一般来自于对存在缺点的旧功用的知道。 与其经过改动这些功用来损坏旧网站,还不如挑选参加一些更安全的设置。 你能够经过设置 H...

flare-emu的分析功能被进一步拓展-黑客接单平台

IDAPython 库 flare-emu团队新开发的一个库,这个库是依赖于 IDA Pro 和 Unicorn 模仿结构,并为让逆向工程师可以经过脚本对代码的功用进行模仿,Unicorn 支撑 x8...