本程序要求模拟精灵2005 v6.80 以上版本
模拟精灵2005 v6.80 下载地址
------------------------------
yhhe.net 下载: [/url][url=http://www.yhhe.net/Fairy_Ape.exe][url=http://www.yhhe.net/Fairy_Ape.exe]http://www.yhhe.net/Fairy_Ape.exehttp://www.yhhe.net/Fairy_Ape.exe
1he.net 下载: [/url][url=http://1he.net/Fairy_Ape.exe][url=http://1he.net/Fairy_Ape.exe]http://1he.net/Fairy_Ape.exehttp://1he.net/Fairy_Ape.exe
声明
------------------------------------------------------
本站公开的所有验证码示例不保证长期有效性,仅保证发布时有效.
相应网站更改验证码以后不再提供任何更新,不提供任何技术支持.
模拟精灵是首个公开系统有效验证码识别技术的网站,
其目的在于帮助网站建设者相应的改善验证码技术(事实上我们也看到了很多网站有效的改良了验证码).
我们在于公开探讨验证码识别技术(实际上完全可以加密源代码提供),
并非是鼓励滥发垃圾信息(我们自已除了测试,不会用这些代码去发广告).
如果本文触犯了任何网站的利益,请通知本站将立即删除.
说明
------------------------------------------------------
首先到新浪VIVI注册一个用户名
新浪VIVI的验证码有时候有,有时候没有,可能是为了防止机器人,不过本程序自动识别是否有验证码
其实在页面上做一些文章,例如提一些问题,或者表单使用随机名字等等,对模拟精灵没有任何作用。
第一步:验证码采样(没有找到5和0 验证码好象不会出现这两个字符)
1、打开模拟精灵2005,新建模拟程序,把下面的源代码复制到“源码编辑器-->脚本区块”
2、点击“生成模拟程序”按钮
3、重复运行下面的程序,并把生成的图片样本改为“图片上的字符.png”
img = image.new();
--下载图像,没有后缀名要显示指定*.bmp格式
--附注:image库也有抓屏函数,可以直接在屏幕上截取验证码。
image.corp(img, 13 ,0 , 13 + 72 , 20 )
img:save("c:\\test\\test.png") --保存到硬盘
--折分图片,指定一行四列
img2,img3,img4,img5 = img:split(1,4);
img2:save("c:\\test\\0001.png")
img3:save("c:\\test\\0002.png")
img4:save("c:\\test\\0003.png")
img5:save("c:\\test\\0004.png")
image.del(img);
第二步:生成样本数据
1、打开模拟精灵2005,新建模拟程序,把下面的源代码复制到“源码编辑器-->脚本区块”
2、点击“生成模拟程序”按钮
3、运行模拟程序
4、点击“读取源代码按钮”,在“数据区块”中就是生成的样本数据,复制到你的程序中就可以了
codeKey ={};
-- 数字键名不能写在 {} 里面,注意字符串索引叫键名,与数字索引(也就是没有键名)是不同的
-- 你可以写 codeKey.a = true codeKey={a=true} 但是你不能写 codeKey.1 = true 或 codeKey = {1=true} 这是不符合语法的
-- 你可以象下面这样写,用下面这种写法还可以定义中文的变量名,例如_G["中文变量"] = true;
codeKey["1"] = true;
codeKey["2"] = true;
codeKey["3"] = true;
codeKey["4"] = true;
codeKey["6"] = true;
codeKey["7"] = true;
codeKey["8"] = true;
--k参数为键,v参数表示值 一个典型的table迭代器回调函数
loadCodeKey = function(k,v)
local img = image.new();
img:load("C:\\test\\"..k..".png")
img:bpp(1);
img:bpp(24);
img:corp( 5, 5, 13,15 )
img:save("C:\\test2\\"..k..".png")
codeKey[k]= string.encode( img:getBytes("*.png") , ""); --因为转换到字符串还是二进制,所以用base64进行编码
image.del(img);
end;
--遍历表codekey的所有元素,调用loadcodekey加载图片文件
table.foreach (codeKey, loadCodeKey);
--把所有图片保存到数据岛,
ape:saveTable(codeKey,"验证码样本")
三、全部源代码
1、打开模拟精灵2005,把下面的源代码复制到“源码编辑器”
2、点击“生成模拟程序”按钮
3、在“自定义属性”中设置新浪VIVI的用户名与密码
<?xml version="1.0" encoding="gb2312" ?>
<ApeML LID="CHS" MD="0" 抓屏模式="0" 名称="新浪VIVI自动提交程序" 作者="模拟精灵 2005" 信息窗口="true" 速度="10" 循环次数="10" 自定义属性="登陆密码 = 123,登陆用户名 = username,页面ID = 321">
<!--创建时间:2005年11月12日-10:38-->
<脚本区块 语言="LAScript" 名称="init登录" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
<![CDATA[
--区块名字前添加"init"前缀则不会重复运行
--using("_G.std"); --从外部文件引用名字空间
--设置标题每行一个
local strTitle = [[西藏叛乱内幕
免费在线观看电影免费下载
〖美女图片〗~怎么看都清新
赤裸更圣洁---超级唯美的人体
新浪图像搜索引擎 性感
免费QQ短信
超恐怖!人皮杂技表演-就要看
顶级性感内衣秀上演致命诱惑
绝美图库--华声在线
[暴笑flash]拾金记--Vista[爱
CD乐鉴:彩虹乐队新专辑《AWAK
演艺圈里的性交易真相批露
极品MM全套(不看别后悔)
杜月笙曾捐1500套防毒面具给八
哪些女孩儿最吸引男人(图) 天
风骚性感少妇浴室自拍,泄春光
火影忍者自定义头像_QQ卡通头
▓☆◇◆◇ 小荡妇轻解罗衣露]]
_tabTitle = string.split( strTitle,"\r\n"); --拆分到table列表(数组)
local strTag = [[
新闻
体育
图片
影音
动漫
两性
美腿
搞笑
视频
娱乐
文化
IT
音乐
高考
军事
小说
游戏
]]
_tabTag = string.split( strTag,"\r\n");
_set = ape:loadSetting() --载入 自定义属性
stopPlay = function()
ape:saveSetting(_set); -- 保存自定义属性
end;
--创建web窗体
wb = web.new("[/url][url=http://vivi.sina.com.cn/user/login.php]http://vivi.sina.com.cn/user/login.php");
wb:setSilent(true,true,true,true); --静默模式,所有信息框都别弹出来
--填用户名
local ele = wb:getEle("username");
if(not ele)then
win.messageBox("打开网页时出错");
web.del(wb);
do return false end;
end;
ele:setAttribute("value",_set["登陆用户名"])
--填密码
ele = wb:getEle("password2");
ele:setAttribute("value",_set["登陆密码"]);
--自动登录
ele:submit();
wb:wait(); --等待提交成功
element.del(ele);
wb:show(true);
]]>
</脚本区块>
<脚本区块 语言="LAScript" 名称="init随机生成字符串" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
<![CDATA[
string.random = function( n )--function表示这是一个函数,n是调用函数时输入到函数内部的一个参数。这里代表取几位长的字母组合
local str = "精好荐呵提交收藏发看是这网新浪在有是发的"
local from = 1;
local to = string.len(str);
local str2 = "";
math.random(from,to); -- 先运行一次再次把随机数打乱
local tab = {};
local j = 0;
math.random(from,to)
for i=1,n,1 do--1,n表示从1循环到n,第二个1表示步进。
j = math.random(from,to );--产生一个从1到26的随机数,调用math.random前要先初始化随机数种子
if( true )then --中文字是两个字节 25指出中文字的字节长度加一(一个中文字等于两个字节)
if(math.mod( j , 2) == 0)then --取到了后面的一个字节
tab[i]=string.byte( str , j-1 )
tab[i+1]=string.byte( str , j )
else --取到了前面的一个字节
tab[i]=string.byte( str , j )
tab[i+1]=string.byte( str , j+1 )
end;
i = i +1;--for迭代器向前跳一位
else --英文字
tab[i] = string.byte( str , j )
end;
end;
return string.char( unpack(tab) );--从tab表中取出第m个键,并和name连接
-- string.char是自动把多个ascii值组成一个字符串,unpack是打散tab代替多个参数
end;
]]>
</脚本区块>
<脚本区块 语言="LAScript" 名称="初始化验证码样本" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
<![CDATA[
--从数据区块读取base64编码的图片数据
codekey = ape:loadTable("验证码样本");
imgBinKey = {}; --这是一个图像数组,用来储存还原后的验证码样本的图片数据
--必须进行一个转换,因为codekey里面只是base64编码的普通字符串,而imgBinKey 将是真正的图片对象(二进制数据)
--还原到图片对象
toImage = function(k,v)
local img9 = image.new();
img9:setBytes( string.decode( v ,"") ,"*.png");
imgBinKey[k] = img9;
end;
table.foreach(codekey,toImage);
]]>
</脚本区块>
<脚本区块 语言="LAScript" 名称="提交页面" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
<![CDATA[
local n = math.mod( ape:runCount() , table.getn(_tabTitle) );
if(n==0)then n = 1 end;
local n2 = math.mod( ape:runCount() , table.getn(_tabTag) );
if(n2==0)then n2 = 1 end;
local title = _tabTitle[ n ]..string.random(3);
title = web.encodeURL(title)
_set["页面ID"] = _set["页面ID"] + 1;
local url = "[/url][url=http://www.yhhe.net/]http://www.yhhe.net/".._set["页面ID"]..".html"; --把404错误页指向真实网址
local vivi = "[/url][url=http://vivi.sina.com.cn/collect/icollect.php?pid=www.yhhe.net&title=]http://vivi.sina.com.cn/collect/icollect.php?pid=www.yhhe.net&title="..title.."&url="..url
wb:go(vivi);
wb:wait();
local ele = wb:getEle("desc");
ele:setTextin(title..string.random(3)); --多线文本框用 ele:setTextin() 函数修改文本
ele = wb:getEle("tag");
ele:setAttribute("value",_tabTag[n2])
elers = wb:getEle("rs");
eleimagehash = wb:getEle("imagehash");
if( elers and eleimagehash) then --有验证码
local strhash = eleimagehash:getAttribute("value")
--下载验证码图片
imgD = image.new();
if (imgD:getURL("[/url][url=http://vivi.sina.com.cn/collect/createimage.php?type=collect&imagehash=]http://vivi.sina.com.cn/collect/createimage.php?type=collect&imagehash="..strhash,"*.png") ~= true) then
win.messageBox("下载图像失败","")
image.del(imgD)
do return false end;
end;
imgD:corp( 13 ,0 , 13 + 72 , 20 )
--使用split函数分割图片
img2,img3,img4,img5 = imgD:split(1,4);
function test(imgX)
imgX:bpp(1);
imgX:bpp(24);
imgX:corp( 5, 5, 13,15 )
local limit = 10000000000;
chr = "";
win.messagePrint("正在检测图片,请稍候....")
testimg = function(k,v)
local n = imgX:testXX(imgBinKey[k]);
if(n<limit)then
limit = n;
chr = k.."";
end;
end;
table.foreach(imgBinKey,testimg);
return chr;
end;
local strrs = test(img2)..test(img3)..test(img4)..test(img5);
imgD:paint(100,100,200 ,50 )
elers:setAttribute("value",strrs)
end;
-- 选择单选按钮中的第一个"公开"
ele,ele2 = web.getEle(wb,"ispub");
ele:setAttribute("checked","true")
ele = wb:getEle("Submit2");
--如果弹出对话框,按ID为7的按钮
web.msgProc = function(msg,hwnd) return 7; end; --[[回调函数,参数(对话框消息,web窗体句柄),返回值(对话框弹出后自动发送的按钮)]]
ele:submit();
wb:wait()
]]>
</脚本区块>
<数据区块>
<验证码样本>
<item key="1" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAMklEQVQImb2OQQoAMAjDUv//53rYEMc821sTKJVtAJAEVI1Oe2KkV9iuhUeM2RD8fw5M6dMSCWcCZjAAAAAASUVORK5CYII=" ktype="string" vtype="string" />
<item key="2" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAOElEQVQImX3MQRIAMARDUXH/O/9ujKKmdl6CAYCViTW1NgC1lpkUovEnM18V8FXbRdUbDI3g1d8ciIgp+KeUL44AAAAASUVORK5CYII=" ktype="string" vtype="string" />
<item key="3" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAO0lEQVQImY2OSQ4AIAgDqeH/Xx4PJIiiiT3RDpsBtgsAlCYKSWHVJ4KNawr4EaW8dlX8fWPh17vWVwWY3c8nAhuBnZsAAAAASUVORK5CYII=" ktype="string" vtype="string" />
<item key="4" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANElEQVQImY2OSQoAIBDD0vn/n+tBcKGDmGMKJbLNgSTAdqWdVGv3sB6uIS1QrX2hr9ymKhn2lxURTzVrTwAAAABJRU5ErkJggg==" ktype="string" vtype="string" />
<item key="6" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAOUlEQVQImY2PwQoAQAQF523+/5ffHqRsUTsXYgTZBiRRZKUC2O65Hgtyem4k0cVZ+toBHDbWc7cHL07xO98shs5PAAAAAElFTkSuQmCC" ktype="string" vtype="string" />
<item key="7" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANklEQVQImXWOQQoAMAjDov//c3dQGFj1mFgIHBeSJooA0tG+KCdpWdRrrvSLQVs4BTrDo8/cB36VGBCIDRIBAAAAAElFTkSuQmCC" ktype="string" vtype="string" />
<item key="8" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAN0lEQVQImWP8//8/AwMDIyMjAwxARGAUA8P///+R2YwoqhgYELpx6qCeHUwoFiIBJjQ+RAU+ywGbEj7gy8pwpgAAAABJRU5ErkJggg==" ktype="string" vtype="string" />
</验证码样本>
</数据区块>
</ApeML>