元旦期间舍友迷恋上了QQ空间的一个游戏应用-猜歌王,玩得不亦乐乎。突然有一次,上铺告诉遇到一个人,猜歌都特别快,特别准,很明显用了外挂。
上面是背景。
对于这个游戏我的第一思路是模拟,对声音进行采样,提取特征,然后与歌曲库中歌曲对比,理论上是可行的,比如有一款APP叫做SoundHound……但是游戏辅助必然不是通过这种手段。
换个思路,根据经验,歌曲片段应该需要先缓存到本地,于是考虑拦截HTTP封包,对比歌曲库的地址来获取每首歌的歌名,于是乎,打开了火狐的Web控制台,希望能获得有用的东西。
[15:30:45.941] GET http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/355/7355_4.mp3 [HTTP/1.1 200 OK 440ms]
[15:30:45.943] GET http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/902/1079902_1.mp3 [HTTP/1.1 200 OK 466ms]
[15:30:45.945] GET http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/478/718478_3.mp3 [HTTP/1.1 200 OK 524ms]
[15:30:45.947] GET http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/179/101179_1.mp3 [HTTP/1.1 200 OK 389ms]
[15:30:45.949] GET http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/783/727783_1.mp3 [HTTP/1.1 200 OK 463ms]
看到这样子的记录以后,大概有了眉目,但是仍然存在一个问题,需要采集大量的地址与歌曲名或者歌手的对应信息。无意间一个POST数据引起了我的注意。
请求网址:
    http://app100645222.qzone.qzoneapp.com/contest/create.ngi
请求方法:
    POST
查看其相应数据,一切大白于天下。
响应头
*****省略*****
响应主体

JSON格式化后:

 

{
    "data": {
        "songs": [
            {
                "id": "V2550379",
                "part": 4,
                "mode": 1,
                "answer": 2,
                "opts": [
                    "我要给你",
                    "霸王命",
                    "爱上你不是我的错",
                    "365天"
                ],
                "name": "爱上你不是我的错",
                "singer": "多亮",
                "album_id": "198946",
                "album_name": "多原话",
                "url": "http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/379/V2550379_4.mp3",
                "url_aux": "http://cdn.vanchu.net/app100645222/mp3/379/V2550379_4.mp3"
            },
            {
                "id": "V2472634",
                "part": 6,
                "mode": 0,
                "answer": 0,
                "opts": [
                    "侧田",
                    "胡歌",
                    "俞灏明",
                    "蔡旻佑"
                ],
                "name": "很想很想说再见",
                "singer": "侧田",
                "album_id": "191434",
                "album_name": "2012年12月新歌速递",
                "url": "http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/634/V2472634_6.mp3",
                "url_aux": "http://cdn.vanchu.net/app100645222/mp3/634/V2472634_6.mp3"
            },
            {
                "id": "V2550675",
                "part": 1,
                "mode": 1,
                "answer": 0,
                "opts": [
                    "SUPER GIRL 爱无畏",
                    "无脸人",
                    "我们都能幸福着",
                    "呼呼"
                ],
                "name": "SUPER GIRL 爱无畏",
                "singer": "萧亚轩",
                "album_id": "198991",
                "album_name": "SUPER GIRL 爱无畏",
                "url": "http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/675/V2550675_1.mp3",
                "url_aux": "http://cdn.vanchu.net/app100645222/mp3/675/V2550675_1.mp3"
            },
            {
                "id": "V2634923",
                "part": 2,
                "mode": 1,
                "answer": 2,
                "opts": [
                    "霸王命",
                    "十二生肖",
                    "天机(feat.五月天阿信)",
                    "忘了我也不错"
                ],
                "name": "天机(feat.五月天阿信)",
                "singer": "MP魔幻力量",
                "album_id": "205656",
                "album_name": "射手",
                "url": "http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/923/V2634923_2.mp3",
                "url_aux": "http://cdn.vanchu.net/app100645222/mp3/923/V2634923_2.mp3"
            },
            {
                "id": "V2550447",
                "part": 3,
                "mode": 0,
                "answer": 2,
                "opts": [
                    "萧亚轩",
                    "A-Lin",
                    "Popu Lady",
                    "魏晨"
                ],
                "name": "一直一直爱",
                "singer": "Popu Lady",
                "album_id": "198961",
                "album_name": "一直一直爱",
                "url": "http://app100645222.imgcache.qzoneapp.com/app100645222/mp3/447/V2550447_3.mp3",
                "url_aux": "http://cdn.vanchu.net/app100645222/mp3/447/V2550447_3.mp3"
            }
        ],
        "status": {
            "stamina": 1,
            "staminaElapsedTime": 3012
        }
    },
    "ret": 0,
    "ver": "75",
    "t": 1357102078
}

响应主体是JSON格式,其中使用了Unicode编码。
将JSON格式数据视图化,可以看得很清楚了。
clip_image002

WebBrowser控件有 BeforeNavigate2 事件
BeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
但是经过试验,不能够拦截网页中Flash控件的POST。
利用HOOK对进程进行拦截,对数据包的JSON数据进行解析(注意GZIP压缩),然后获取answer值,0,1,2,3分别对应opts的四个选项。
至此游戏辅助的原型基本呈现。
题外话:经试验,QQ空间多个猜歌应用均存在相同漏洞。

上传的图像

clip_image003

转自看雪http://bbs.pediy.com/showthread.php?t=160579

源链接

Hacking more

...