饶荣庆 -- 您今天UCWEB了吗?--http://www.ucweb.com

3G 手机开发网

   :: 首页 :: 联系 :: 聚合  :: 管理
  99 Posts :: 1 Stories :: 219 Comments :: 0 Trackbacks

 

1.关于自动注册原理与实践。

1.基于浏览器请求,-- 程序员写出一个程序模拟一条自动注册url,把注册所必须的参数都附在请求后面
2.基于HttpClient 请求。实现过程比较简单,可以通过穿过ssl进行请求

自动注册首先要解决的问题:
1.关于注册验证吗的破解。
  1.市面上一个简单图片验证吗的开发已经不是什么难事了,对于程序生产的图片,破解起来是比较困难的,
    特别是google,我曾经不段的验证,发现,如果您单独取出那条验证吗的,话,google会说您的请求错误,
    也就是google的验证吗的前提是必须输入请求注册url才行,因此破解它是很困难的。
  2.关于中文验证吗,虽然生产原理是一样,但是给注册的人破解就跟是难了。

由于以上原因,我没有找到一个关于破解验证吗的程序,而我本人知识水平有限,因此自动注册,我只能
找出那些字段跟注册url,并模拟一个注册请求。

前阵子,因为有需求,打算破解Gmail的图片识别码,进而达到自动注册Gmail邮箱的构想,

想法大概如下,构建一个Model,保存注册Gmail邮箱必填字段,跟一些隐藏参数,

先向Gmail注册地址进行请求服务,拿下Gmail图片验证码,进而调用图片识别程序,进行循环破解,知道破解成功,然后往Model设置识别吗的参数,

最后调用HttpClient进行请求服务。最后分析返回htm结果进行分析,是否注册成功。

在这里,唯一的难度就是破解验证吗程序,小弟还没找到好方法,不过至于模拟其他请求已经设置好。现在发个代码给大家看看

 

/** *//********************************************************************
 * 项目名称                :<b>j2me学习</b>            <br/>
 * 
 * Copyright 2005-2006 Wuhua. All rights reserved
 ********************************************************************/
package org.job.four;

/** *//**
 * <b>类名:Member.java</b> </br> 
 * 编写日期: 2007-3-27 <br/>
 * 程序功能描述:提供对注册字段的封装,<br/>
 *  程序只需要封装一个member,再向gmail发生请求<br/>
 * Demo: <br/>
 * Bug: <br/>
 * 
 * 程序变更日期 :<br/> 
 * 变更作者 :<br/> 
 * 变更说明 :<br/>
 * 
 * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
 */
public class Member ...{
    
    private String PasswdAgain = "51jobboj"; //重复密码
 
    private String FirstName="foxjob"; //名字
    private String LastName="tang";//姓
    private String Email="gooooooooooooooooooooooooooogle";//email名字
    private String Passwd="51jobboj";//密码
    private String selection="who is me?";//安全问题
    
    private String IdentityAnswer="me to 51job"; //密码安全问题答案
    private String SecondaryEmail="gooogledev@gmail.com";//第2电子邮箱
    private String loc="中国"; //地点
    private String newaccountcaptcha="";  //验证吗
    
    
    //以下是gmail隐藏的参数
    private String Continue = "http://mail.google.com/mail/e-11-104e59efab9ad9107b5532645c608844-f30129a93b86f8b2ec791bab26d3a93974381ba7"; //由于continue是java关键字,所以把c改为大写C
    private String t="6e91f0ba-47e895da-33e242a784269c0e1776";
    private String service="mail";
    private String dsh = "7874657562226198951";
    public final String getContinue() ...{
        return Continue;
    }
    public final String getDsh() ...{
        return dsh;
    }
    public final String getService() ...{
        return service;
    }
    public final String getT() ...{
        return t;
    }
    public final void setContinue(String continue1) ...{
        Continue = continue1;
    }
    public final void setDsh(String dsh) ...{
        this.dsh = dsh;
    }
    public final void setService(String service) ...{
        this.service = service;
    }
    public final void setT(String t) ...{
        this.t = t;
    }
    public final String getEmail() ...{
        return Email;
    }
    public final String getFirstName() ...{
        return FirstName;
    }
    public final String getIdentityAnswer() ...{
        return IdentityAnswer;
    }
    public final String getLastName() ...{
        return LastName;
    }
    public final String getLoc() ...{
        return loc;
    }
    public final String getNewaccountcaptcha() ...{
        return newaccountcaptcha;
    }
    public final String getPasswd() ...{
        return Passwd;
    }
    public final String getPasswdAgain() ...{
        return PasswdAgain;
    }
    public final String getSecondaryEmail() ...{
        return SecondaryEmail;
    }
    public final String getSelection() ...{
        return selection;
    }
    public final void setEmail(String email) ...{
        Email = email;
    }
    public final void setFirstName(String firstName) ...{
        FirstName = firstName;
    }
    public final void setIdentityAnswer(String identityAnswer) ...{
        IdentityAnswer = identityAnswer;
    }
    public final void setLastName(String lastName) ...{
        LastName = lastName;
    }
    public final void setLoc(String loc) ...{
        this.loc = loc;
    }
    public final void setNewaccountcaptcha(String newaccountcaptcha) ...{
        this.newaccountcaptcha = newaccountcaptcha;
    }
    public final void setPasswd(String passwd) ...{
        Passwd = passwd;
    }
    public final void setPasswdAgain(String passwdAgain) ...{
        PasswdAgain = passwdAgain;
    }
    public final void setSecondaryEmail(String secondaryEmail) ...{
        SecondaryEmail = secondaryEmail;
    }
    public final void setSelection(String selection) ...{
        this.selection = selection;
    }
  
    
    public static final Member getDefaultMember()...{
        
        return new Member();
    }
}

 

 

package org.job.four;

import java.io.IOException;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.job.util.Logger;

/** *//**
 * <b>类名:AutoRegistGmail.java</b> </br> 
 * 编写日期: 2007-3-27 <br/>
 * 程序功能描述:对Gami自动注册的启动类 <br/>
 * 注册原理实现是,封装一些gmail比填的字段,然后再通过HttpClient向Gmail请求,
 * 请求完毕后分析结果
 * Demo: <br/>
 * Bug: <br/>
 * 
 * 程序变更日期 :<br/> 
 * 变更作者 :<br/> 
 * 变更说明 :<br/>
 * 
 * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
 */
public class AutoRegistGmail ...{

 

    private static String postRegistUrl = "https://www.google.com/accounts/NewAccount";

    private static Logger logger = Logger.getLogger(AutoRegistGmail.class);

    public static void main(String[] args) ...{
        autoRegist();
    }

    public final static void autoRegist() ...{
        logger.debug("开始自动注册Gmail.....");
    
        //        构造HttpClient的实例
        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod(postRegistUrl);
        Member member = Member.getDefaultMember();
        
        //             填入各个表单域的值
        NameValuePair[] data = ...{
                new NameValuePair("Email", member.getEmail()),
                new NameValuePair("Passwd", member.getPasswd()),
                new NameValuePair("PasswdAgain", member.getPasswdAgain()),
                new NameValuePair("FirstName", member.getFirstName()),
                new NameValuePair("Loc", member.getLoc()),
                new NameValuePair("newaccountcaptcha", member
                        .getIdentityAnswer()),
                new NameValuePair("IdentityAnswer", member
                        .getNewaccountcaptcha()),
                new NameValuePair("Selection", member.getSelection()),
                new NameValuePair("SecondaryEmail", member.getSecondaryEmail()),
                new NameValuePair("continue", member.getContinue()),
                new NameValuePair("dsh", member.getDsh()),
                new NameValuePair("service", member.getService()) };

        //             将表单的值放入postMethod中
        postMethod.setRequestBody(data);
        try ...{
            //执行getMethod
            int statusCode = httpClient.executeMethod(postMethod);
            if (statusCode != HttpStatus.SC_OK) ...{
                System.err.println("Method failed: "
                        + postMethod.getStatusLine());
            }
            //读取内容 
            byte[] responseBody = postMethod.getResponseBody();
            //处理内容
            System.out.println(new String(responseBody, "UTF-8"));
        } catch (HttpException e) ...{
            //发生致命的异常,可能是协议不对或者返回的内容有问题
            System.out.println("Please check your provided http address!");
            e.printStackTrace();
        } catch (IOException e) ...{
            //发生网络异常
            e.printStackTrace();
        } finally ...{
            //释放连接
            postMethod.releaseConnection();
        }

    }
}



爬虫工作室 -- 专业的手机软件开发工作室
3G视线 -- 专注手机软件开发
posted on 2007-04-04 12:42 3G工作室 阅读(2844) 评论(8)  编辑  收藏 所属分类: j2ee

Feedback

# re: 自动注册gmail邮箱构想 2007-04-04 13:58 aaa
写了等于白写吧,核心的问题没解决。把那些 getter 与 setter、变量的定义去掉,没几行代码了。  回复  更多评论
  

# re: 自动注册gmail邮箱构想[未登录] 2007-04-04 14:08 samuel
就是!说的没错  回复  更多评论
  

# re: 自动注册gmail邮箱构想 2007-04-04 14:21 yuri
解决验证码,其他的都不是问题  回复  更多评论
  

# re: 自动注册gmail邮箱构想 2007-04-04 14:53 爬虫工作室
哈哈。我觉得我是没这本事了,各位大哥有办法,
教教我行吗?  回复  更多评论
  

# re: 自动注册gmail邮箱构想 2007-04-04 18:17 liulc
构想倒是不错  回复  更多评论
  

# re: 自动注册gmail邮箱构想 2007-04-05 08:53 aaa
来破解blogjava的验证码吧,是保存在cookie里面的  回复  更多评论
  

# re: 自动注册gmail邮箱构想 2008-07-18 10:08 ubunto
虽然没提到解决验证码,不过对 httpclient 的 post和get 方法的使用流程有了更好的理解  回复  更多评论
  

# re: 自动注册gmail邮箱构想 2012-09-25 17:17 姜英祺
请问楼主,自动注册时有一个bgresponse字段您是怎么获取到的?  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: