突破百度贴吧的验证码限制
细致:本文章05年12期黑防已发 细致版权
百度,作为国内搜索引擎的大户,为了进一步扩展本身的用户群,专门开设了“百度贴吧”(2003年11月百度贴吧 (http://post.baidu.com)自从降生以来逐渐成为天下最大的中文交换平台!当用户在百度搜索引擎中搜索出需要搜索的要害字,点击“贴吧”即可进入以要害字为专题的相应贴吧)的服务。操作简单而又针对性,这是贴吧火极临时的紧张原因,可正由于云云,百度贴吧的安全性又怎么样呢?这便是我们本日探究的话题!
相信各人都有在论坛灌水的经历吧?但是如果你一连发表同一内容的工具在论坛中,不久论坛的整个板块就满是你发表的信息了,其他信息全被挤在了背面。假定你发表的信息够多,版主都删不完时,那么这个论坛根本就报废了!其他的贸易论坛也意识到了防止歹意灌水的紧张性,纷繁使用了一些防止歹意灌水的措施,有发贴间隔工夫的限制、同一IP地址的发贴数限制、内容不克不及重复等,但是这些都不是本日的重点,由于百度使用的是一个公用发贴表单,允许匿名发帖,需要突破独一的难点是验证码。(为了防止某个黑客对某一个特定注册用户用特定步伐暴力破解方式举行不停的登岸实验或是防止不停提交某网络信息而采用的一种网络通行方式。随机生成字符信息放入图片中,防止计算机直接识别。好比招商银行的网上小我私家银行,腾讯的QQ社区等等)
这时验证码在整个体系中就扮演明晰一个至关紧张的脚色。如果我们能突破它,写一个自动发布的步伐,那么我们来算一算:假定每两秒步伐post一次,一分钟便是30次、 一小时就有30×60=1800次、 一天就有1800×24=43200次!如果我们把发贴步伐或是暗码穷举步伐挂在许多肉鸡上,举行同时工作,那么结果可想而知!笔者曾亲眼见过国内某著名安全论坛便是验证码被人破解,导致被人歹意灌水,最后完全崩溃!当然另有某网络银行也因此类原因导致用户暗码被盗等浩繁变乱。笔者也作如下声明:下文介绍的要领并不是有意针某公司或是某机构,只是作为技能交换,如果部分读者使用本文介绍的要领举行粉碎或是穷举别人暗码,这曾经违法了法律,那么责任由他本身承担,与笔者有关!
好了,我们可以进入正题了(以下呈现的代码为delphi写的部分源码,为了防止恣意使用,我以介绍要领为主,如果读者感兴味,可以本身组合编写完备,在本文附带的步伐中,笔者提供了一个验证码参数确定步伐(附源码))。验证码分为如下几类:数字型、字符型、符号型、综合型。
我们看了看百度贴吧的验证码如图: 是属于数字型的!不过其图片中生成了不少黑色和黑白的乐音点(指验证图片上的雀斑)。那么我们应该怎么去识别呢?传统的验证码识别方式很简单,由于数字的位置是牢固的,以是我们只需要提取每一幅数字的图片(没有乐音点的)然后把每一个特殊数字独占的象素位置记载下来,然后在网络上提取需要破解的特性码,消灭乐音点,对其位置和记载位置举行比对,那便是么就能确定相应的数字了。
总结一下传统的便是:
1.先分析验证码,前景颜色是否不定
2.然后把验证码的宽度/验证码文字个数,好比一验证码下载后宽度为60,有4个数字,那么就60/4=15,然后保存每个字,如果只要数字保存0-9数字到位图文件,如果英文那更麻烦点,0-9,A-Z都要保存到位图,位图的前景色都不变,连结一种颜色,背景随便你改不改
3.如果前景要变则将文字同一为同种颜色,每个数字0-9的点阵都有个大众点,取该大众点颜色然后把前景全部同一成一种颜色,好比白色{255,255,255},位图的布局是BGR,而不是RGB
4.然落伍行比力,如果验证码的一点为白色,第2步保存的位图同一点也是白色,那么频率增加1
5.最后频率最高的便是验证码了!
可是这种传统的识别要领却遇到了挑衅!如果图片数字的位置也是随机呈现,大小也是随机呈现,那么这种识别要领也就生效了,百度贴吧的便是如许的验证码。
笔者这里向各人引入一个专有名词:“hough变换”大概学习计算机图像学的朋侪知道,笔者还是简要介绍一下:
直线hough变换:直线Hough变换使用图像空间和Hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里举行简单的累加统计,然后在Hough参数空间寻找累加器峰值的要领检测直线。例如,图1(a)中的九条线段对应于如图1(b)所示的其Hough参数空间的九个累加器峰值。图1(b)中,Hough参数空间的横纵坐标分别为直线极坐标方程:ρ=x×cos(θ) + y×sin(θ) 的两个参数ρ和θ。九个峰值的ρ和θ值独一的确定其对应线段所在直线的两个参数。而且线段的长度决定坐标(ρ,θ)处的累加值的大小。
1(a)
1(b)
没有明白的读者可以多读两遍(数学啊数学!),还是比力好理解。实在讲通俗一点,便是我们只需使用这个方程ρ=x×cos(θ) + y×sin(θ)统计出ρ呈现的次数,就可以确定一条直线,好比说图片中我们计算出了某个方向(θ的大小)的ρ呈现次数的最大值,那么这便是这个方向最长的直线了!
好了,知道了hough变换检测直线的原理,那么我们就来写段代码
var
p: PByteArray;
Gray, x, y,i1,i2: Integer;
Bmp: TBitmap;
begin
listbox1.Clear;
listbox2.Clear;
Bmp := TBitmap.Create;
Bmp.Assign(Image2.Picture.Bitmap);
//设置为24位真黑色
Bmp.PixelFormat := pf24Bit;
randomize;
for y := 0 to Bmp.Height - 1 do
begin
p := Bmp.scanline[y];
for x := 0 to Bmp.Width - 1 do
begin
//一个象素点三个字节
Gray := Round(p[x * 3 + 2] * 0.3 + p[x * 3 + 1] * 0.59 + p[x
* 3] * 0.11);
if gray > 128 then //全局阀值128
begin
end
else
begin
i1:=x;//表示检测的θ为0度
i2:=y; //表示检测的θ为90度
ListBox1.Items.Add(inttostr(i1));//用于日后算呈现的次数,当然也可以用数组!
ListBox2.Items.Add(inttostr(i2));
end;
end;
end;
Image2.Picture.Bitmap.Assign(Bmp);
Bmp.Free;
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|