刚刚发现腾讯修改了校友网(朋友网)登陆页面的代码,把登陆窗口的地址藏在js文件中去了,因此上篇文章中讲的部分东西就过时了,但是思路还是这个思路,我还是用别的办法找到了所需的信息,大家按照我的思路好好看看javascript代码,待会我还是会告诉大家如何找到发送的完整URL。

上一篇文章分析了腾讯校友登陆页面的JavaScript代码,掌握了登陆所需的足够信息,其实信息掌握的并不全,我疏忽了,细心的朋友肯定会问:“现在才知道密码的处理方式,我们是不是还不知道用户名和密码的发送方式?”是的,我们需要向服务器发送一个完整的URL,现在我们不知道URL是怎么组成的,就无法向服务器发送登陆请求。

下面我们就说如何找到腾讯家的URL。

第一步还是像上篇文章那样,找到文件comm.js,由于腾讯改了js的代码,所以我还是说一下新的方法好了。

我们先来到朋友网登陆首页www.pengyou.com,用浏览器查看本页源文件,发现不能像以前那样找到iframe的地址了,本页有关iframe的代码如下:

<iframe scrolling="no" id="j_loginFrame" name="login_frame"

src="about:blank" width="356" height="138" frameborder="0"

scrolling="no"allowTransparency="true" style="margin-top:30px;">

iframe的src那里是"about:blank"。

仔细查看该页的源文件,可以发现如下三行:

<script type="text/javascript" src="http://qzonestyle.gtimg.cn/campus/js/Mcommontmp.js">\<\/script>\<script type="text/javascript" src="http://qzonestyle.gtimg.cn/bailing/js/BMcommon.js">\<\/script>\<script type="text/javascript" src="http://qzonestyle.gtimg.cn/bailing/js/BMindexLogin.js">\<\/script>

这三个js文件一定有内容,下载下来看看。

先看BMindexLogin.js,发现里面有个initLogin()的函数,

function initLogin() {
 var ptlogin_base_domain=DOMAINS.ROOT;
 //qq.com
var ptlogin='http://ui.ptlogin2.'+ptlogin_base_domain+'/cgi-bin/login?appid=15004601&qlogin_jumpname=&hide_title_bar=1&s_url=http://'+DOMAINS.MAIN+'/index.php%3fmod%3Dlogin2%26act%3Dqqlogin&self_regurl=http://'+DOMAINS.REG+'/emailreg.html&css=http://'+DOMAINS.MAIN+'/asset/login.css'; var set_username_label=function () {
  try
  {
   window.frames['login_frame'].document.getElementById('label_uin').innerHTML='Email/QQ帐号:';
   window.frames['login_frame'].document.getElementById('label_pwd').innerHTML='密码:';
  }
  catch(e)
  {
  }
 };
var iframe=document.getElementById('j_loginFrame');
 iframe.src=ptlogin;
 if(iframe.attachEvent) {
  iframe.attachEvent("onload",set_username_label);
 }else {
  iframe.οnlοad=set_username_label;
 }
 var query=window.location.search;
 if(query&&query.length>10&&query.indexOf('act=logout')==-1&&query.indexOf('mod=login')==-1) {
  var m=query.match(/\?([^&]{
   10,200
  })/);
  if(m) {
   var ref=unescape(m[1]);
   if(ref.indexOf('ref=')===0) {
    ref=ref.substr(4);
   }
   ref=ref.replace(/\&/gi,'%26');
   document.cookie='ref='+ref+';domain='+DOMAINS.COOKIE_DOMAIN;
  }
 }
 else {
  document.cookie='ref=deleted;domain='+DOMAINS.COOKIE_DOMAIN;
 }
 var frag=window.location.hash;
 if(frag&&frag.indexOf('qqreg=1')!=-1) {
  reg_by_qq();
 }
}

红色的字体就是给iframe的src赋值语句,蓝色的字体就是我们要找的iframe的地址了。但仔细一看,这个地址还不能直接复制到地址栏,因为里头有一些DOMAINS.MAIN之类的东西,没事,我们去另两个js文件找,在Mcommontmp.js里,查找DOMAINS,记得区分大小写,因为貌似有很多domains,于是我们找到如下赋值语句:

window.DOMAINS={
   COOKIE_DOMAIN:'pengyou.qq.com',MAIN:'pengyou.qq.com',HOME:'home.pengyou.qq.com',REG:'reg.pengyou.qq.com',FEED:'feed.pengyou.qq.com',APP:'app.pengyou.qq.com',API:'api.pengyou.qq.com',ROOT:'qq.com',IMGCACHE:'qzonestyle.gtimg.cn',OFFICE:'pengyou.qq.com',SHARE:'share.pengyou.qq.com',PROFILE:'profile.pengyou.qq.com'
  };

把这些东西替换到我们之前找到的URL中的相应位置,然后就可以复制到IE地址栏,点击回车,就出现了我们上篇文章中找到的登陆窗口,查看本页源文件,找到<script language="javascript" src="http://imgcache.qq.com/ptlogin/ac/v8/js/comm.js?v=1.2.5"></script>,下载这个js文件。

讲得有点跳跃性,这些都是上篇讲过的东西,所以就没讲得太详细。

找到ajax_submit,里头有这么一句:

C.src=E.action+"?"+B;

一般URL都是xxx+?+参数的格式,因此我们有理由猜测这句就是我们要找的登陆URL。有人会问,里头的E是什么,B又是什么,如果大家仔细看JavaScript文件,就会知道,E就登陆时要提交的表单,B就是登陆时要提交的参数。我们在回到登陆窗口的源文件,不是www.pengyou.com,是我们从js文件中找到的那个,可以在form里看到,action=http://ptlogin2.pengyou.com/login,至于参数,大家就只能在ajax_submit里面根据程序逻辑把参数一个一个的拼起来,没有捷径,除了看我拼好的,我也是一点一点拼的,拼好就是下面这个样子:

"u=" + 您的QQ号 + "&p=" + 您的密码 + "&verifycode=" + 验证码 + "&aid=15004601&u1=http%3A%2F%2Fxiaoyou.qq.com%2Findex.php%3Fmod%3Dlogin%26adtag%3Dfrom_index&h=1&ptredirect=1&ptlang=2052&from_ui=1&dumy=&fp=loginerroralert"

这串是我刚刚拼好的,以后腾讯肯定还要改,大家有空自己拼一下吧,实在懒就算了,我这个暂时还能用。

现在用户名和密码的处理方式和发送方式都知道了,心急的朋友可能会问:“是不是就可以登陆了?”。

答案是不能,因为还要验证码。我们登陆时,有时需要一个验证码,有时又不需要。对于验证码,有种简单的处理方式,就是每次登陆都要求输入,一定不会有错的,就是用起来麻烦点,如果想做得完美点,就可以像腾讯家一样自动检查一下,检查通过就不需要输入了,这样也可以,就是写程序的时候麻烦一点。

好我不啰嗦了,下面就说说腾讯家是如何检查是否需要验证码。

所有都在comm.js里面,有一个ptui_needVC函数,找到这个函数,代码如下:

function ptui_needVC(C,D) {
 if(t_appid==D) {
  if((C.indexOf("@")<0)&&isNaN(C)) {
   C="@"+C
  }
 }var B="";
 if(pt.isHttps) {
  ptui_checkVC("1","");
  return
 }else {
  B="http://ptlogin2."+g_domain+"/check?uin="+C+"&appid="+D+"&r="+Math.random
() }var A=document.createElement("script");
 g_imgTime=new Date();
 A.src=B;
 document.body.appendChild(A);
 g_loadcheck=true;
 return
}

红色的字就是URL了,这个比较直观,不用拼参数了,g_domain可以在登陆窗口的页面源文件中找到,

var g_domain = "pengyou.com"

C就是QQ帐号,D也可以在登录窗口的页面源文件中找到,

var g_appid = 15004601

Math.random()是JavaScript本身的一个函数,函数功能是取0到1之间的一个随机数。

把以上内容嵌进去就是检查是否需要验证码的URL了。

如果需要验证码的话,还需要获取验证码的图片,获取方法都可以在comm.js中找到。找到函数loadVC,函数如下:

function loadVC(A) {
 if(isLoadVC==A&&(lastUin==g_uin)) {
  return
 }lastUin=g_uin;
 isLoadVC=A;
 if(A==true) {
  var B=$("imgVerify");
  var F=g_uin;
  if((g_appid==t_appid)&&isNaN(g_uin)&&(g_uin.indexOf("@")<0)) {
   F="@"+g_uin
  }var E="/getimage?aid="+g_appid+"&r="+Math.random()+"&uin="+F;
  if(g_https) {
   E="."+E
  }else {
  E="http://captcha."+g_domain+E+"&vc_type="+vc_type
  }var D=new Date();
  B.src=E;
  $("verifyinput").style.display="";
  $("verifytip").style.display="";
  $("verifyshow").style.display="";
  ptui_notifySize("login");
  try{
   $("p").focus()
  }catch(C) {
  }
 }else {
  $("verifyinput").style.display="none";
  $("verifytip").style.display="none";
  $("verifyshow").style.display="none";
  ptui_notifySize("login");
  try{
   $("p").focus()
  }catch(C) {
  }
 }

红色的字就是获取的URL了,g_domain前面讲过是pengyou.com,至于vc_type,是由ptui_needVC函数返回的,其实也可以不附加vc_type,整个URL拼起来就像这个样子:"http://captcha.pengyou.com/getimage?aid="+g_appid+"&r="+Math.random()+"&uin="+您的QQ号+"&vc_type="+vc_Type

g_appid和Math.random()上面都说过是什么,大家找找吧,我每次都说一遍好累啊。

好了,验证码也知道怎么检查和获取了,至此,JavaScript全部分析完了,上篇也说分析完了,哈哈,不过这次是真的啦,下篇进入实战部分了,是不是好激动的?我会先告诉大家使用一个工具,非常给力的网络抓包工具—Wireshark。

网页游戏外挂的设计与编写:QQ摩天大楼【三】(登陆准备-信息发送方式)相关推荐

  1. 网页游戏外挂的设计与编写:QQ摩天大楼【一】(基本技术)

    http://ouyangjia7.iteye.com/blog/674834 网页游戏外挂的编写很简单,不需要研究其源代码,不需要懂得汇编知识,只需要分析发送到服务器和服务器发送到本地的数据包就可以 ...

  2. 游戏原画设计HTML5模板是一款适合网页游戏原画设计作品展示的HTML5网站模板。

    游戏原画设计HTML5模板是一款适合网页游戏原画设计作品展示的HTML5网站模板.不仅仅是首页,二级页面,三级页面,登陆,购物车等,页面齐全 功能齐全  js+css+html (img,字体均有), ...

  3. 游戏外挂设计技术探讨

    一. 前言 所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作.修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将.虽然,现在对游戏外挂程 ...

  4. 游戏外挂设计技术探讨(上)

    作者:周毅       一. 前言 所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作.修改游戏网络数据 包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩 ...

  5. 游戏外挂的编写原理和思路

    游戏外挂的编写原理(一) 一. 前言 所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作.修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩 ...

  6. 《C#网络编程高级篇之网页游戏辅助程序设计(扫描版)》

    <C#网络编程高级篇之网页游戏辅助程序设计>通过编写C#网络编程语言中具有代表性的实例,向读者深入细致地讲解了如何利用C#语言进行网页游戏辅助程序设计.本书通过大量的代码引导读者一步步学习 ...

  7. [转载]游戏外挂原理

    最近同学在折腾外挂 我也就把这篇发上来吧 以前的文章了 也不知道那里来的了..... 1.游戏外挂的原理 外挂现在分为好多种,比如模拟键盘的,鼠标的,修改数据包的,还有修改本地内存的,但好像没有修改服 ...

  8. 服务器拒绝了您发送离线文件的请求,qq提示服务器拒绝了您发送离线文件解决办法...

    qq离线发送文件的功能很好,无需好友在线即可给好友发送文件,最近有朋友在给好友发送离线文件的时候出现了拒绝发送的提示,来请教笔者怎么解决,今天笔者就这个问题的解决方法分享给大家,希望能对大家有所帮助. ...

  9. 游戏外挂的基本编写原理

    游戏外挂的基本编写原理 Posted on 2005年9月17日 23:40 游戏外挂的基本编写原理 本文主要是针对开发游戏外挂程序后期使用的程序开发技术进行探讨,重点介绍的 如下几种在游戏外挂中常使 ...

  10. 编写贩卖《和平精英》游戏外挂,5人被判刑;苹果推出轻App码;Firefox 84.0发布|极客头条...

    整理 | 郑丽媛 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「 ...

最新文章

  1. HTMLDOM中三种元素节点、属性节点、文本节点的测试案例
  2. 关于计算机组装的作文,电脑小白组装电脑,能写出这样的配置,在下佩服!
  3. 什么是java?为什么大家都学习java技术?
  4. CompletableFuture详解~runAfterBoth
  5. INNODB表快速迁移
  6. 让所有IE支持HTML5
  7. golang基本语法——变量使用详解
  8. java调用caffe_Caffe中master与windows分支差异对比及通过命令提示符编译Caffe源码操作步骤...
  9. 离线计算框架MapReduce
  10. 网络掩码和子网掩码区别?
  11. Spring - 理解BeanDefinition
  12. 计算机房承重载荷,机房承重标准及承重计算方法
  13. C# Socket通信服务器编写
  14. 【kali-漏洞扫描】(2.1)Nessus下载安装(上)
  15. unity3d-学习笔记19-卡牌游戏制作(战斗胜利界面,点击菜单栏出现其他选项以及对应功能,实现能量卡消耗蓝条)
  16. EXCEL取消科学计数法
  17. 【亲测有效】Ubuntu系统开机速度慢解决办法
  18. 设置网页浏览器标签小图标
  19. 网站/APP 流量分析、点击流分析、用户访问分析
  20. 安装pgsql数据库

热门文章

  1. 暑期计算机数学培训心得体会,实用的暑期培训心得体会3篇
  2. Rendezvous: A Search Engine for Binary Code
  3. 阅兵方阵(蓝桥杯2018真题)
  4. 【Linux】特别篇--GTK界面设计
  5. 第68页的gtk+编程例子——选择菜单
  6. MySQL基础笔记(14)-使用Amoeba和Docker搭建MySQL读写分离架构
  7. Google正式收购SketchUp
  8. 计算机科学与技术 金海,金海华中科技大学履历
  9. 第14章 Proxmox VE桌面虚拟化或桌面云
  10. ubuntu 14.04 更新 flash