【轉】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

相關文章
相關標籤/搜索