微信通信HTTP协议抓取与分析

  • 格式:pdf
  • 大小:1.40 MB
  • 文档页数:12

微信通信HTTP协议抓取与分析一、实验目标1、基本要求:利用HTTP协议抓取工具获得微信通信会话过程,并对数据包进行分析。

二、基础知识1、了解HTTP两个基本命令GET与POST,并利用抓取工具获得数据包;2、利用Telnet命令仿真测试命令GET与POST;3、利用抓取工具获得微信通信会话数据包,并进行分析。

4、GET与POSTget是从服务器上获取数据;post是向服务器传送数据。

三、实验过程与结果1、网页上Httpwatch抓包结果安装httpwatch抓包工具,使用IE浏览器,右击有显示httpwatch professional,进入抓包界面。

点击Record按钮,输入网址/,开始抓包1.1.1 Get方式客户端向服务器发送数据GET /gw/css/style.css HTTP/1.1Accept: text/css, */*X-HttpWatch-RID: 26411-10018Referer: /gw/index/index.htmlAccept-Language: zh-CNUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like GeckoAccept-Encoding: gzip, deflateHost: Connection: Keep-Alive1.1.2 Get方式服务器向客户端返回地数据HTTP/1.1 200 OKDate: Thu, 25 Feb 2016 09:15:55 GMTContent-Type: text/cssContent-Encoding: gzipLast-Modified: Tue, 15 Dec 2015 02:18:29 GMTAccept-Ranges: bytesETag: "80487e3de36d11:0"Server: Microsoft-IIS/7.5X-Powered-By: Content-Length: 9039Age: 1X-Via: 1.1 lishui17:6 (Cdn Cache Server V2.0)Connection: keep-alive在网页上输入快递单号查询,网页上发送请求1.2.1 POST方式客户端向服务器发送地数据POST /addTrace.ashx HTTP/1.1X-Requested-With: XMLHttpRequestX-HttpWatch-RID: 73415-10085Content-Type: application/x-www-form-urlencoded; charset=UTF-8Accept: */*Referer: :8022/TraceSimple.aspxAccept-Language: zh-CNAccept-Encoding: gzip, deflateUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Host: :8022Content-Length: 334Connection: Keep-AliveCache-Control: no-cacheCookie: _SessionId=pr2zch43i5efxrdjcnuvtwzs1.2.2 POST方式服务器向客户端返回地数据HTTP/1.1 200 OKCache-Control: privateContent-Type: text/plain; charset=utf-8Server: Microsoft-IIS/7.5X-AspNet-Version: 4.0.30319X-Powered-By: Date: Thu, 25 Feb 2016 11:58:45 GMTContent-Length: 72、Telnet模拟http请求2.1 Telnet模拟get请求(1)、打开"运行"->cmd进入命令环境;(2)、输入"telnet 80",回车后 ,屏幕为全黑,此时我们利用快捷键"Ctrl+](右中括号)"来打开本地回显功能(3)、单击回车,进行编辑状态。

(4)、输入:"GET / HTTP/1.1"后回车,在第二段接着输入:"HOST:"然后按回车,这样一个简单的HTTP请求就完成了,接着我们只要再按下回车,便向服务器递交这个请求了。

(5)、接收服务器返回,只需几秒钟,我们便会收到来自服务器反应.2 .2 Telnet模拟post请求3、获得微信通信会话数据包3.1微信服务器返回一个会话ID微信Web版本不使用用户名和密码登录,而是采用二维码登录,所以服务器需要首先分配一个唯一的会话ID,用来标识当前的一次登录,通过请求地址:https:///jslogin?appid=wx782c26e4c19acffb&redirect_uri=https %3A%2F%%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_ CN&_=1456453643888服务器会返回如下的字符串:window.QRLogin.code = 200; window.QRLogin.uuid = "QfbRQRaVMw==";而这个QfbRQRaVMw==字符串就是微信服务器返回给我们的ID。

3.2通过会话ID获得二维码既然微信Web版本是通过二维码进行登录,如何获得这个随机的二维码呢?答案就是利用刚才获得的ID去请求服务器生成的二维码,通过上面的ID我们组合得到以下的URL地址:https:///qrcode/QfbRQRaVMw==https:///cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=QfbRQ RaVMw==&tip=0&r=-459741763&_=1456453643890该请求返回的便是我们需要的二维码,此时需要用户在微信的手机版本中扫描这个二维码3.3轮询手机端是否已经扫描二维码并确认在Web端登录当获得二维码之后,就需要用户去手机端去扫描二维码,并获得用户的授权,此时我们并不知道用户何时完成这个操作,所以我们只有轮询,而轮询的地址就是:https:///cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=wdHzV EDtWg==&tip=0&r=-409595456&_=1456403400454如果服务器返回:window.code=201;则说明此时用户在手机端已经完成扫描,但还没有点击确认;如果服务器返回:window.redirect_uri=一个URL地址则说明此时用户已经在手机端完成了授权过程,保存下这个URL(下面这个)地址下一步骤中使用。

window.code=200;window.redirect_uri="https:///cgi-bin/mmwebwx-bin/webwxnewloginpage?ti cket=AY4lgzt2g8kRZVVX1jGBJhoH@qrticket_0&uuid=wdHzVEDtWg==&lang=zh_CN&scan=1456 403530"3.4访问登录地址,获得uin和sid通过访问上一步骤中获得的URL地址,可以在服务器返回的Cookies中获得到wxuin和wxsid 这两个值,这两值在后续的通信过程中都要使用到这两个值,并且Cookies中也需要包括这两项。

3.5初使化微信信息前面的步骤算是完成了这个复杂的登录过程,如果我们需要使用微信就需要获得当前用户的信息、好友列表等,还有一个关键的就是同步信息(后续与服务器轮询中需要使用同步信息),通过访问以下的链接:https:///cgi-bin/mmwebwx-bin/webwxinit?r=-459730572&pass_ticket=WoBXmb 23BD3X98J4KHwIBFyHFplLTgRZWF7sBywNK%252Bu7zzPLj71kpmBVmRFhtTus访问该链接需要使用POST,并且在Body中带上以下的JSON信息:{"BaseRequest":{"Uin":"1214157485","Sid":"hGXn33kFvVojFdvt","Skey":"@crypt_d862 adf4_73811f85f1f062cbdde628e26839e223","DeviceID":"e604822466029772"}}这个JSON串中Uin和Sid分别是上面步骤中获得的那两个Cookie值,DeviceID是一个本地生成的随机字符串(分析了官方的总是e+一串数字,所以我们也保持这样的格式)。

服务器就会返回一个很长的JSON串,这其中包括:BaseResponse中的值用来表示请求状态码,ContactList主要用来表示联系人,SyncKey是用户与服务器同步的信息,User就是当前登录用户自己的信息。

3.6保持与服务器的信息同步与服务器保持同步需要在客户端做轮询,该轮询的URL如下:https:///cgi-bin/mmwebwx-bin/synccheck?r=1456454802216&ske y=%40crypt_d862adf4_73811f85f1f062cbdde628e26839e223&sid=hGXn33kFvVojFdvt&uin=1 214157485&deviceid=e867682422922271&synckey=1_642562429%7C2_642562634%7C3_64256 2629%7C11_642561151%7C13_642550013%7C201_1456453867%7C1000_1456450731&_=1456453 643935其中的参数r和_都是time,sid,uin,deviceid与上面步骤的值相对应,此处的synkey 是上步步骤获得的同步键值。