【转】Fiddler抓包和修改WebSocket数据,支持wss

记录一下用FiddlerWebSocket收发的数据进行抓包分析和篡改数据,只找到这么一个方法,能用就行吧。
时间:2019-3-29
环境: win7 + Fiddler 5.0javascript

Fiddler抓取WebSocket数据

Fiddler中双击WebSocket Session便可查看此链接收发的数据。惋惜此选项卡内没有带发送数据的功能(一个输入框(HEX文本) + 一个按钮),要是有就基本完美了。html

开启https支持

若是须要抓取httpswss请求,须要在Fiddler菜单Tools > Options > HTTPS 中开启HTTPS支持。在Actions菜单中,设置电脑系统信任Fiddler的根证书。java

手机简单支持

若是须要抓取手机中的数据,须要在Tools > Options > Connections中设置容许客户端链接,而后在手机wifi链接中设置使用电脑的ipFiddler监听的端口做为代理。web

而后手机浏览器访问电脑ip + 端口 进入Fiddler页面下载根证书,并信任(安装)此证书。api

完成以上操做才有可能监控httpswss请求,大部分是能监控的。浏览器

修改WebSocket数据

Fiddler界面中并未找到修改WebSocket数据的地方,搜索也没找到多少直接的资料信息,不过写怎么打印WebSocket数据日志的倒蛮多(Fiddler 4.5开始已没有这个必要了)。另外看到一篇利用fiddler core api 拦截修改 websocket 数据的。两个综合一下就大功告成了。websocket

Fiddler菜单Rules > Customize Rules中实现Handlers类的OnWebSocketMessage方法,此方法能够获得WebSocket收发的数据,并且能够修改。另:Fildder主界面中FildderScript也能够直接修改脚本代码。session

脚本语法

Fiddler采用的JScript.Net语法,这个语法不熟?不要紧,我也不熟,但对JavaScriptC#任意一个熟就好了。socket

Classic ASP 用户可能对JScript和它的好基友VBScript比较熟,这两个除了写ASP外,Windows上的vbs js脚本代码也是主力使用方向。函数

简单点,把JScript当作IE 6来写就ojbk了,绝对的原味,反正下面的例子里面js代码居多。参考文章结尾的测试代码,不要在乎那些拼音或者缩写的奇丑变量名。

Echo测试结果

测试完整代码在文章结尾。

发送echo测试数据test edit:ddd,结果截图:

Log中已打印咱们的修改日志信息,能够看到echo响应中彻底包含了被修改后的发送数据,我特地用不一样颜色标记了一下。


Fiddler本身的WebSocket记录信息,它记录的为咱们修改以后的。

WebSocket发送数据

没找到方法,不知道怎么用Fiddler来发送WebSocket数据,参考第一节中的遗憾。

附:测试代码

class Handlers { //实现此方法,拦截处理数据 static function OnWebSocketMessage(oMsg: WebSocketMessage) { var arr=oMsg.PayloadAsBytes(); var bs=Utilities.ByteArrayToString(arr); var txt=bytesToViewText(arr);//此文本为英文,可读的文本信息,不可读的乱码、中文都过滤掉了 var newTxt=""; //假设的修改场景,只要收发的数据中包含了 test edit: 就干它 var edit=false; if(txt.indexOf("test edit:")+1){ var nbs=bs; var m1=/(test edit:)(.*)/.exec(txt)||[]; nbs=nbs.Replace(strToHex(m1[0]||""),strToHex(m1[1]+(oMsg.IsOutbound?"send":"onmessage")+" change:"+m1[2])); edit=true; oMsg.SetPayload(hexToBytes(nbs)); newTxt=bytesToViewText(oMsg.PayloadAsBytes()); } //并未直接提供获取SessionID的方法,应该是没有公开 var all=oMsg.ToString(); var m1=/#(\d+)/.exec(all)||[]; var sessionID=m1[1]||-1; FiddlerApplication.Log.LogString( sessionID+":["+oMsg.ID+"]" +"["+(oMsg.IsOutbound?"出":"入")+"]" +"["+(edit?"改:"+newTxt:"")+"]" +txt+"\n"); } //如下为一些功能函数 static function bytesToViewText(arr:byte[]){ var s=""; for(var i=0;i<arr.length;i++){ if(arr[i]>=32 && arr[i]<=126){ s+=String.fromCharCode(arr[i]); } } return s; } static function strToHex(str:String){ var byts=new byte[str.Length]; for(var i=0;i<str.Length;i++){ byts[i]=(byte)(str.charCodeAt(i)); } return Utilities.ByteArrayToString(byts); } static function hexToBytes(hexString:String) { hexString = hexString.Replace(" ", ""); var length = hexString.Length / 2; var hexChars = hexString.ToCharArray(); var d = new byte[length]; for (var i = 0; i < length; i++) { var pos = i * 2; d[i] = (byte)(charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } static function charToByte(c:String) { return "0123456789ABCDEF".indexOf(c); } .......

只找到这么一个方法对WebSocket抓包分析和篡改数据,比较土,完.

from:https://www.cnblogs.com/xiangyuecn/p/10618982.html

相关文章
相关标签/搜索