鉴于很多朋友的意思,再补充说一下,
希望大家参考一下有关神经网络的技术资料,模式识别的文章。
我的网站已经服务到期,程序在
这里
最近实在太忙,没时间写完。大家凑合着看吧。希望大家给我建议。谢谢。
图形识别技术与网上安全
(关键字:图形识别 安全 黑客 破解 OICQ 登陆)
作者:主 人
版
权
所
有
金
葵
花
工
作
室
2004-1-4 V1.0
Home
|
http://m9m.nease.net
|
QQ
|
11602011
|
Email
|
miracletalent@sina.com
|
Tel
|
(86)028-87311227
|
§1.1 目录
图形识别技术与网上安全... 1
§1.1 目录... 2
§1.2 前言... 3
§1.3 图形识别的梦想... 3
§1.4 图形识别的原理... 3
§1.4.1 图形类型... 3
§1.4.1.1. 常规图形的识别... 3
§1.4.1.2. 一般效果图形... 3
§1.4.1.3. 特殊图形的识别... 3
§1.4.2 识别原理... 5
§1.4.2.1. 特征码法... 5
§1.4.2.2. 笔迹流向法... 5
§1.4.2.3. 水流还原法... 6
§1.5 样例程序... 6
§1.5.1 下载地址... 6
§1.5.2 操作步骤... 6
§1.2 前言
申明:
1、 本文章并不怂恿大家做什么有害计算机网络安全的任何活动!仅作研究讨论使用。
2、 写得不好,望大家指正。
如今,太多的网站使用了图形附加码,如
http://love.qq.com/left1.shtml,以求Internet的安全,然而,真是如此吗?
§1.3 图形识别的梦想
每个程序员、每个系统架构师、每个IT人,谁没有梦想,谁没有作为的梦?我,就是这样的一个人,这个图形附加码的识别就算是我踏出图形识别之路的第一步吧,同时也希望专家们把网上的图形附加码做得更好。
§1.4 图形识别的原理
§1.4.1 图形类型
§1.4.1.1. 常规图形的识别
常规图形是指图形附加码没有经过任何特殊的处理,如
7564. 这中图形一般每个数字占的宽度、高度都一致。因此,其识别是很容易的,只要先采集0 ~ 9的数字特征码存于数据库,用的时候拿出来作一个扫描比较,取出最接近的一个就是了。特征码的采集见[
识别原理]
§1.4.1.2. 一般效果图形
不同颜色、背景色、随机杂点,通常只用了两种颜色:前景色、背景色两种。如:
,这种图形的识别分析原理是,先扫描一遍整个图形,统计出颜色最多的一种:就是背景色,定义为待去除的背景色。然后在扫描一遍,把背景色还原为白色,以便识别方便,同时去除杂点,去除杂点的原理是,用GetPixel取出一点与背景色比较,如果不同,然后取其附近的点比较,如果没有连续的点,证明是杂点,所以就用SetPixel设置他。最后在用
常规图形的识别方法处理他。
样例程序就是采用这样的方法。(样例图来自:
http://verify.qq.com/getimage?"%2CMath.random()%2C”)
§1.4.1.3. 特殊图形的识别
这样的图形通常有不同的背景色、背景点、背景图、渐变背景色、网格背景等等,而前景图形(通常是数字、字符、汉字等)则采用倾斜、膨化、波浪化、风化、背景图形凹凸、球状扭曲等等效果来形成。如:(以下图形来自
http://edit.bjs.yahoo.com/config/eval_register?.ea=35NB3rPjpNEH191O8w9OLjUE_Nn8b16EhPzXz1BMMqq6pMb53YlmWfnAjJdcnHvar9NxW_XbmgVJsJqrxNY2ntMqZ4QY7G.1.ciCd_U.zUGUChdS9DNFevwgs3LzTTxuawVbRaoEZCggdLcEm02UCHCdaJUnb.6JSdeMyfx7Gg9eVx5mu4UH8pAiE07_yEE4doLEhWunjA--,每刷新一次变一次)
如上的图形,通常用
笔迹流向法(见下面)解决,但是,在识别之前应该用用
水流还原法还原由背景色网格分隔开的前景图形。
§1.4.2 识别原理
§1.4.2.1. 特征码法
特征码就是统计单个图形字显示时占的宽、高度像数,在统计每横行、竖行像数占的比例数,当然,也可以把宽高平分为n等份来记录,以减少特征码数据库的体积。如:
去除多余的部分后,各数字宽为6 Pix,高 9 Pix,0数字图形的横向统计是:0, 1, 2, 2, 2, 2, 2, 2, 1。也就是说比例为:0,1/6,1/3,1/3,1/3,1/3,1/3,1/3,1/6;竖向统计:4, 2, 2, 2, 4, 0,比例:4/9,2/9,2/9,2/9,4/9,0。下为C/C++描述
// 横向Pix统计( 0 ~ 9)
int narrNumCharacterH[10][9] = {
{0, 1, 2, 2, 2, 2, 2, 2, 1},
{0, 1, 2, 2, 1, 1, 1, 1, 5},
{0, 3, 2, 1, 1, 1, 1, 1, 5},
{0, 3, 2, 1, 2, 1, 1, 2, 3},
{0, 1, 2, 2, 2, 2, 5, 1, 1},
{0, 5, 1, 4, 2, 1, 1, 2, 3},
{0, 3, 1, 1, 4, 2, 2, 2, 3},
{0, 5, 1, 1, 1, 1, 1, 1, 1},
{0, 3, 2, 2, 3, 2, 2, 2, 3},
{0, 3, 2, 2, 2, 4, 1, 1, 3}
};
// 竖向Pix统计( 0 ~ 9)
int narrNumCharacterS[10][6] = {
{4, 2, 2, 2, 4, 0},
{2, 2, 8, 1, 1, 0},
{3, 3, 3, 3, 3, 0},
{2, 2, 3, 3, 5, 0},
{3, 2, 2, 8, 1, 0},
{5, 3, 3, 3, 5, 1},
{5, 3, 3, 3, 4, 0},
{1, 3, 3, 3, 2, 0},
{5, 3, 3, 3, 5, 0},
{4, 3, 3, 3, 5, 0}
};
|