【RF】验证码的分析与识别[1]
本人在科创发表的最后一系列文章

自从网络被应用,验证码也应运而生。验证码一般是由字母+数字+随机干扰组成的一幅图片。
人们在WEB或其他地方执行一些如注册、发表文章等操作时,往往要输入验证码,这是为了防止恶意行为。

本文章仅探讨验证码的识别作学习用途

前景与背景的分离方法

58_1_1264512711.png

这是一幅验证码,我们可以观察到,背景十分杂乱,而且有干扰线。
这是为了防止程序去识别它,但是 “凭着RF工作室的智慧” 可以说是轻而易举的

我们还可以观察到,背景与前景的颜色深度不一样——对,这就是关键。
这也就是说,背景的RGB值加起来肯定比前景的要小,这就好办了,我们先创建一个函数

Public Function ColorRGB(ByVal Color As Long) As Long
If Color = -1 Then ColorRGB = 999: Exit Function
Const ByN As Integer = 256
Const ByN2 As Long = 65536
Dim A(2) As Byte
A(0) = (Color Mod ByN)
A(1) = ((Color Mod ByN2) \ ByN)
A(2) = (Color \ ByN2)

ColorRGB = (Color Mod ByN) + ((Color Mod ByN2) \ ByN) + (Color \ ByN2)
End Function

好,我们看到,输入的是VB的颜色值,输出则是该颜色值RGB的总和。

然后我们可以调用这个函数

XXXXXXXXXXXs
XXXXXXXXXXXs
Dim l As Long
For i = 1 To 140 * 15 Step 15
    For j = 1 To 50 * 15 Step 15
    If ColorRGB(Picture1.Point(i, j)) < 560 Then
        l = l + 15
        XXXXXXXXXXXet (i, Picture2.Height - l)
        XXXXXXXXXXXet (i, j)
    End If
    Next
    l = 0
Next

我们看到,这个过程中有两个for循环,不断扫描图片,如果RGB值的总和小于560(180x3)就判断为前景。

这样,前景就被完美地分离出来了。

58_1_1139671021.png

前景与背景分离到此结束

干扰线的去除

但是,问题又来了。我们看到验证码中有随机的线段,这回严重影响验证码的识别工作
我们当然有办法应对。

注意观察两幅图片(线段的局部放大)

58_1_1302318119.png    58_1_1019096673.png

看到了吗?这是单像素的,我们也可以简单地解决掉。

我们再创建一个函数

Public Function ClearLine(ByVal iX As Long, ByVal iY As Long, picInput As PictureBox) As Boolean

Const W_VALUE As Long = 16777215

Dim tmp1, tmp2, tmp3, tmp4 As Long
Dim tmp As Long

If picInput.Point(iX, iY) = W_VALUE Then
    ClearLine = False
    Exit Function
End If

tmp1 = picInput.Point(iX + 15, iY)
tmp2 = picInput.Point(iX - 15, iY)
tmp3 = picInput.Point(iX, iY + 15)
tmp4 = picInput.Point(iX, iY - 15)

If tmp1 = W_VALUE Then tmp = tmp + 1
If tmp2 = W_VALUE Then tmp = tmp + 1
If tmp3 = W_VALUE Then tmp = tmp + 1
If tmp4 = W_VALUE Then tmp = tmp + 1

If tmp > 2 Then
    ClearLine = True
End If

If tmp3 = W_VALUE And tmp4 = W_VALUE Then
    ClearLine = True
End If

End Function

这段代码的作用是,扫描一个像素的上下左右,如果有3个点是白色的,就判断为线段的一部分。

然后我们调用它

Dim i, j As Long

For i = 1 To 140 * 15 Step 15
    For j = 1 To 50 * 15 Step 15

    If ClearLine(i, j, Picture3) Then
        XXXXXXXXXXXet (i, j), 16777215
    End If
    
    Next
Next


如图
58_1_1190603827.png

这样,干扰线也被完美地去除了。

未完待续
+1000  科创币    delete   2009-02-11   
+1000  科创币    彼岸江山   2009-02-11    很好,谢老
+1000  科创币    chiataimakro   2009-02-11   
+1000  科创币    虎哥   2009-02-11    思路不错。
来自:计算机科学 / 软件综合
 
1
y2k
12年11个月前
1楼
頂,,.期待您破解一些極為NB極為XE的验证码 0076.jpg    0079.jpg    0081.jpg    0083.jpg    0089.jpg    0090.jpg
回复
评论(1)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年11个月前
2楼
有没有搞错,这是我发过的最正经的帖子啊
+1
科创币
彼岸江山
2009-02-12
ding
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
fw。
12年11个月前
3楼
顶 [s:251]
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
y2k
12年11个月前
4楼
引用第2楼93°于2009-02-12 18:56发表的  :
有没有搞错,这是我发过的最正经的帖子啊


93效應:
[glow=255,red,1]無論帖子內容是啥.都會給水掉....[/glow]
[s:94]
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
AnthraX
12年11个月前
5楼
思路不错……但是对于扭曲重合的字符就没办法了……
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年11个月前
6楼
楼上正确

正在转向delphi中。客户要求

58_3212_1114129532.png
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
AnthraX
12年11个月前
7楼
应该转向C++……虽然我对编程一知半解吧,但是高手们都说c++很nb……

楼主应该继续解释一下是如何识别出斜着的字符的
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年11个月前
8楼
参见旋转卡壳算法,迟一些我再介绍。

delphi的兼容性无敌啊。。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
AnthraX
12年11个月前
9楼
引用第8楼93°于2009-02-12 22:26发表的  :
参见旋转卡壳算法,迟一些我再介绍。

delphi的兼容性无敌啊。。


没看出来该算法和矫正斜的文字有什么关联……
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
12年11个月前
10楼
表示支持……93继续……对代码的解释写的详细一点,对一些数学不好的同学有理解帮助
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
fw。
12年11个月前
11楼
93°来把剩下的发完
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年11个月前
12楼
唉唉 。。都没啥人看
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
greatallah
12年11个月前
13楼
矛与盾的故事之现实生活版...
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
12年11个月前
14楼
最nb最xe的当然是微软的验证码了,是一段语音!

93为什么说这是他在科创发表的最后一系列文章?
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
12年11个月前
15楼
引用第14楼warmonkey于09-02-14 19:49发表的  :
最nb最xe的当然是微软的验证码了,是一段语音!

93为什么说这是他在科创发表的最后一系列文章?

他只是这样说,没说是真的
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
wbliu316
12年10个月前
16楼
小弟的编程能力比较弱,能告诉我这是用什么编写的吗?编译器和语言。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
12年10个月前
17楼
有的验证码很BT,用的是GIF的或者是Flash的,会动……
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
12年10个月前
18楼
回16楼:看到……As Long就该知道这是Visual Basic啦。
估计用Visual XXXXXXXXXt  05或08写的。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年10个月前
19楼
LS错误
在.NET里是没有point函数的,.NET里的point是一个类型,不会连这都不知道吧
.NET里用getpixel()
而delphi里用pixels[];
C/CPP我更偏向于直接读取BMP文件,因为BMP的结构直接就是RGB

PS 这个项目400块钱到手
+80
科创币
delete
2009-04-05
干什么
-80
科创币
chiataimakro
2009-04-05
个人所得税
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
12年10个月前
20楼
大家看到了吧。祖国的未来赚到了400块大洋。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年10个月前
21楼
日飞破chia,pia!,您又不是ZF收个毛税啊……那天中午M记还是我用着400块请您吃的呢
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
12年10个月前
22楼
要知道你开发出的东西有巨大危害……
都出现Dim……
AS……了,还不是VB?
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
12年10个月前
23楼
400,不错。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年10个月前
24楼
我啥时候说过不是VB,VB跟XXXXXT不是一种东西
VB的代码不能直接放到XXXXXT上运行
XXXXXT完全面向对象,所以不能像VB那样随便写
我用的是VB98开发的

PS:收钱的时候给的是delphi写的DLL
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
12年10个月前
25楼
真会吃,400一顿M记?
吃了多少啊?
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年10个月前
26楼
我啥时候说过那400块钱全部用来吃MCD了?
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年10个月前
27楼
引用第22楼phpskycn于2009-04-05 12:05发表的  :
要知道你开发出的东西有巨大危害……
都出现Dim……
AS……了,还不是VB?

是的,用小括号代替大括号的编译器危害更大
回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
12年10个月前
28楼
这个东西危害可以用巨大来形容,但对Discuz的新验证码已经起不了作用了,不信您试试?
了解了BOT是怎么对付验证码了,下次学好PHP的GD,争取写个验证码能赚400。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年10个月前
29楼
看来您连图形的基本算法都不懂吧
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
12年10个月前
30楼
的确,每次看到这个我都认没用又不会考,就忽略了。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
12年10个月前
31楼
引用第30楼phpskycn于09-04-05 12:20发表的  :
的确,每次看到这个我都认没用又不会考,就忽略了。

这跟我们的物理老师讲课一个味儿
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
12年10个月前
32楼
引用第21楼93°于09-04-05 12:04发表的  :
日飞破chia,pia!,您又不是ZF收个毛税啊……那天中午M记还是我用着400块请您吃的呢

stop talking
start doing

both joking...
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
93°作者
12年10个月前
33楼
引用第30楼phpskycn于2009-04-05 12:20发表的  :
的确,每次看到这个我都认没用又不会考,就忽略了。

为什么而学习?这是算法问题,经典算法存在就有它的价值
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
12年10个月前
34楼
没错。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
jrcsh
12年10个月前
35楼
~~~  能识别~~~~中文不~~~~~ 呵呵



  比如 QQ网站上的


作这个  验证码 识别的  按见精灵 也有很多的脚本可以 学习一下  呵呵  


另  WEB  QQ开通了

XXXXXXXXXXXXXXXX/webqq/
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
93°
学者 笔友
文章
651
回复
6032
学术分
30
2007/04/10注册,4 年前活动
暂无简介
%7B%22isDisplay%22%3Atrue%7D
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也