对暴力破解带密码的QQ相册的可行性分析 - David'S BLOG

来源:百度文库 编辑:神马文学网 时间:2024/04/29 12:26:38
暴力破解,一般是使用密码字典对目标进行穷举,直到找出正确的密码为止。在网上看到一些暴力破解QQ相册的工具,
而且看代码,并不只是找出form的action那么简单,就自已分析了一下暴力破解QQ相册的方法。
1) 首先,在自已的QQ相册上新建一个带密码的相册。该相册的id/albumid/aid)可以在相册首页,把鼠标移去后在状
态栏显示的类似348a2c82-574b-4f3e-93b7-aee7511456f0这样的字符串就是相册的id/albumid/aid)了,
2) 以匿名方式进行我的相册,http://164576700.photo.qq.com,并点击带密码的相册,弹出输入相册密码和验证码
的对话框,看到这个验证码,我就觉得暴力破解QQ相册的可行性只有50%的可能了,因为如果服务端是必须会验证,
并且是首先判断验证码然后再去验证密码的话,http返回的数据包总是会提示验证码是否正确。希望不要是这种验证
方式。
3) 查看页面源代码,看到中有两个js引用,photo.js和myalbum.js,看名字就知9成有关联,把他们
下载回来。
4) 再跟踪源代码,可以在myalbum.js中找到这个函数checkEnterAlbum(aid,priv);是判断是否可以进入指定相册的
函数。看看它的函数体:aid是相册的id,priv是相册的权限,(priv是1,表示公开,2表示需密码,3表示私人可见)
function checkEnterAlbum(aid,priv){
... ... //省略一些,主要是看带密码的相册
switch(priv) {
case 2: showPasswd();
window.enterPassword = function() {s
var verifycode=$E("input_verifycode")!=null? $E("input_verifycode").value:null;
if(!verifycode||$E("album_passwd").value==""){alert("密码或者验证码不能为空.");
return; }
coverAll("正在处理中,请稍侯...");
loadAlbumCallback(aid,checkCallback,$E("album_passwd").value,verifycode);}
break;
case 1:
case 3: loadAlbumCallback(aid,checkCallback); break;default: go_imc("photoList.html",aid);}
}
// loadAlbumCallback就是回调函数,当priv是2的时候,就会弹出输入相册密码和验证码的对话框。
5) 现在开始跟踪myalbum.js中的loadAlbumCallback(aid,callback,passwd,verifycode,err_callback)函数。
function loadAlbumCallback(aid,callback,passwd,verifycode,err_callback){
... ... // 这些不用怎么去理,
switch(priv){
case 2: url=getUrl("album_view_private")+"&albumid="+aid+"&password="+MD5(passwd)+"&verifycode="+verifycode;
/* 注意看这里,当是带密码的相册的时候,下面的LoadXmlData_Ex会从这个url中取得数据,应该是GEt方式的。
albumid就是相册的id,上面第一步已知是348a2c82-574b-4f3e-93b7-aee7511456f0,
password就是输入密码经md5加密后的32位字串,好在只加密一次。我测试的相册密码是123456
经md5加密后是e10adc3949ba59abbe56e057f20f883e
verifycode就是输入的验证码了。
看来我们又要跟踪getUrl这个函数了。
*/
break;
case 3: url=getUrl("album_view_private")+"&albumid="+aid;
break;
default:
url=getUrl("album_migrated_static",aid);
}
top.g_XDoc["tmp_album"]=null;/*@ _debug("Get Album Url:"+url); @*/
var err_call=function(){
loadDynamicAlbum(aid,callback);}
if(priv<=1)
LoadXmlData_Ex("tmp_album",url,dataCallback,err_call);
else
LoadXmlData_Ex("tmp_album",url,dataCallback);
}
... ... //
}
6) 现在开始跟踪myalbum.js中的getUrl(type,id),注意case "album_view_private"部份,函数体如下:
function getUrl(type,id){
... ... // 函数体太长,只列出主要的代码
var common_url_nu="http://"+top.g_PhotoUserDomain.nu+"/cgi-bin/common/";
var common_url_r="http://"+top.g_PhotoUserDomain.r+"/cgi-bin/common/";
var common_url_u="http://"+top.g_PhotoUserDomain.u+"/cgi-bin/upload/";
var url;
var domain_suffix="&refer="+(isQzone==true? "qzone":"portal");
switch(type){
... ... // 这里有很多不同的type,主要都是从服务器返回不同的xml数据,各位有兴趣可以研究一下
case "album_view_private":
//注意这个,是取得有密码的相册的数据的地址。
url=common_url_nu+"cgi_view_album?uin="+top.g_iUin+domain_suffix; break;
... ... //
return url;
}
/* common_url_nu 已知知道,还要找出common_url_nu中的top.g_PhotoUserDomain.nu的值,
domain_suffix 可以看成是&refer=portal了。
*/
在myalbum.js中有getUserDomain(callBack,errCallBack)函数,注意函数体:
function getUserDomain(callBack,errCallBack) {
... ... //
u_doc=top.g_XDoc["p_user_domain"].selectSingleNode("/data");
top.g_PhotoUserDomain.nu=getNodeSubValue(u_doc,"nu");
LoadXmlData_Ex("p_user_domain","http://rb.store.qq.com/GetRoute?UIN="+top.g_iUin,load_result,load_result);}
... ... // top.g_iUin 很明显这个的值就是QQ号码
LoadXmlData_Ex("p_user_domain","http://route.store.qq.com/GetRoute?UIN="+top.g_iUin,load_result,getDynamicXml);}
... ... //
}
7) 在IE中打开 http://rb.store.qq.com/GetRoute?UIN=164576700, 得如下的xml格式的数据。

-
164576700
photo.qq.com
xaup.photo.qq.com
xa.photo.qq.com //有密码的相册的地址

xap.photo.qq.com


xastatic.photo.qq.com
1
1
1

所以,从上面的getUserDomain函数中的getNodeSubValue(u_doc,"nu")可知
top.g_PhotoUserDomain.nu就是xa.photo.qq.com, 好了,这样的话,就表示打开带密码的相册的地址是:
第5步的
url=getUrl("album_view_private")+"&albumid="+aid+"&password="+MD5(passwd)+"&verifycode="+verifycode;
即:
http://xa.photo.qq.com/cgi-bin/common/cgi_view_album?uin=164576700&refer=portal&albumid=348a2c82-574b-4f3e-93b7-
aee7511456f0&password=e10adc3949ba59abbe56e057f20f883e&verifycode=
8) 开始测试是否可以使用暴力破解,直接在ie中打开上述的网址,返回的xml格式是提示验证码有错,把密码改成错误的或
verifycode=null, 总是提示验证码有错。
打开http://164576700.qq.com,然后单击带密码的相册,记下弹出框中的验证码,然后把验证码加到上面的网址中,
在当前ie页面打开,可以看到包含有该加密相册中的信息,包括其中的相片的信息。
9) 最后,因为后台总是先判断验证码再比较密码的,所以,如果不传verifycode参数就不可能进行暴力破解,除非能用
程序分析qq.com的图片验证码,得出值。所以,我白忙了一场。
http://cwq.iou1314.com/hack-qq-photo_a345