破解网站验证码的详细示例

 
      
破解网站验证码的详细示例

 

  下面是一个破解网站验证码的主要代码,包含详细注释,包含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文件.

方便的管理您的模拟程序

模拟精灵拥有性能优良的引擎

纯绿色软件无需安装注册、完全免费永久无限制的使用

提供免费的技术支持,“在线精灵库”可免费下载范例源代码。

 

版权声明:本文为loadrunner原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/loadrunner/archive/2007/11/22/968357.html