TA的每日心情 | 开心 2024-12-9 18:45 |
---|
签到天数: 124 天 [LV.7]常住居民III
|
欢迎您注册加入!这里有您将更精采!
您需要 登录 才可以下载或查看,没有账号?注册
x
讲这节之前先讲讲农场,QQ农场分为QQ校友农场和QQ空间农场,两个农场的农场数据是关联的(共用同一份数据),但两个农场之间的好友是不同的,也就是说在QQ校友农场里看不到QQ空间农场里的好友,同理QQ空间农场的好友列表里也看不到QQ校友农场里的好友。除些之外两个农场的数据都是共用的,也就是说你的QQ空间农场是怎么样的,在QQ校友农场里也是怎么样的,反之亦然。在我这里的文章中,所有数据都是从QQ校友登陆农场抓包而得的数据(有特别说明的除外)。
再谈谈开发农场辅助的流程,1、分析QQ登陆密码的加密方法得到密文 2、读取QQ服务器上的验证码 3、使用QQ密码密文、QQ号、验证码登陆QQ服务器 4、登陆QQ校友 5、登陆QQ农场并读取自己的农场数据 6、读取好友列表 8、对好友的农场进行操作 好了,就这么多了,有个大整体的印象了吧,下面开始第一步的工作了哦。
呵呵,接下来呀,咱来分析QQ密码的加密方法。这节里呢,咱要做的就是把http://xiaoyou.qq.com这张页面保存到本地。这都不会??(就是在IE地址栏上输入http://xiaoyou.qq.com当页面完全打开后,单击IE菜单栏上的 文件->另存为 选择个文件夹保存就行了)。
好了,页面保存到本地了,咱找到 “ QQ校友.files” 文件夹下的 “login.htm” 这个文件,用记事本打开这个文件。文件代码我就不贴出来了,下面贴出一些要用到的代码哈。
注意,login.htm文件的代码格式不是规范的, 我们可以把代码复制到http://tool.chinaz.com/Tools/JsFormat.aspx这个网站进行格式化一下,这样看起来就舒服些了,呵呵
<SCRIPT language=javascript src="login.files/comm.js">
有这样一句哦,知道什么意思吧,就是表示调用了login.files文件夹下的comm.js这个脚本文件啦
下面一段是数据的提交方法,在这段代码里可以看到数据提交到哪里去了。
<FORM id=loginform style="MARGIN: 0px" name=loginform
action=http://ptlogin2.qq.com/login
method=post target=_self autocomplete="off">
<UL>
<LI>
<SPAN>
<U id=label_uin>
</U>
</SPAN>
<INPUT class=inputstyle id=u
style="IME-MODE: disabled; COLOR: #cccccc"
tabIndex=1 name=u>
<LABEL>
<A id=label_newreg tabIndex=7 href="http://xiaoyou.qq.com/emailreg.html"
target=_top>
</A>
</LABEL>
<LI>
<SPAN>
<U id=label_pwd>
</U>
</SPAN>
<INPUT class=inputstyle id=p tabIndex=2 type=password maxLength=16 name=p>
<LABEL>
<A id=label_forget_pwd onclick=onClickForgetPwd() tabIndex=8 href="http://ptlogin2.qq.com/ptui_forgetpwd"
target=_top>
</A>
</LABEL>
<LI>
<SPAN for="code">
<U id=label_vcode>
</U>
</SPAN>
<INPUT class=inputstyle id=verifycode style="IME-MODE: disabled" tabIndex=3
maxLength=4 name=verifycode>
<LI id=verifytip>
<SPAN>
</SPAN>
<U id=label_vcode_tip>
</U>
<LI>
<SPAN for="pic">
</SPAN>
<SCRIPT type=text/javascript>
document.write("<img id=imgVerify width='130' height='53' src='http://ptlogin2.qq.com/getimage?aid=15000102&", Math.random(), "' onload='ptui_setSpeed(3)'>");
</SCRIPT>
<LABEL>
<A id=changeimg_link tabIndex=6>
</A>
</LABEL>
</LI>
</UL>
<DIV class=login_button>
<INPUT class=btn id=login_button disabled tabIndex=5 type=submit>
</DIV>
<DIV class=lineright>
<A id=label_switch_qlogin href="javascript:switchPage(false,%20true)">
</A>
</DIV>
<INPUT type=hidden value=15000102 name=aid>
<INPUT type=hidden value=http://xiaoyou.qq.com/index.php?mod=login&adtag=from_index
name=u1>
<INPUT type=hidden name=fp>
<INPUT type=hidden value=1 name=h>
<INPUT type=hidden value=1 name=ptredirect>
<INPUT type=hidden value=0 name=ptlang>
<INPUT type=hidden value=1 name=from_ui>
<INPUT type=hidden name=dumy>
</FORM>
呵呵,看到红色部份没?数据提交时把数据传到了一个叫ptui_onLoginEx 的函数里进行处理。好,下面我们找到这个函数看到底是怎么处理数据的。
这个函数在login.htm页面内没有定义,那一定是在comm.js这个文件里了,记事本打开comm.js这个文件,查找下ptui_onLoginEx,呵呵看到了吧。函数找到了。(comm.js的代码格式也是不规范的,也可以把代码复制到上面提到的那个网站上去格式化一下)
function ptui_onLoginEx(B, C) {
if (ptui_onLogin(B)) {
var A = new Date();
A.setHours(A.getHours() + 24 * 30);
setCookie("ptui_loginuin", B.u.value, A, "/", "ui.ptlogin2." + C);
return true
}
return false
}
在这里可以看到又调用了ptui_onLogin 这个函数,嘿嘿,一直追踪下去吧,接下来查找一下ptui_onLogin 这个函数,老规矩搜索一下很快就可以找到这个函数,代码如下:
function ptui_onLogin(A) {
try {
if (parent.ptlogin2_onLogin) {
if (!parent.ptlogin2_onLogin()) {
return false
}
}
if (parent.ptlogin2_onLoginEx) {
var D = A.u.value;
var B = A.verifycode.value;
if (ptui_str(STR_UINTIP) == D) {
D = ""
}
if (!parent.ptlogin2_onLoginEx(D, B)) {
return false
}
}
} catch(C) {}
return ptui_checkValidate(A)
}
别的代码不要管咯,主要是验证输入的信息是否合法,与加密无关,我们主要看看红色部分的函数,很明显数据又被搞到ptui_checkValidate
这个函数里去了,要有耐心啊,继续追下去,搜索下ptui_checkValidate 呵呵,函数又找到了,代码如下:
function ptui_checkValidate(B) {
var A = B.u;
var C = B.p;
var D = B.verifycode;
if (A.value == "" || ptui_str(STR_UINTIP) == A.value) {
alert(ptui_str(STR_NO_UIN));
A.focus();
return false
}
if (C.value == "") {
alert(ptui_str(STR_NO_PWD));
C.focus();
return false
}
if (D.value == "") {
alert(ptui_str(STR_NO_VCODE));
D.focus();
return false
}
A.value = ptui_trim(A.value);
if (!ptui_checkQQUin(A.value)) {
alert(ptui_str(STR_INV_UIN));
A.focus();
A.select();
return false
}
if (D.value.length != 4) {
alert(ptui_str(STR_INV_VCODE));
D.focus();
D.select();
return false
}
C.setAttribute("maxlength", "32");
preprocess(B);
return true
}
呵呵,老规矩,别的代码都不管,一看就是知道是做验证,从这里可以看出QQ的验证功能还真强哦。接着找preprocess(B)这个函数吧,下面是这个函数的代码:
function preprocess(A){
var B = "";
B += A.verifycode.value;
B = B.toUpperCase();
A.p.value = md5(md5_3(A.p.value) + B);
return true
}
嘿嘿,你是不是想说又调用了md5这个函数,又要跟下去呀,哈哈,不用的啦,到这里就可以了,看这句代码“A.p.value = md5(md5_3(A.p.value) + B);
”知道干什么了吧,是把咱的明文密码进行了 三次MD5加密然后结合验证码再进行了一次MD5加密 。真相终于出来了。
呵呵,到此我们知道了密码的加密方式了。 |
|