验证码识别新姿势:用Python+ddddocr给captcha-killer插件配个免费OCR引擎
验证码识别技术实战:Python+ddddocr与captcha-killer的高效组合方案
验证码识别一直是安全测试中的痛点问题。传统商业OCR服务价格昂贵,而自研识别算法又需要大量训练数据。今天要介绍的这套组合方案,或许能成为预算有限的安全研究人员的福音——用Python轻量级OCR库ddddocr为captcha-killer插件提供本地化识别服务,既免去了API调用费用,又能获得不错的识别准确率。
这套方案特别适合以下场景:
- 企业内部安全测试需要批量验证码识别
- 个人学习研究不愿投入过多成本
- 需要快速搭建验证码识别服务原型
- 对识别准确率要求中等但预算有限的项目
1. 环境准备与工具安装
1.1 基础组件安装
首先需要确保系统中已安装Python环境(建议3.6-3.8版本)。过高的Python版本可能会导致兼容性问题,这也是许多初学者容易踩的坑。我曾在Python 3.10环境下遇到模块导入错误,降级到3.8后问题立即解决。
安装ddddocr推荐使用阿里云镜像加速:
pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com ddddocr aiohttp验证安装是否成功:
import ddddocr ocr = ddddocr.DdddOcr() print(ocr.classification(b'验证码图片字节流'))1.2 captcha-killer插件配置
从GitHub获取最新版captcha-killer-modified:
git clone https://github.com/f0ng/captcha-killer-modified cd captcha-killer-modified pip install -r requirements.txt启动识别服务:
python codereg.py正常启动后终端会显示服务监听端口(默认5000)。如果遇到空白页面,大概率是Python版本兼容问题,建议使用conda创建虚拟环境:
conda create -n captcha python=3.8 conda activate captcha2. 验证码识别服务调优
2.1 多类型验证码处理策略
ddddocr支持多种验证码类型识别,但需要根据实际情况选择合适模板:
| 验证码类型 | 推荐模板 | 准确率参考 |
|---|---|---|
| 纯数字 | digits | 98%+ |
| 字母+数字 | alphanumeric | 85%-92% |
| 简单算术题 | arithmetic | 90%+ |
| 扭曲文字 | distorted_text | 70%-80% |
在实际测试中,对于4-6位纯数字验证码,ddddocr的识别准确率甚至可以超过部分商业API。但对于严重扭曲或带干扰线的验证码,可能需要额外预处理。
2.2 性能优化技巧
通过以下参数调整可以提升识别效率:
ocr = ddddocr.DdddOcr( show_ad=False, # 关闭广告显示 use_gpu=False, # 无GPU时可关闭 charsets='alphanumeric' # 指定字符集 )注意:首次运行时会自动下载模型文件(约15MB),确保网络通畅
对于批量识别任务,建议复用OCR实例而非频繁创建:
# 正确做法 - 单实例复用 ocr = ddddocr.DdddOcr() results = [ocr.classification(img) for img in image_batch] # 错误做法 - 每次新建实例 results = [ddddocr.DdddOcr().classification(img) for img in image_batch]3. 与BurpSuite的深度集成
3.1 插件配置实战
在BurpSuite中配置captcha-killer的关键步骤:
- 安装插件后,进入"Captcha-killer"标签页
- 设置接口URL为
http://localhost:5000/ocr(默认端口) - 根据验证码类型选择匹配模板
- 测试连接确保服务正常
常见问题排查表:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 连接超时 | 服务未启动/防火墙阻挡 | 检查5000端口是否监听 |
| 返回空白结果 | 图片格式不支持 | 转换为JPG/PNG格式重试 |
| 识别率骤降 | 验证码类型与模板不匹配 | 切换模板或自定义字符集 |
| 服务崩溃 | 内存不足 | 限制并发请求数量 |
3.2 渗透测试中的实战应用
在爆破测试中,captcha-killer的典型工作流程:
- 拦截包含验证码的HTTP请求
- 右键验证码图片→"Send to Captcha-killer"
- 插件自动获取并识别验证码
- 将识别结果填入原始请求
高级技巧:结合Intruder模块时,建议使用"Pitchfork"攻击类型,为验证码和密码字段分别设置Payload:
- 密码字段:字典文件
- 验证码字段:captcha-killer扩展
这样组合既保证了攻击效率,又自动处理了验证码变更问题。在我的实际测试中,这种配置相比纯字典攻击成功率提升显著。
4. 进阶应用与替代方案
4.1 自定义模型训练
虽然ddddocr开箱即用,但对于特定样式的验证码,可以尝试微调模型:
- 收集1000+目标验证码样本
- 使用labelme等工具标注
- 修改模型参数重新训练
训练代码框架:
from ddddocr import DdddOcr ocr = DdddOcr( train=True, train_path='./train_data', test_path='./test_data', epochs=10 ) ocr.train() ocr.save('custom_model.onnx')4.2 备选技术方案对比
当ddddocr识别率不足时,可以考虑以下替代方案:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Tesseract OCR | 开源免费,支持多语言 | 对扭曲文本识别率低 | 清晰印刷体识别 |
| CNN自定义模型 | 识别率高,可针对性优化 | 需要大量标注数据 | 特定验证码破解 |
| 打码平台API | 省时省力,准确率高 | 按次收费,隐私风险 | 商业项目,临时需求 |
| 人工识别 | 100%准确 | 效率极低 | 最后手段 |
在最近的一次企业安全评估中,我们先用ddddocr处理了约70%的验证码,剩余难以识别的30%通过Tesseract二次识别,最终整体识别率达到85%以上,相比纯商业API方案节省了约90%的成本。
这套组合方案最大的优势在于平衡了成本与效率。虽然可能无法达到商业API的识别精度,但对于大多数安全测试场景已经足够。更重要的是,它让验证码识别不再是一个"黑盒子",安全人员可以完全掌控识别流程,根据实际需求灵活调整。
