浏览 7701 次
精华帖 (0) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-09
工具:imagemagick + tesseract-ocr
Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊。 准备工作: 1.安装tesseract-ocr sudo apt-get install tesseract 2.安装imagemagick sudo apt-get install imagemagick 3.安装rmagick sudo apt-get remove --purge librmagick-ruby-doc librmagick-ruby1.8 sudo apt-get install libmagick9-dev ruby1.8-dev sudo gem install rmagick 先试一个简单的: require 'rubygems' require 'rtesseract' img = RTesseract.new("tmp/test.jpg") img.to_s.sub(/\s+$/, "") # => "3R8Z" 很成功,但这个太简单了。一般破解复杂点的验证码处理步骤是先用imagemagick灰度化,灰度反转,提高对比度,二值化等。然后再用ocr去识别。ocr识别黑白图片效果比较好些。 这个是人民网的验证码: img = MiniMagick::Image.new("tmp/people.jpg") img.colorspace("GRAY")#灰度化 image = RTesseract.new(img.path) image.to_s.sub(/\s+$/, "") # => "254369" 这个还是简单,再复杂一点的,这个是4399.com的验证码: 有黑色边框,有背景色,文字稍微扭曲。
img = MiniMagick::Image.new("tmp/4399.jpg") img.crop("#{img[:width] - 2}x#{img[:height] - 2}+1+1") #去掉边框(上下左右各1像素) img.colorspace("GRAY") #灰度化 img.monochrome #二值化 image = RTesseract.new(img.path) #ocr识别 image.to_s.sub(/\s+$/, "") #=> "5692"
像上面这样简单的识别率几乎能达到80%以上,扭曲太严重的识别率就很低了。有轻微噪点的就得自己写去噪算法了。。
还有一些验证码看起来很变态但是是纸老虎。像当当的。刷新了几次发现结果在1-20之间,选中一个数暴力破解每次也有1/20正确的概率。 还有139的:。答案就12种1-4A-Da-d。而且不区分大小写。选中一个字母每次有1/6的概率命中。
ps:研究破解验证码不是为了搞破坏。请勿跨省追捕。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-04-30
皮皮书屋的这种,怎么处理.......
#include <stdio.h> int n[]={0x48, 0x65,0x6C,0x6C, 0x6F,0x2C,0x20, 0x77,0x6F,0x72, 0x6C,0x64,0x21, 0x0A,0x00},*m=n; main(n){ if(putchar (*m)!='\0') main(m++); } |
|
返回顶楼 | |
发表时间:2011-04-30
fireflyman 写道 皮皮书屋的这种,怎么处理.......
#include <stdio.h> int n[]={0x48, 0x65,0x6C,0x6C, 0x6F,0x2C,0x20, 0x77,0x6F,0x72, 0x6C,0x64,0x21, 0x0A,0x00},*m=n; main(n){ if(putchar (*m)!='\0') main(m++); } 这个就更简单了啊。 1.把抓取这段代码,保存到xx.c 2.编译:gcc xx.c 3.用ruby调用编译后的文件得到结果。 |
|
返回顶楼 | |
发表时间:2011-10-09
弱弱的问一句:按照以上步骤就能跑吗?
|
|
返回顶楼 | |