admin 发表于 2009-12-18 13:40:46

C#网页辅助制作 第二节 登陆密码的加密方法

讲这节之前先讲讲农场,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加密 。真相终于出来了。
      呵呵,到此我们知道了密码的加密方式了。

abs123 发表于 2009-12-24 21:48:48

看看,flash游戏

failure 发表于 2010-3-21 19:38:58

goooooooood

ftfaisq 发表于 2010-3-26 17:06:26

flash游戏 。。我这个新手不知道从哪里入手

kinglife 发表于 2010-4-6 18:48:35

gooooooooood

yang5209050 发表于 2010-4-14 21:36:28

谢谢LZ:loveliness:

a434446384 发表于 2010-4-21 23:09:07

fdgbdfbndfhbdfhg

qhgame 发表于 2010-4-27 20:55:36

好是好,可惜我不懂C

hotool 发表于 2010-4-30 23:00:25

:)谢谢LZ ```

demo235 发表于 2010-5-2 15:19:25

第一篇写的有点简单了。看看这个怎么样。

angel888 发表于 2010-5-10 10:48:52

:loveliness: ...收来看看啥样!!

loveaaddyy 发表于 2010-5-10 12:10:16

dddddddddddddddddddd

huo2010shu 发表于 2010-5-24 11:43:12

回复 1# admin


    支持.呵呵.

501310440 发表于 2010-5-31 22:39:19

学习啊,呵呵

电脑白菜 发表于 2010-6-2 15:42:48

回复看看。
页: [1] 2 3
查看完整版本: C#网页辅助制作 第二节 登陆密码的加密方法