破解网站验证码的详细示例 - 锤子
破解网站验证码的详细示例
下面是一个破解网站验证码的主要代码,包含详细注释,包含web界面。经试用,验证码识别100%成功。原文发在模拟精灵社区http://www.yhhe.net/bbs 。
———————————把界面写入web窗体的函数————————————-
write= function()
html = [[
<html>
<head>
<title>form</title>
</head>
<script> LAScript=external;</script>
<body>
<form name=”form1″ method=”post” action=””>
<div id=”userdata” style=”display:none”></div><br><br>
<INPUT id=”loadstring” type=”button” onclick=”javascript:LAScript.getImg()” value=”开始得到图像”>
<br><br>
<INPUT id=”loadstring” type=”button” onclick=”javascript:LAScript.sampleImg()” value=”保存样本图片到数据岛”>
<br><br>
<INPUT id=”loadstring” type=”button” onclick=”javascript:LAScript.identify()” value=”校验图片并登陆”>
<br><br>
这里显示程序运行过程的有关信息:
<input name=”temp” type=”text” width=”200″ onMouseOver=”this.focus()” onFocus=”this.select()” >
</form>
</body>
</html>
]]
wb:go(“about:blank”);
delay(200)
wb:wait(“about”)
wb:write(html);
wb:wait(“”)
wb:show(true);
end;
———————————————————————————-
———————————从指定网址得到验证码图片的函数———————-
getImg= function()
local ele=wb:getEle(“temp”);–这是模拟程序web界面上的一个节点,用来显示程序运行过程的相关信息
local img=image.new()
img:getURL(“http://www.domainname.com/img.asp”,”*.jpg”);–图片格式一定要正确。
img:corp(2,2,58,18);–修剪图片。查看下载下来的图片,不断微调。我可是调整了10次哦才定下参数。 每个验证码图片这个参数可能不同。
img:save(“f:\\temp\\temp.jpg”);–把图片保存到本地
ele:setAttribute(“value”,”已从指定网址得到图像”);–在web界面上显示提示信息。如果还没有用过web界面,赶快为你的模拟程序做个web界面吧,几行代码搞定。
local img2,img3,img4,img5=img:split(1,4);–验证码共4个字,把图像拆分为1行4列.
img2:save(“f:\\temp\\01.jpg”);–保存到本地。图片上显示是0,就把文件名改成0.jpg 直到取得全部数字
img3:save(“f:\\temp\\02.jpg”)
img4:save(“f:\\temp\\03.jpg”)
img5:save(“f:\\temp\\04.jpg”)
ele:setAttribute(“value”,”拆分并保存图像已经完成”);–在web界面上显示提示信息
image.del(img);
end;
—————————————————————————————–
———————————–得到样本图片并保存在数据岛的函数—————————————
sampleImg=function()
local ele=wb:getEle(“temp”);–这是模拟程序web界面上的一个节点,用来显示程序运行过程的相关信息
local codeKey={};–非全局变量要加上local 修饰符,这样函数运行结束,会自动回收内存。
for i=0,9,1 do–得到以10个数字为键值的表
codeKey[“”..i]=0;–=0是临时赋值
end;
loadCodeKey= function(k,v)
local img=image.new();
img:load(“f:\\temp\\”..k..”.jpg”);
img:bpp(1);–对图片进行相应处理.具体要根据实际情况进行调整,不能照搬
img:bpp(24);
img:median(1);–图片较有规律时,可以不用中值滤波。具体根据识别情况不断微调
img:save(“f:\\temp\\”..k..k..”.jpg”);–保存到本地,可以直观看一下图片处理的结果,以便作进一步调整。
codeKey[k]=string.encode(img:getBytes(“*.jpg”),””);–把图片转换为二进制数据,再进行base64编码转换为普通文本
image.del(img);
end;
table.foreach(codeKey,loadCodeKey)
ape:saveTable(codeKey,”验证码样本”)
ele:setAttribute(“value”,”保存样本到数据岛已经完成”);–在web界面上显示提示信息
end;
————————————————————————————-
———————–把文本格式的的样本图片转换成图像格式的函数———————–
bytestoImg= function()
local codeKey=ape:loadTable(“验证码样本”);–从数据岛读取表
local imgBinKey={};–这个表是放真正的图像的
toImage= function(k,v)
local img9=image.new();
img9:setBytes(string.decode(v,””),”*.jpg”);
imgBinKey[k]=img9;
end;
table.foreach(codeKey,toImage)
return imgBinKey;–调用函数,将返回包含样本图片的表
end;
—————————————————————————————
————————————-比较图像的函数—————————–
test= function(imgBinKey,imgX)
local limit=1;
local chr=””;
testImg= function(k,v)
local n=imgX:testX(imgBinKey[k])
if (n<limit) then
limit=n;
chr=k..””;
end;
end;
table.foreach(imgBinKey,testImg);
return chr
end;
————————————————————————————-
—————————识别验证码并登陆网站的函数——————————-
identify= function()
local strUrl=”http://www.domainname.com/login.asp”
wb:go(strUrl)
wb:wait(“”)
local img=image.new()
img:getURL(“http://www.domainname.com/img.asp”,”*.jpg”)
img:corp(2,2,58,18);–对图进行修剪
img:save(“f:\\temp\\temp.jpg”);–保存到本地,以便比对识别是否正确
local img2,img3,img4,img5=img:split(1,4)
img2:bpp(1);–我第一次识别错误,就是因为没有在这里对图片进行处理。这里的图片处理方法要和样本图片中的处理方法一致.
img2:bpp(24)
img2:median(1);–是否加中值滤波,及中值滤波的值,要根据实际情况进行调整。
img3:bpp(1)
img3:bpp(24)
img3:median(1)
img4:bpp(1)
img4:bpp(24)
img4:median(1)
img5:bpp(1)
img5:bpp(24)
img5:median(1)
imgBinKey=bytestoImg();–得到包含样本图片的表
local str=””;–识别出来的文字
str=test(imgBinKey,img2);
str=str..test(imgBinKey,img3);
str=str..test(imgBinKey,img4);
str=str..test(imgBinKey,img5);
local ele=wb:getEle(“yanzhengma”);
ele:setAttribute(“value”,str)
ele=wb:getEle(“UserName”)
ele:setAttribute(“value”,”yourusername”)
ele=wb:getEle(“Password”)
ele:setAttribute(“value”,”yourpassword”)
delay(3000)
ele:submit();–提交表单
delay(1000);
end;
——————————————————————————————
write();–把界面写入web窗体.模拟程序启动时只运行这两句代码。点击web界面上的相应按钮执行相应函数
delay( _CMD_LOOP )
附录:
模拟精灵主页:http://www.yhhe.net/ape/
模拟精灵在线社区:http://www.yhhe.net/bbs
模拟精灵软件特色:
支持所有高级语言特性,如变量、延时、循环、结合标记语言与动态语言的优点,支持中文编程
支持可定制多国语言包、自动互译、您也可以定制一套您自已的ApeML语言.
可编辑速度、延时、目标位置、可自动抓点、抓色块、抓图、可选精确查找、模糊查找能
ApeML能携带图片附件,也可导入导出图片,可选三种抓屏方式,可调用外部抓屏软件…
可监测纪录输入的中英文字符串、按钮标题、窗体标题.可通过指定文件名临测控制运行的进程.
热键绑定与计划任务(也可执行普通应用程序),可设定自动运行,自动录制,支持分卷ape文件.
自动发送中英文字符串到软件、游戏、网页…支持win9x、XP、2000、2003..
可选软件模拟、硬件模拟、仿真模拟三种模式,支持所有鼠标键盘运行环境.
通过编写网页轻松完成GUI图形界面设计、创建漂亮的web窗体
支持XML序列化、网络服务、zip压缩、图象处理、窗体控制、内存读写……
代码编辑支持自动完成列表与模板的代码编辑器,移动鼠标或方向键可显示代码提示.
您是否经常执行一些重复的鼠标键盘操作?
您是否需要把鼠标键盘动作纪录下来,并且在需要的时候自动执行或者与他人分享呢?
您是否希望轻松制作各种聊天机器人?或者有个软件自动帮您玩游戏、挂机?
您是否希望鼠标键盘在指定的时刻自动运行?
一款新推出的超酷鼠标键盘模拟软件-模拟精灵2005、可通过录制编写模拟程序记忆您的鼠标键盘操作,从而替代您的双手.
模拟精灵2005是新一代模拟软件拥有最先进的模拟引擎,采用一系列创新技术将模拟编程推向一个新的时代,模拟精灵2005将带给您轻松流畅的模拟编程体验.
软件大小不足1M、一张软盘就可装下,却集成了所有最强大最先进的功能
模拟精灵是纯绿色软件,无需安装注册就可随地运行,虽然大小不足1M、用一张软盘就可随身携带,但是已内置了web窗体界面编程、windows编程、模拟编程、XML序列化、网络服务、zip压缩、图象处理……等等所有最新最强劲的功能,而且所有功能都封装成了简单易用的类库,您只要轻松调用即可。
强大的web窗体 GUI界面编程、用HTML就可以做软件
象下面这样的窗体,没有任何图片,仅用几句HTML代码就可以完成一个窗体,大小不过几K。当然,只要您会制作网页,你可以轻易的实现各种漂亮的程序。
支持自动完成功能的语法编辑器
打包功能可以轻松将任何程序合成EXE文件.
方便的管理您的模拟程序
模拟精灵拥有性能优良的引擎
纯绿色软件无需安装注册、完全免费永久无限制的使用
提供免费的技术支持,“在线精灵库”可免费下载范例源代码。