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

访客5年前黑客资讯1221

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

相关文章

用零宽度字符水印揭穿泄密者身份

零宽度字符是躲藏不显现的,也是不行打印的,也便是说这种字符用大多数程序或编辑器是看不到的。最常见的是零宽度空格,它是Unicode字符空格,就像假如在两个字母间加一个零宽度空格,该空格是不行见的,表面...

TA505在最新攻击活动中使用HTML, RAT和其他技术-黑客接单平台

TA505以运用歹意垃圾邮件和不同的歹意软件来进犯金融安排和零售企业而臭名远扬。研究人员在曩昔2个月检测到与TA505相关的进犯活动。在该安排的最近活动中,运用了HTML附件来传达歹意XLS文件,XL...

【对立蠕虫】怎么维护网页里的按钮,不被 XSS 主动点击

前语 XSS 主动点按钮有什么损害? 在交际网络里,大多操作都是经过点击按钮建议的。例如宣布留言,假设留言体系有 BUG,那么 XSS 就能主动点击发送按钮,发布带有恶意代码的留言。老友看了中招后,又...

揭秘使用Confluence未授权RCE漏洞在6小时内黑掉50+公司-黑客接单平台

长话短说,其实早在2019年我就创建了我的Hackerone/Bugcrowd profiles,但我从未在那里陈述过任何的缝隙。这是第一个让我觉得值得陈述的缝隙,也打破了我多年来零陈述的记载。 安全...

减少Rust开发的闭源项目中的调试信息-黑客接单平台

Rust是一门体系编程言语,专心于安全,尤其是并发安全,支撑函数式和指令式以及泛型等编程范式的多范式言语。Rust在语法上和C++类似,可是设计者想要在确保功用的一起供给更好的内存安全。 由于Rust...

PHP中该怎样避免SQL注入?

问题描述: 假如用户输入的数据在未经处理的情况下刺进到一条SQL查询句子,那么运用将很可能遭受到SQL注入进犯,正如下面的比如: $unsafe_variable = $_POST['user_in...