本帖最后由 66球 于 2015-7-16 14:42 编辑 原始的简单验证码识别法
本文由按键学院提供技术支持
按键学院交流①群(1群已满):376122403
按键学院交流②群(2群):372671254
按键学院交流③群(3群):170084238
上一篇院刊我们已经介绍了几种常见的验证码形式,相信大家对验证码都有了一定的了解,这期我们就去了解下一些简单验证码的识别的思路和流程,在破解验证码中需要用到的知识一般是 像素、线、面等基本2维图形元素的处理和色差分析,这方面小编也是刚刚接触,所以今天就重点介绍下在不使用第三方插件的情况下最原始的依靠像素识别数字、字母的方法——点阵识别法 |
[tr=rgb(154, 205, 50)]什么是点阵? |
简单的说,点阵就是一幅位图。一般默认都指单色位图,即它是用一个bit(位)表示一个点(像素),在二进制数系统中,每个0或1就是一个位(bit),位是内存的最小单位,点阵就是指在显示屏上一个字或图像的宽或高是由多少个像素点组成,比如拿围棋盘来比做点阵,你在围棋盘上的横竖8个格子中用棋子摆出的字或图形就是就是8*8点阵的了知道点阵分布后我们怎能去识别它呢,我们以数字为例[tr=rgb(154, 205, 50)]如何用点阵识别法识别数字?
|
- 您所在的用户组无法下载或查看附件
首先,要识别一个数字,我们先截取这个数字的图像,截取的范围最好按照数字的边缘截取,截取过大的话做点阵麻烦,这里要注意下我们在验证码识别中最常用的是24位的BMP格式的图片,因为BMP是一种不压缩的图片格式,所以截图的话BMP格式最为清楚。如果用JPG,图片被压的可能和原版都不一样了,就更别提识别了,截取相应的数字图后我们把它弄到按键抓抓图像处理处,放大并显示网格显示如图- 您所在的用户组无法下载或查看附件
从图上不难看出这里的每个数字(除1外)都是由横5、竖8,及5行8列共40个像素组成的,我们把白色部分都当做是0,黑色部分,也就是构成数字的主体部分,当做是1,按照从左到右顺序从左边第一个格子开始排列:
0就可以看成0111010001100011000110001100011000101110
1就可以看成0010001100001000010000100001000010001110
依此类推,然后我们套用相应的代码- '赋值下十个特征码,开头代码执行一次就可以了
- NO0="0111010001100011000110001100011000101110"
- NO1="0010001100001000010000100001000010001110"
- NO2="0111010001100010001000100010001000011111"
- NO3="0111010001000010011000001000011000101110"
- NO4="0001000110010100101010010011110001000011"
- NO5="1111110000100001111000001000011000101110"
- NO6="0111010010100001111010001100011000101110"
- NO7="1111110010000100010000100001000010000100"
- NO8="0111010001100010111010001100011000101110"
- NO9="0111010001100011000101111000010100101110"
- MsgBox GetShu(283, 258, 6, 4, "000000")
- '以下是写好的函数模块,写好基本就不用修改了,需要的时候调用执行即可
- Function GetShu(x, y, z, n, col)'传入要识别的数字前台左上角坐标xy,俩数间间距z,数量n,字体颜色col
- GetShu = ""
- Dim code, temp_x, i_x, i_y, num
- For temp_x = 0 To n - 1
- code = ""
- For i_y = 0 To 7
- For i_x = 0 To 4
- If GetPixelColor(x + i_x + temp_x * z, y + i_y) = col Then
- code = code & "1"
- Else
- code = code & "0"
- End If
- Next
- Next
- If code = NO0 Then
- num="0"
- ElseIf code = NO1 Then
- num="1"
- ElseIf code = NO2 Then
- num="2"
- ElseIf code = NO3 Then
- num="3"
- ElseIf code = NO4 Then
- num="4"
- ElseIf code = NO5 Then
- num="5"
- ElseIf code = NO6 Then
- num="6"
- ElseIf code = NO7 Then
- num="7"
- ElseIf code = NO8 Then
- num="8"
- ElseIf code = NO9 Then
- num = "9"
- Else
- num = "?"
- End If
- GetShu = GetShu & num
- Next
- End Function
复制代码可能有点童鞋看不懂,可以看下视频演示地址,就容易理解了(虽然不完整):
http://www.aipai.com/c8/ODY9JSklI2gnaiMv.html[tr=rgb(154, 205, 50)]点阵法的局限性
|
其实点阵法并不是很好用,但是它又比较基础,很多解决验证码的图像处理和方法都跟它沾边,所以今天主要是想让不懂点阵法的童鞋知道下思路,有相应的拓展空间它的局限性:
1.缺点很明显,必须是字体清晰,字与字间距一致的才可正常识别
2.字体不同,粗细不同,点阵特征都不一样,没有哪个点阵特征码是可以通用的。
3.识别数字或字母的方法和思路有很多,并不是单一的点阵(一点一点的)识别,,每种识别方法都各有利弊。点此查看简单验证码自动识别教学视频相关联院刊【院刊】-【201507期】千奇百怪的验证码【院刊】-【201504期】妹子“卖身”为哪般?验证码真的这么难识别?院刊总目录showtopic.aspx?topicid=549014&forumpage=1&page=1
谢谢大家阅读,记得给小编送支花花 ! 顺手点个赞
[tr=rgb(143, 188, 143)] | 按键精灵实战班开始报名啦! | 腾讯课堂视频课程 |
1、时间:7月1日——7月25日接受报名 2、时长:每周二、周四、周六 3、地点:实战班 4、项目准备:安装按键精灵2014,安装镇魔曲、按键精灵会员卡(报名会提供3个月)。 5、关于项目课程的安排:周一至周天白天可自行学习与实践,学院会提供为学员准备助教与老师进行解答,周二、周四、周六晚上8点开始授课,请各位学员到场学习。 6、学费费用:512(人民币) 7、本次实战课程全国招募66人,名额有限。
| 【招生对象】:零基础用户,快速学会按键精灵安卓版 【招生人数】:70人 【报名时间】:3/18——4/6 【学费】:128RMB 【学习日期】:1个月(2015.4.6-2015.4.27) 【上课时间】:周1、周3、周5 19:30--21:30 【上课导师】:梦幻小飞侠 【实战游戏】:[天天富翁]、[三国之刃]、[梦幻西游]、[天 龙 八 部] |
点我进入按键学院报名啦招生细节进群咨询招生办主任
|