原理:
获得若干验证码图片样本,按照显示每个数字的区域分割,取得数字图片的样本.
破解的时候作同样的分割,每个区域与数字图片的样本比较,确定每个区域是什么数字.
功能分析:
一般校验码具有的功能:
1、显示内容
显示内容一般是数字或者数字+字符,还有更变态的,显示的内容是随机汉字。
如何随机生成汉字,请看:
《用C#生成随机中文汉字验证码的基本原理》
http://wulei8899.cnblogs.com/archive/2005/06/29/183200.html
2、内容显示
内容显示这里,有很多做法,常见的有以下几种:
2.1 以一个不常被看到的字体显示内容,
2.2 字体随机倾斜显示
2.3 每个字随机显示不同颜色
2.4 内容随机显示在不同位置。
2.5 文字采用就渐变颜色,同一个字就有好几种颜色组成。
3、背景显示
常见背景显示方案:
3.1、使用干扰线来,后面随机显示数条干扰线,这些线的颜色跟字体的颜色类似
3.2、干扰点,后面随机显示数个干扰点,这些点的颜色跟字体的颜色类似
3.3、干扰色块,后面随机出现一个色块进行干扰
常见几种开源的校验码生成代码
效果图:
相关文章:ASP.net 验证码(C#)
http://blog.csdn.net/SW515/archive/2005/02/03/279364.aspx
我个人在这些开源校验码中,最喜欢这个,校验码不会复杂到用户识别不了,而程序判断又有相当的难度
相关文章:ASP 生成 彩色 可变长 验证码程序
http://www.codefans.com/ArticleView/Article_6728.html
Asp.Net 动态生成验证码
http://sleeping.cnblogs.com/archive/2005/12/19/299980.html
象 DEV-Club 那样的彩色校验码
http://www.blueidea.com/tech/program/2003/709.asp
C#的彩色验证码
http://www.codefans.com/ArticleView/Article_6745.html
VerifyCode(asp),gif验证码生成技术
http://www.codefans.com/ArticleView/Article_6735.html
region 实现一个验证码的类
http://www.innerv.com/blogview.asp?logID=509&cateID=5
如何在asp.net中动态生成验证码
http://www.dwww.cn/new/2005911154522249.html
256色BMP图片验证码识别脚本
http://www.51cto.com/html/2005/1101/10438.htm
QQ验证码识别源代码(C#/NET1.1)
http://www.intodigi.com/Net/Website/Program/NET/12082.html
附加站外提交参考
使用 .NET 的 HttpWebRequest 可轻松实现站外提交功能,
代码如下:
ASCIIEncoding encoding=new
ASCIIEncoding();
string
postData
=
"
TextBox1=33&Button1=Button
"
;
byte[] data =
encoding.GetBytes(postData);

// Prepare web request
HttpWebRequest myRequest =
(HttpWebRequest)WebRequest.Create(
"http://localhost/testform1.aspx"
);
myRequest.Method =
"
POST
"
;
myRequest.ContentType=
"
application/x-www-form-urlencoded
"
;
myRequest.ContentLength =
data.Length;
Stream newStream=
myRequest.GetRequestStream();
// Send the data.
newStream.Write(data,0
,data.Length);
newStream.Close();
解释:
postData 为你要提交的数据
比如 CSDN 的登录页面 http://www.csdn.net/member/UserLogin.aspx
输入用户名密码和校验码,并提交之后,浏览器便将下面的数据提交到服务器:
CSDNUserLogin%3Atb_UserName=yourName&CSDNUserLogin%3Atb_Password
=
yourPassword&CSDNUserLogin%3Atb_ExPwd
=
2332
其中的 yourName 为你实际登陆时提交的用户名, yourPassword 即为你的密码, 2332 是我刚才登陆时的验证码
这里介绍个工具: Visual Sniffer , google 一下便可轻松找到下载地址。
可以使用 Visual Sniffer 来捕捉提交的数据信息:
1. 访问你需要站外提交的页面,比如 CSDN 登陆页 http://www.csdn.net/member/UserLogin.aspx
2. 填写好需要的资料,比如用户名和密码,
3. 打开 Visual Sniffer, 点“开始拦截”
4. 在访问的页面中提交。
5. 等提交成功之后,在 Visual Sniffer 中“停止拦截”
6. 在 Visual Sniffer 的左侧栏的加号中依次点开,右边是它拦截到的内容,
找到 内容含有 POST http://www.csdn.net/member/UserLogin.aspx 的节点
以下是我拦截的内容供参考:
POST http://www.csdn.net/member/UserLogin.aspx HTTP/
1.0
Accept: image/gif
, image/x-xbitmap,
image/jpeg
,
image/pjpeg
,
application/vnd.ms-excel
,
application/vnd.ms-powerpoint
,
application/msword
,
application/x-shockwave-flash
,
*/*
Referer: http://www.csdn.net/member/UserLogin.aspx
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Pragma: no-cache
User-Agent: Mozilla/
4.0
(compatible
;
MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1)
Host: www.csdn.net
Content-Length: 355
Proxy-Connection: Keep-Alive
Cookie: ASPSESSIONIDAAAATBQC
=FMEGGCKDBKHAMMCGKPFDMBFG; ASP.NET_SessionId=lusprmnom05lr445tmteaf55; userid=699879
__EVENTTARGET
=&__EVENTARGUMENT=
&__VIEWSTATE
=
dDwtMTcwMzgxNjQ2Mjs7bDxDU0ROVXNlckxvZ2luOmNiX1NhdmVTdGF0ZTtDU0ROVXNlckxvZ2luOkltYWdlX0xvZ2luOz4%2Btu1q2wmRZoAJTi9L73w1zBleylY%3D&CSDNUserLogin%3Atb_UserName
=
testusername&CSDNUserLogin%3Atb_Password
=
testpassword&CSDNUserLogin%3Atb_ExPwd
=
9232
&from
=
&CSDNUserLogin%3AImage_Login.x
=
36
&CSDNUserLogin%3AImage_Login.y
=
6
GET http://www.csdn.net/mycustompage.htm?aspxerrorpath
=/member/UserLogin.aspx HTTP/1.0
Accept: image/gif
, image/x-xbitmap,
image/jpeg
,
image/pjpeg
,
application/vnd.ms-excel
,
application/vnd.ms-powerpoint
,
application/msword
,
application/x-shockwave-flash
,
*/*
Referer: http://www.csdn.net/member/UserLogin.aspx
Accept-Language: zh-cn
UA-CPU: x86
Pragma: no-cache
User-Agent: Mozilla/
4.0
(compatible
;
MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1)
Host: www.csdn.net
Proxy-Connection: Keep-Alive
Cookie: ASPSESSIONIDAAAATBQC
=
FMEGGCKDBKHAMMCGKPFDMBFG
;
ASP.NET_SessionId=lusprmnom05lr445tmteaf55; userid=699879
注意:PostData 参数之间是以 " & " 进行 连接的
OK,通过以上简单示例,只要稍微修改下,即可做成多站点自动登陆,或自动网上投票等功能!
参考网址:
http://dev.csdn.net/article/28/28374.shtm
http://www.knowsky.com/18774.html
http://www.netomatix.com/HttpPostData.aspx