QQ空间工具编写过程解密(抓包分析,数据采集)
一、抓包分析:
QQ空间是以网页BS形式展显,所以只需要模拟IE收发数据即可实现操作QQ空间,首先要研究发送什么数据,能获取什么数据。也就是要进行抓包分析,然后再用编程实现数据收发。
在QQ空间首页发送说说下面就是同步到QQ微博的功能,但在说说里面发是没有的,所以抓包的时候在首页发就能实现同步了。
抓包工具有很多,如:httpwatch,sniffer,Fiddler,wireshark,ethereal,IE网页抓包辅助工具V6.0.14 ,iptool,WIND7网站抓包工具,wsockexpert 等等,但仅仅为了网页抓包,用HttpWatch就足够了,而且方便简单。
数据发送有POST和GET两种方式,一般POST是发送为主,GET是接收为主,但当然两者都可以收发。
抓包过程示例:
1、安装HttpWatch,然后在IE里打开,然后打开要抓包的页面,点击Record,记录收发数据。抓包完成后点Stop停止。
2、下面以发表带图片的说说为例,分析数据。
可以看见发送带图片的说说经过2步,第一步上传图片,第二步发送说说。根据抓包的内容分析,可以看出2步都是以POST方式发送的,我们需要的看的,第一Overview中的URL,就是目标网址。根据Time Chart时间可以得出,因为上传图片时间较长所以上边的POST是上传图片。Headers头文件,发送时要用的,关键的几个数据如下:
cookies不用说,大家都知道。
POST Data就是发送的内容。
当然上边的数据都是比较直观容易懂的,但是程序员都喜欢看代码不爱看这种分块可视化的东西,那也好办,下边的这个Stream,就是发送的数据流,可以说,你看这个就可以不用看别的了。发送的时候,Cookie以上是头部,Cookie下面是发送的内容。其中里面包括QQ号,文件名等需要编程指定。左边是发送的,右边是返回的数据。
那么图片在呢啊,怎么发过去的,看下图红框,编码有些乱,是因为那是Byte[],所以显示不出来,图片转换为Byte[]然后再发送的。那问题来了,图片是Byte[]了,别的内容是String肯定不行,最终发送的时候全都是Byte[],所以要把其他数据转换为Byte[]然后在合并到一起发送。当然没有图片最终发送也是Byte[],不过可以用String合并后,一起转换为Byte[],而免去操作Byte[]的麻烦.
发送过去之后,会返回一些数据。就是右边的数据,我们发现有些数据好像又很乱,不要紧,这是UTF8编码了,电脑喜欢的方式,但咱们人类不喜欢,所以要转换一下,很简单,到网上搜UTF8转换,在线转换工具就很多,复制过去一点就行,当然也可以下载一下小工具。
返回来这些数据都很有用,一会发送说说的时候要发图片,图片就是利用这些返回的参数来发送的。
第二步:现在图片已经上传完成,开始发说说,我们看一下抓到的数据。
分析方法同上,Overview ,Headers,POST Data,我就不一一介绍了,我们直接看Stream。如下图,网址和头文件,就是cookie上面的,我们最关心的是内容,就是画红框的,这里面就包含了QQ号,说说内容等。
我们来详细分析一下发送的内容:
syn_tweet_verson=1¶mstr=1&pic_template=&richtype=1&richval=%2CV14GBH9L1kQRCb%2CNDR077o*X8KA7lQ6HCQI2USqcAoNAAA!%2CNDR077o*X8KA7lQ6HCQI2USqcAoNAAA!%2C5%2C50%2C62%2C%2C50%2C62&special_url=&subrichtype=1&pic_bo=PgAyAAAAAAAFAC8!%09PgAyAAAAAAAFAC8!&who=1&con=qm%E5%97%B7%E5%97%B7%E5%97%B7&feedversion=1&ver=1&ugc_right=1&to_tweet=1&to_sign=1&hostuin=1598012143&code_version=1&format=fs&qzreferrer=http%3A%2F%2Fuser.qzone.qq.com%2F1598012143
你再对比没有图片的说说,你会发现,多出的内容就是图片的内容:
richtype=1 subrichtype=1 richval pic_bo
前边两个都是固定参数,直接写就是了,关键是richval和pic_bo这两个才是图片的信息,是关键,可以看到这两个后边的值都是一串看不懂的字符,其实刚刚说过了UTF8编码,转换成String你就看懂了。你解码后会神奇的发现,刚刚上传图片返回的数据在这俩参数几乎全用上了。最后组合成这两个参数。然后用程序组合一下最后发送就OK了,不管你用什么语言,C#也好Java也罢,C++,VB,易语言也行,这些都无所谓,只要你理解这个过程,根据不同语言的Http发送规则照着写就行了。这就是所谓的编程最关键的是算法和思路。语言是外表次要的。只要懂方法,会算法,用什么语言都无所谓。
问题:如何能实现发送的说说带位置信息和手机型号呢?
思路:发带手机信息的说说时我们是用手机登陆QQ空间的,手机登陆时网址和咱们电脑登陆不一样,手机是wap网址,我们要在电脑上登陆wap网页要先修改一下注册表。然后就可以登陆了。网址是:
当然其实可以不用这么长,但为了分析方便,直接一步到位,到登陆的界面。
修改注册表位置:
[HKEY_CURRENT_USER\Software\Classes\MIME\Database\Content Type\text/vnd.wap.wml]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
只要把这个加到注册表里就可以浏览wap网页了。但IE修改UA后一些手机网页页面还是打不开,比如发送说说时同步到微博的按钮点不上,带图片的说说发送不了。所以最好不要用IE+Httpwatch抓wap包。
建议手机wap页面抓包方式:火狐浏览器 + User Agent Switcher修改UA插件 + HttpFox抓包插件
安装好插件后,点击工具→Default User Agent,扩展菜单选择iPhone!User Agent成功更换!
启动抓包插件,工具→Web开发者→HttpFox→启动.........
另附赠User Agent查询网址一枚:http://ua123.net/
我们抓包后能看见,他上传图片和发说说都是GET方式,没有用POST。只需要将他发送过去的数据里面的手机型号和位置修改一下就可以实现了。
但由于腾讯wap页面更换过网址,以前是m.z.qq.com。现在不能用了,换的这个,但新的网址没人研究过,所以如果想实现,必须要先研究登陆,然后在研究发送。而且wap页面不好分析,加上时间问题,我并没过多研究。
本文由正态分布X~N(μ,σ2 ) QQ2052702900写于2015年2月26日。
【注】所有文字,均为个人学习总结,仅当个人留存。若君不幸踏访,切勿讥讽,确有可取之处,不妨随心借取,确有错漏之处,还望不吝赐教。