吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17655|回复: 23
收起左侧

[Java 转载] 网易自动注册工具 + 源码

[复制链接]
Crawley 发表于 2015-2-12 13:00
近些天闲来无事,手贱进入网易注册界面,萌发写一个自动注册工具来注册网页,省去繁琐的注册流程(鄙人有朋友业余从事似于刷信誉,刷注册量的工作,赚点小外快),由于部分工具类过于庞大,另外也关乎公司部分利益,固已对工具类做出修整,望各位童鞋见谅。也请大神绕道---
链接: http://pan.baidu.com/s/1qWsiDJm 密码: 126o

使用的是httpClient + jsoup

下面着重介绍程序原理:
domain : http://reg.163.com/reg/reg.jsp?product=urs

注册界面的form表单

注册界面的form表单

经过分析,由于我们只是要注册,固对于我们来说,要首先分析主界面注册时发送的请求和所携带的参数
捕获1.PNG
在图中可见此链接最为可疑,时候先为post请求,仔细观察发现重要信息username_r为用户名,password和cpassword是密码和重复输入的第二次密码。但其中还有codez这个参数经过多册尝试,发现其不是固定值,而且radomPassId根据名字可知,其很有可能是随机数。一般为了省事,这些参数就算很难捕获,但是懒人都喜欢放到form表单中跟表单一起提交,先试试这个方法吧,我们继续定位form表单
捕获2.PNG
果然一击命中,发现此处有很多type属性值为hidden的input标签,比对后参数基本都在这里,而且基本全都有id属性(真是懒到家了)。如果真的是在本地随机生成的也就好说了,但是我们发现当输入验证码的时候codez是有一定的算法的,而radomPassId这个东西是不是本地生成的还不好说,现在只有翻查他们的js文件了,由于这几个参数都是有id属性的,因此先从id查起,首先查看网页源码,查找script标签中含有src属性的标签
捕获3.PNG
直接点击链接进入,先从codez查起,进入js界面直接查找#codez或者codez
/js2/reg/checkForm.js?20150210100此界面出现5个可以结果
捕获4.PNG
解读此js片段,得知,此codez获取过程中用可能出现异常,异常后codez的值默认为NULL。也就说明codez可以是NULL(太懒了太懒了)也从另一方面证明codez可以直接携带NULL值直接传给服务器,至此codez值已确定为NULL。
下面开始查找另一个不确定参数radomPassID,通过表单得知此标签id为syscheckcode,开始在js中查找syscheckcode字眼,终于在/js2/common.js?20150210100中找到通过id操作此标签的js片段,经过解读,发现此处不应截图,应放出源码(看过以后有些童鞋应该会很高兴)

(function(window,$,Core,undefined){        var document = window.document, easyNav = window.easyNav,        setTimeout = window.setTimeout, clearTimeout = window.clearTimeout;$.extend(Core,{                config : {                iptFocClassName : "u-ipt-foc",                hideClassName : "f-dn",                tipsWarnClassName : "u-tips-warn",                tipsOkClassName : "u-tips-ok",                tipsErrClassName : "u-tips-err"        },                //验证码,返回一个对象,包含变换验证码的方法change        checkCode : function(codeLen){                var obj = {},                        v = (new Date().getTime()),                        getIdUrl = "/services/getid",                        getImgUrl = "/services/getimg?v="+v+"&id=",                        changeCodeCallback = function(res){                                $('#syscheckcode').attr('value',res);                                $('#checkCode').attr('src',getImgUrl+res);                        };                if(codeLen){                        getIdUrl = "//reg.163.com/services/getid";                        getImgUrl = "//reg.163.com/services/getimg?v="+v+"&num="+codeLen+"&type=2&id=";                }                                var changeCode = function(){                        $.ajax({                                type:"GET",                                url:getIdUrl,                                success:changeCodeCallback                                           });                        }                changeCode();                $(".m-ipt-code .u-btn-img-code,#checkCode").click(function(){                        changeCode();                });                obj.change = changeCode;                return obj;        },                /* 此函数用于发送邮件 */        sendEmail : function(retakeMethod, callback){                $.ajax({                        url: "/resetpwd/sendMailForUser.do?retakeMethod="+retakeMethod,                        //url:"/ftl/testData2/reg/resendActivateMail.txt",                        success : function(data){                                if(typeof callback !== "function"){return;}                                var data = data.replace("\n",""),                                rtObj = {code:data, msg:""};                                if(data === "200"){                                        rtObj.msg = "邮件发送成功,马上去邮箱看看!";                                }else if(data === "500"){                                        rtObj.msg = "邮件发送失败,系统维护,请稍后再试!";                                        }else if(data === "501"){                                        rtObj.msg = "邮件发送失败,超时!";                                }else if(data === "502"){                                        rtObj.msg = "邮件发送失败,参数错误!";                                }else if(data === "503"){                                        rtObj.msg = "邮件发送失败,尝试次数过多!";                                }else if(data === "504"){                                        rtObj.msg = "邮件发送失败,用户帐号已经锁定!";                                }else{                                        rtObj.msg = "系统错误!";                                        }                                callback(rtObj);                                }                });        },                /* 此函数用于向手机发送验证码         * opts.mobile string 手机号码         * opts.channel string         * opts.okHandler function 成功后回调         * opts.tooMuchHandler function 发送过于频繁的回调         * opts.errHandler function 系统错误的回调         */        sendMessage : function(opts){                var href = window.location.href,                        protocol = "http";                if(href.indexOf("https") === 0){                        protocol = "https";                };                                var opts = $.extend({}, opts);                $.ajax({                        type:"POST",                        async:false,                        url:protocol + "://reg.163.com/services/sendsms",                        data:{username:opts.mobile, channel:opts.channel},                        success:function(msg){                                if(msg === '200\n'){                                        if(typeof opts.okHandler === "function"){                                                opts.okHandler();                                        }                                }                                else if(msg == '501\n'){                                        if(typeof opts.tooMuchHandler === "function"){                                                opts.tooMuchHandler();                                        }                                }                                else{                                        if(typeof opts.errHandler === "function"){                                                opts.errHandler();                                        }                                }                        }                });                   },                //公用业务代码,在各页面的myInit里面执行        commonInit : function(){                                //输入框焦点处理                $(".u-ipt input").focus(function(){                        var $uIpt = $(this).parents(".u-ipt");                        if(!$uIpt.hasClass(Core.config.iptFocClassName)){                                $uIpt.addClass(Core.config.iptFocClassName);                        }                }).blur(function(){                        var $uIpt = $(this).parents(".u-ipt");                        $uIpt.removeClass(Core.config.iptFocClassName);                });                                //placeholder                var $ipts = $(".u-ipt input");                $ipts.length && $ipts.placeholder();                                // 广告close按钮                $(".m-adv .u-advClose").click(function(){                        $(this).parents(".m-adv").hide();                });        },})(window,jQuery,Core);
这其中不光包括我们需要的参数生成方式,还包括一些其他的东西(验证码来一发--邮箱/手机任意发嘿嘿),经过解读我们得知此处的radomPassID确实是从服务器取得,那么就是通过/services/getid,这个链接取得的值,计算绝对链接地址为http://reg.163.com/services/getid,然后请求验证码是需要携带此参数的,并且一并发送到后台。固至此需要的技术已基本确定,推测后得知,此处无需让爬虫爬取注册界面,可直接先获取验证码,下载到本地,然后直接向服务器发送注册的post请求,将参数携带过去即可。但是从另一方面考虑,如果直接向服务器发送请求验证码的请求,虽然可以请求到,但是当你将参数发送给服务器时,服务器怎样判断你的验证码就是服务器发送给你的主机的验证码呢?(很绕口啊,本人表达能力有限请各位童鞋细细品味)所以此处本人又对连接池进行了配置及装入了Cookie工厂,以备各各连接间可以共享Cookie。
好了,大致实现思路就是如此,程序还有很多不足之处,还请大家多多指正,多多批评,程序入口处使用了用户名随机生成,密码除去了用户名的数字及字母之外的字符,可自由整改(加入代{过}{滤}理及多线程更爽哦)

免费评分

参与人数 1热心值 +1 收起 理由
牵手的幸福~ + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Crawley 发表于 2015-2-12 13:25
一笑哥哥 发表于 2015-2-12 13:21
codez这个是网易的验证吗

no,经过查探,是绑定的网页验证码输入框的一个事件,当失去光标时,会结合用户输入的验证码进行一些js计算,由于我发现他的codez可以是NULL,所以就不去再埋头在解读js里边,直接向后台携带NULL值即可,如果您有兴趣,可以自己解读一些那段js,看一下codez的生成规律
 楼主| Crawley 发表于 2015-2-12 22:12
额,小弟不明白何为免码。只能说此爬虫程序只是使用java编写的一个自动注册工具。对于有用的童鞋,那就直接拿下来用,没用的童鞋可以着重看程序的实现思路。如果还是觉得没用,那只能说这段程序是真的没用了,还请大神绕道
吓一跳 发表于 2015-2-12 13:10
6967632632 发表于 2015-2-12 13:37
菜鸟表示看不懂 呵呵。
 楼主| Crawley 发表于 2015-2-12 13:40
6967632632 发表于 2015-2-12 13:37
菜鸟表示看不懂 呵呵。

属于爬虫类工具,使用java实现
ac9601 发表于 2015-2-12 16:02
纯菜鸟,明白意思,但就是做不来,还是乖乖打基础去了。
854189523 发表于 2015-2-12 16:05
汇编不易,多多支持
 楼主| Crawley 发表于 2015-2-12 16:07
854189523 发表于 2015-2-12 16:05
汇编不易,多多支持

不好意思,不是汇编写的
 楼主| Crawley 发表于 2015-2-12 13:19

额....好吧
一笑哥哥 发表于 2015-2-12 13:21
codez这个是网易的验证吗
头像被屏蔽
_小渣渣 发表于 2015-2-12 13:27
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| Crawley 发表于 2015-2-12 13:31

额,可能是的
caoqianjin 发表于 2015-2-12 13:32
很喜欢,我觉得有好多的分享才能进步
375505211 发表于 2015-2-12 13:33
软件呢-。-
 楼主| Crawley 发表于 2015-2-12 13:35

只有源码

点评

生成软件吧。  发表于 2015-2-12 13:40
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-9 10:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表