当前位置:编程学习 > JAVA >>

如何破解网站验证码?

请教各位高手一下,我现在使用HttpClient来执行查询http://www.miibeian.gov.cn的公共信息,我已经找到了它的查询页面是http://www.miibeian.gov.cn/chaxun/ggcx.jsp,但是通过IE访问该页面地址就变成这样http://www.miibeian.gov.cn/chaxun/ggcx.jsp?2019548071=1849485224,会生成一个sessionID,在该页面输入数据后提交到http://www.miibeian.gov.cn/chaxun/ggcx_wz_ok.jsp,该页面要求输入验证码,输入正确的验证码后提交到Servlet查询,但是我在程序中只要执行代码得到的最终结果不是查询到的列表而还是http://www.miibeian.gov.cn/chaxun/ggcx.jsp的内容,我们的技术负责人说是验证码的问题,请问各位朋友我该如何解决呢?下面是我的代码:

package org.httpclient.http;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class HttpClientTest {

public static void main(String[] args) throws Exception {
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(
"http://www.miibeian.gov.cn/chaxun/ggcx_wz_ok.jsp?2220219303=1849485224");
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
int result = client.executeMethod(method);
if (result == HttpStatus.SC_OK) {
method = new PostMethod("http://www.miibeian.gov.cn/baxx_cx_servlet");
method.setRequestBody(new NameValuePair[] {
new NameValuePair("cxNr", "google.cn"),
new NameValuePair("cxfs", "1"),
new NameValuePair("vertifycodeg", "cI19")
});
if (client.executeMethod(method) == HttpStatus.SC_OK) {
System.out.println(method.getResponseBodyAsString());
}
}
method.releaseConnection();
}

}
--------------------编程问答-------------------- http://www.miibeian.gov.cn/chaxun/ggcx_wz_ok.jsp?2220219303=1849485224
-- 这个地址的参数肯定不是固定的,应该是每次连接时动态产生的 --------------------编程问答-------------------- 就是动态产生的,我要是直接访问这个http://www.miibeian.gov.cn/chaxun/ggcx_wz_ok.jsp?2220219303=1849485224 的话,得到的页面源代码还是有产生验证码的如下:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
 
    <title>备案公共信息查询首页网址信息</title>
    <link href="../CSS.css" rel="stylesheet" type="text/css">
   <style type="text/css">
<!--
body {
background-image: url();
background-attachment: fixed;
}
-->
</style>


</head>


  <script language="JavaScript">
         function reloadImage(url) 


document.frmMain.img1.src = url; 


function browse()
{
if(document.frmMain.vertifycodeg.value.length==0)
    {
     alert("请输入验证码!");
     document.frmMain.vertifycodeg.focus();
     return false;
    
    }
    var vertifycodeg = document.frmMain.vertifycodeg.value;
    
if(vertifycodeg.indexOf("'")!=-1 || vertifycodeg.indexOf('"')!=-1 
    || vertifycodeg.indexOf('<')!=-1|| vertifycodeg.indexOf('>')!=-1
    || vertifycodeg.indexOf('\\')!=-1 ||vertifycodeg.indexOf('&')!=-1 )
    { 
     alert("验证码包含非法字符!");
     document.frmMain.vertifycodeg.focus();
     return false;
}

document.frmMain.action="/baxx_cx_servlet";
document.frmMain.submit();
}
</script>
<body>
<form name="frmMain" method="post" action="">
 <p align="center"><span class="t0bt">请输入验证码</span></p>
<table width ="400" align="center" border="0" cellpadding="1" cellspacing="1" bgcolor="#94BAE7">

<tr class="t01"  bgcolor="#EFF6FE">

    <td height="30" align="center"  bgcolor="#EFF6FE">验证码:
      <input  type="text" style="height:25" name="vertifycodeg" size="6" onkeydown="if(event.keyCode==13){event.keyCode=0;return false}">
      <img  style="width:60; height:25" name="img1" align="absmiddle" border="0" src="image_ggcx.jsp">
      <a href="#" onclick='reloadImage("image_ggcx.jsp")' return false;>刷新</a>
      <input type="hidden" name="cxNr" value="null">
      <input type="hidden" name="cxfs" value="null">
      </td>
  </tr>
<tr bgcolor="#EFF6FE" class="t01">
        <td height="30" colspan="6" align="center"> 
        <img src="../images/OK.gif" style="cursor:hand;" border="0" onClick="browse()"> 
        <img src="../images/back.gif" style="cursor: hand;" border="0" onClick="javascript:history.go(-1);">
        </td>
    </tr>
</table>
</form>
</body>
</html>



其中有一句<img src="xxx.jsp">是引用验证码,但是我如何才能解决这个验证码的问题呢? --------------------编程问答-------------------- 这个有点头大! --------------------编程问答-------------------- 你能够轻易的获得的话,验证码就没有存在的必要了 --------------------编程问答-------------------- 继续做梦吧。哈哈哈!那是不可能破解的。
--------------------编程问答-------------------- 楼主大哥,你可知道验证码的原理?不知道的话,还来谈什么破解?
开玩笑嘛~!除非你修改它的系统,提供一个查询入口。
验证码是不会写往客户端的~ --------------------编程问答-------------------- --------------------编程问答-------------------- 整个页面抓下来,取得验证码的的img的地址,下载过来,

比较简单点,让用户自己看那图片,输入;

复杂点,你Google下“验证码图像识别”。

但是,很多方法都没法解决噪点问题,所以你看到的验证码如果是七歪八倒,背景又乱的话,估计那个识别算法,就要自己慢慢研究了。。。 --------------------编程问答-------------------- 都是随机生成的,怎么破解,除非你把那个图片也抓过来,写个程序去识别然后返回验证码字符串 --------------------编程问答-------------------- 看看有没高人出现先 --------------------编程问答-------------------- 基本上不可能。。要不还要个毛验证码啊。 --------------------编程问答-------------------- 我图片已经抓过来了,怎么读取图片上的文字呢? --------------------编程问答--------------------
引用 8 楼 laynepeng 的回复:
整个页面抓下来,取得验证码的的img的地址,下载过来,

比较简单点,让用户自己看那图片,输入;

复杂点,你Google下“验证码图像识别”。

但是,很多方法都没法解决噪点问题,所以你看到的验证码如果是七歪八倒,背景又乱的话,估计那个识别算法,就要自己慢慢研究了。。。


现在高级的验证码都汉字了,汉字做模式识别 需要的库应该很大很大吧,毕竟汉字那么多 --------------------编程问答-------------------- 这个网站你的验证码是数字和英文组成的 --------------------编程问答--------------------   基本不可能,除非你知道随机产生的数字或者字母会是什么。。。。 --------------------编程问答--------------------
引用 13 楼 jxst051665 的回复:
引用 8 楼 laynepeng 的回复:
整个页面抓下来,取得验证码的的img的地址,下载过来, 

比较简单点,让用户自己看那图片,输入; 

复杂点,你Google下“验证码图像识别”。 

但是,很多方法都没法解决噪点问题,所以你看到的验证码如果是七歪八倒,背景又乱的话,估计那个识别算法,就要自己慢慢研究了。。。 



现在高级的验证码都汉字了,汉字做模式识别 需要的库应该很大很大吧,毕竟汉字那么多


这个绝对不容易,本来验证码和机械识别验证码就是场战争。。。验证码要做的就是让人能分别出来,机器难以识别。。。 --------------------编程问答-------------------- 如果能破解,下次在做登陆等地方俺就不做验证码了
不费那劲了 --------------------编程问答-------------------- 这个貌似是可以的。
找到图片的路径 ,我听说net就有个图片分析功能,它可以把图片解析,把数字找出来,可以破解验证码,成功率还是可以接受的。
你可以找找这方面的资料
--------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 别白费力气了,不可能的。除非那个验证码很弱智,否则你是无法用程序识别的
就是你能识别出来,稍微改动下验证规则你的程序就完蛋了。比如有一次在一个
老外的网站下载东西要验证码,也是个图片,上面写着请回答今天是星期几?
刷新了下,又变成了1+2+3...=?这样的问题,总之都是这种白痴也能处理的简单问题
但让机器算估计你的机器累的冒烟了都出不来 --------------------编程问答-------------------- 哪位朋友会图像二值化算法啊? --------------------编程问答-------------------- http://blog.csdn.net/lywybo/archive/2010/08/18/5822233.aspx  效验码的一个破解讨论 --------------------编程问答-------------------- 太有想法了,关注~~~ --------------------编程问答-------------------- 妳可以去他们网站买个接口 ·哈哈 --------------------编程问答-------------------- 挺难的,我做过的采集数据都是没有图形码验证的,我试过用OCR,但识别率低的可怜。 --------------------编程问答-------------------- 验证码的事情楼主不要妄想能够轻易解决,如果手头资源不多还是建议你把这个问题绕过去吧 --------------------编程问答-------------------- --------------------编程问答-------------------- 图像识别,模式识别,难度很大 --------------------编程问答-------------------- 除非验证码有漏统或者验证有问题 --------------------编程问答-------------------- 图片识别确实不好弄,挺麻烦的
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,