刚刚发现腾讯修改了校友网(朋友网)登陆页面的代码,把登陆窗口的地址藏在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.onload=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。
分享到:
相关推荐
【标题】:“用JAVA语言编写:山寨版QQ课程设计报告” 【描述】:“用JAVA编写的QQ聊天工具!有流程图 还有图形界面” 【标签】:“山寨QQ” 【正文】: 本课程设计旨在实现一个基于JAVA的即时通讯工具,模仿QQ...
** 3) 增加 SendData 与 RecvData 方法 ** ************************************************************************************ ** author:liquanhai date:2011-11-04 ** 改进 ** 1)增加 ClosePort中交出...
【VB Post登陆网页Web QQ】 VB(Visual Basic)是一种由微软公司开发的编程环境,用于创建Windows应用程序。在本主题中,“VB Post登陆网页Web QQ”指的是使用VB编写程序,通过HTTP POST请求来实现对Web QQ的登录。...
【标题】"高仿真QQ登陆界面 ---基于MFC"是一个使用Microsoft Foundation Classes (MFC)库开发的项目,旨在创建一个与腾讯QQ登录界面高度相似的用户界面。MFC是微软提供的一套C++类库,它封装了Windows API,使得...
根据提供的文件信息,我们可以分析出这是一段使用Visual Basic(简称VB)编写的代码,用于实现QQ自动发送消息的功能。这段代码主要通过Windows API函数来模拟用户操作,从而实现自动化功能。下面将对代码中的各个...
【仿QQ登陆界面设计详解】 在IT行业中,用户界面(UI)的设计至关重要,因为它直接影响到用户的体验和产品的吸引力。QQ作为中国最受欢迎的即时通讯软件之一,其登录界面早已深入人心。仿QQ登录界面的设计,旨在模仿...
QQ邮箱提供了SMTP服务器,允许用户通过编程方式发送邮件。在ThinkPHP中,这通常会涉及到使用PHP的`mail`函数或者第三方库如PHPMailer或SwiftMailer。 以下是实现这一功能的基本步骤: 1. **配置SMTP设置**:在...
QQ信息发送是一个与即时通讯相关的主题,主要集中在使用易语言这一编程工具来实现QQ消息的发送功能。易语言是一种简洁明了、易于学习的中文编程语言,它为开发者提供了丰富的库函数和模块,使得初学者也能快速上手...
Java编写QQ聊天工具是一款基于Java技术实现的即时通讯软件,主要功能是实现用户之间的私聊。对于初学者来说,这是一个很好的学习项目,因为它涵盖了Java编程基础、网络通信、多线程以及用户界面设计等多个核心知识点...
**VB编写的模拟QQ登陆程序** Visual Basic(VB)是一种基于事件驱动的编程语言,由Microsoft开发,适用于创建图形用户界面(GUI)应用程序。在这个特定的项目中,“VB编写的模拟QQ登陆程序”是一个用于教学目的的...
从零开始学Spring Boot,没有积分的可以看博客:http://412887952-qq-com.iteye.com/ 【Spring Boot 系列博客】 0)前言【从零开始学Spring Boot】 : http://412887952-qq-com.iteye.com/blog/2291496 (1...
在其它编程语言(如ASP)编写的网页文件中均调用显示客服小面板, 参考以上说明或访问闻泰论坛提问. 2. 直接在页面中插入客服图片(固定): ------------------------------------ 在需要显示WeLive在线客服系统...
在实现QQ网页POST登录时,我们需要利用这个模块的功能,构建一个请求,将登录信息以POST方式提交到QQ登录服务器。 具体步骤如下: 1. **创建HTTP连接**:使用彗星HTTP应用模块提供的API,如`创建HTTP客户端`,建立...
**C#语言与QQ程序开发** C#是一种由微软公司推出的面向对象的编程语言,它在.NET框架下运行,被广泛应用于Windows桌面应用、Web应用以及游戏开发等多个领域。本项目是一个使用C#编写的仿QQ程序,名为MiniQQ,其主要...
1.该软件可以自动搜索网络上的邮箱,然后自动发送信息给搜索到的邮箱(也可以指定固定的邮箱发送)。 发信效率较高,发信的内容灵活,使您的信息表达的更加全面更加灵活。 2.软件界面清晰,操作简单,使用方便。 该...
最新Java模拟登陆QQ空间【2017-12-22】有效 代码在2017-12-22编写完成并测试通过! 功能: 1.获取QQ空间qzonetoken值 2.构造p参数加密方式getEncryption(QQ密码,QQ账号[16进制标识],验证码,false); 3.获取g_tk算法...
QQ登陆器例程是一个关于计算机编程的实例,主要聚焦于使用易语言开发QQ登录功能的代码。易语言是一种中文编程语言,旨在降低编程难度,让更多人能够参与到编程中来。这个压缩包包含了一个QQ登陆器的源代码,是学习...
网页调用QQ是一种常见的在线交互方式,特别是在电商、服务型网站和社交网络中,它能够方便用户快速与客服或朋友进行沟通。本教程将详细讲解如何在网页中实现调用QQ的功能,包括多种样式的应用以及如何嵌入分享和调用...
QQ网页POST登陆是一个关于网络编程和安全的主题,主要涉及到的是如何使用POST方法进行网页登录,尤其是针对QQ这种大型社交平台的登录实现。在这一主题中,我们主要关注以下几个关键知识点: 1. **HTTP协议与POST...