0x00 前言
前段时间由于经常碰上验证码爆破问题,便和一个朋友就此交换了意见,都认为可以使用google的开源项目
tesseract-ocr
来实现。本着造轮子的精神,他无中生有,用python开发了一整个爆破平台(开发完毕要开源)。我人穷志短,就基于burpsuite
开发个插件敷衍了事。
0x01 安装 tesseract-ocr
限于实验经验有限,这里只说
ubuntu
和windows
两种安装方法。
ubuntu
: 参照链接进行安装。
windows
: 下载 jTessBoxEditor,解压后添加目录下的tesseract-ocr
路径到环境变量就可以愉快的玩耍了。
0x02 开发
程序实现的原理比较简单
1. 注册
burpsuite
插件接口,实现BurpExtender
类,关键代码如下,具体用法参见burpsuite api
public class BurpExtender implements IBurpExtender, ITab, IIntruderPayloadGeneratorFactory{
// 注册burpsuite插件回调接口
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks){
// TO DO
// 在这里调用界面初始化函数,并完成主要的代码功能。
// 程序逻辑为
// 1. 使用脚本对图片进行简单处理
// 2. 运行程序调用命令行的 tesseract 将图片转为字符串
}
public String getTabCaption() {
return "CheckCode";
}
public Component getUiComponent() {
return jTabPanelMain;
}
public String getGeneratorName() {
return "CheckCode";
}
public IIntruderPayloadGenerator createNewInstance(IIntruderAttack attack) {
return new IntruderPayloadGenerator(attack);
}
}
2.实现
IntruderPayloadGenerator
类,在类中处理burpsuite
的爆破参数
public class IntruderPayloadGenerator implements IIntruderPayloadGenerator{
public IntruderPayloadGenerator(IIntruderAttack attack){
}
// 返回是否还有 payload ,由 burpsuite 调用
public boolean hasMorePayloads() {
return true;
}
// 返回下一个 payload ,由 burpsuite 调用
public byte[] getNextPayload(byte[] baseValue) {
return baseValue;
}
// 重置 payload ,由 burpsuite 调用
public void reset() {
}
}
3.界面设计
由于
java
开发界面比较麻烦,因此安装了eclipse
插件WindowBulider Editor插件,接下来就是简单的画王八了,没有什么难度。一个小Tips:在BurpExtender
类中加上main
函数,在其中调用gui初始化函数,可以直接进行插件测试,避免繁琐的重新加载,同时方便debug。完成后就是下图这种鬼样子
还有这样
以及这样
0x03 测试
1.输入验证码
url
直接测试,结果不太好,4个错了1个。
2.点选黑白灰度和二值化,将图片先转为灰度图,再进行二值化处理,效果好了一些,
4
认识了。
3. Tesseract 选项用来输入tesseract程序的参数,比如用
-psm 7 digits
来限定识别结果在tessdata/configs/digits
当中。自己训练语言后,也使用这个参数来选择语言,如-psm 7 -l test
。
0x04 训练
遇上识别难度更大一些的,只能自己训练语言来识别。由于验证码各家各样,又有各种干扰线,统一识别无法实现,加之
Tesseract
官方提供的语言训练方法惨无人道,故此实现了一套较为简易的方案。
首先介绍一下官方的训练方法,网上已经有许多实现,如
Tesseract-OCR 字符识别—样本训练
tesseract_ocr 字符识别基础及训练字库、合并字库在进行测试的时候发现只要把多张tif合并成为一张图片,
tesseract
就无法正常将之转为box
文件。我的内心是崩溃的,如图
最后不得已只好将取出的多张验证码合并成一张进行训练,无奈之举。
1.点击
Add Train
将处理后的图片添加到训练集中2.然后按
Step1:Create BoxFile
创建box
文件
3.对
TIF
图片中的每个字符进行调整。
4.回到
CheckCode
版面,按下Step2:Train
,然后将burpsuite目录下的test.traineddata
文件拷贝到tesseract-ocr\tessdata
目录下。5.重新进行测试,勾选
Tesseract
,输入命令-psm 7 -l test
,效果如图
0x05 演示
这是
CSDN
的验证码