「学与练」通过破解www.iboling.com网站flash验证码(点击小球验证)来反思如何改进

Conmajia 2012-06-10 12:57:03
加精
这两天看大家讨论验证码识别挺开心的,我也来玩玩。

由于破解可能给他人带来困扰,所以我只说大概的思路,不会提供源码。

-----------------

本次目标是www.iboling.com的flash验证码。
这个网站很新颖,用的是flash动画,随机给出大小球,然后让用户用鼠标点击相应的球,实现验证码输入。像这样



本来这是个很不错的思路,跳出了「干扰线」「扭曲字」等验证码的思维定势。但方式新颖并不代表能高枕无忧。

因为复杂度不够,所以反而容易破解。

有几个缺点:

1.颜色单一(很好识别)

2.下方候选球滚动缓慢(足够程序识别完再点击)

3.鼠标悬停(哪怕机器慢,只要控制鼠标悬停,就可以让候选球停止滚动)

4.不能加快速度或取消悬停(因为这样「人」就没法选了)

破解思路:

1.找到网页中验证码位置和大小(很容易)

2.截图采样(验证码图片和候选球图片)

3.分别从图像中提取全部色块及其对应的Rectangle(大约25x25),存入big和small

4.遍历对比候选球和验证码,颜色近似则可认为匹配

5.根据候选球的Rectangle,加上第2步里截图的offset,计算候选球在屏幕上的绝对位置

6.编程或用按键精灵在候选球上click一下

7.每次处理一个球,然后等等,给flash一个反应时间。

下面是破解样本(数字不准,因为有废弃识别被程序过滤掉了)









关于速度

速度的问题大家会很关心,但我可以说速度不是问题。

首先,因为候选区是鼠标悬停的。所以哪怕我机器再烂再慢,我可以先悬停,让它停止滚动,然后再慢慢「一百遍一百遍」

其次,就算一直滚动,但因为要让人点击,所以不可能滚动太快。在我的i3机器上,没有优化的识别速度大约10fps,优化过后识别率提升到40~50fps,远远超过人的反应速度。也就说这个验证码只要人能点,机器就可以点。

改进意见

1.使用带图案,带纹理的小球

2.随机改变小球形状

3.验证码和候选球不需要完全一样,只需要人能看懂「相似」就行(比如验证码是数字「贰」,候选球是阿拉伯「2」),这样机器基本不太可能识别

4.增加背景复杂度,比如图片背景


暂时想到这么多,欢迎各位朋友还有iboling.com的站长和我交流。

...全文
4312 82 打赏 收藏 转发到动态 举报
写回复
用AI写文章
82 条回复
切换为时间正序
请发表友善的回复…
发表回复
Conmajia 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 101 楼 的回复:]

破解一次 消耗多少时间呢
[/Quote]比之前还少。。省了3个大球,直接读颜色。。
远方夕阳 2012-07-04
  • 打赏
  • 举报
回复
破解一次 消耗多少时间呢
Conmajia 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 99 楼 的回复:]

验证策略已经更换了,呈请楼主再试试
[/Quote]
破了。。你的渐变色背景区域太好找了。。固定左中右采样就可以得到3个颜色了。。
远方夕阳 2012-07-03
  • 打赏
  • 举报
回复
验证策略已经更换了,呈请楼主再试试
Conmajia 2012-06-18
  • 打赏
  • 举报
回复
大家都很淡定,就你在激动。
SailorPub 2012-06-18
  • 打赏
  • 举报
回复
等着看球 在陪你们浪费点时间

首先不要跟我说什么重点是图像识别,要识别去搞点有用的例子 qq的验证码,google的验证码,整俩小色块的那还称不上图像识别 谢谢,图像领域向来是计算密集型,真要搞 去c/c++版块吧 什么.net c#安分的搞你们什么软件工程,敏捷开发去忽悠外包届人士吧 这话都点伤人是吧 请淡定

下面是回给引用我的几位
验证码是防止机器提交的,所以一个合格的验证码必须的要求是验证码不能出现在客户端中,不管是明文还是密文,但是同时又要做到能让人可以识别出来,能有效做到这点的现在除了图片就是声音,没有第三种
本帖中的例子就是个纯粹白痴的行为
过程是:
html页面中出现验证码 存在js变量code中
flash获取js的code变量 生成小球界面, 用户点击后md5(code)一次,然后调用js方法,把结果写入文本域中
绕这么一圈就为了把原本就在html源码中的code变量md5一次 填进文本域中, 呵呵 还什么变化能力,只要把验证码发送到客户端,那么你的程序怎么转,怎么绕 我原样实现一次不就完了?native code各种加壳,各种混淆 都一样可以逆向,何况一个公开文件格式的flash swf文件?

csdn有高人吗? 有,而且很多,不过基数太大,更多的是基础都打不好的水货
别激动,我一般不发帖,偶尔无聊才打打脸

不要激动,
Conmajia 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用 93 楼 的回复:]

这个验证码很容易识别,几行代码而已
出奇的简单,为什么这个站长要做这个类型的验证码,思考ing
[/Quote]

这应该是prototype,这个的变化能力比图片验证码大得多了。
Conmajia 2012-06-16
  • 打赏
  • 举报
回复
[Quote=引用 86 楼 的回复:]
引用 9 楼 的回复:

这个www.iboling.com也是怪了,既然是flash开发的,又搞什么http post(访问 //matter/matter_doAddMatter.php?random=....)去提交数据呢?

它直接使用tcp提交不就得了嘛。又可以做到立刻本地刷新html页面,又可以避免扯上什么“验证码”这种只有简单的html/javascript编程才需要纠结的“……
[/Quote]

你照着9#来回复就浪费感情了。参考看我40#的评论。
  • 打赏
  • 举报
回复
这个验证码很容易识别,几行代码而已
出奇的简单,为什么这个站长要做这个类型的验证码,思考ing
jacharyin 2012-06-16
  • 打赏
  • 举报
回复
很厉害的!
落曦 2012-06-15
  • 打赏
  • 举报
回复
一群强大的人。在探讨人生哲理。我感觉完全看不懂。我算程序员么。。
cuangyi 2012-06-15
  • 打赏
  • 举报
回复
不懂,回了
lovebanyi 2012-06-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

这个www.iboling.com也是怪了,既然是flash开发的,又搞什么http post(访问 //matter/matter_doAddMatter.php?random=....)去提交数据呢?

它直接使用tcp提交不就得了嘛。又可以做到立刻本地刷新html页面,又可以避免扯上什么“验证码”这种只有简单的html/javascript编程才需要纠结的“技术”。

flash做……
[/Quote]
用tcp/ip 解决不了。
要关注验证码的核心点。是为了区别开人和机器。 tcp/ip这个只能是加大破解的难度。但是搞定一次话。因为框架基本不太会变。下次搞反而更快了。 象现在的好多游戏 QQ也采用验证码。为什么呢。 因为只有这样才可以区别得开来。、
LAONINGA098 2012-06-15
  • 打赏
  • 举报
回复
感谢楼主分享!
yrnaaa 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]

楼主不是学图像的,纹理和质地宽窄什么的根本没有用,我完全可以提取边缘图像,判断是圆还是椭圆还是直线或线类,然后确定点击对象,下面就和楼主的一样了。我的建议,球的大小一样,没有线之说,小球慢慢运动的,且颜色慢慢变好,需要点击的对象变化的相对不点击的快一点。只要运动就不好确定位置了,只要大小统一,边缘提取就没有用了,只要颜色都是变化的,运用色阶就没法判断了,人眼是有观察时间的,可以判断快慢,而计算机……
[/Quote]
这个也很厉害
比Boss多一口 2012-06-14
  • 打赏
  • 举报
回复
有没源码,发我一份 shewen521@126.com
crackdung 2012-06-14
  • 打赏
  • 举报
回复
flash 是非常簡單的
x_w_s 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 的回复:]
引用 46 楼 的回复:

我是另类,不想搞项目,不想挣钱。

思想别太老实。。「硬件」「软件」「人件」在「人脉」面前都是被秒的命。。
[/Quote]
看到这里,砰的一声发生了共鸣。
zb310310 2012-06-13
  • 打赏
  • 举报
回复
强大!
再来壹串 2012-06-13
  • 打赏
  • 举报
回复
楼主彪悍呀
加载更多回复(62)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧