記錄一下用
Fiddler
對WebSocket
收發的數據進行抓包分析和篡改數據,只找到這麼一個方法,能用就行吧。 時間:2019-3-29 環境:win7
+
Fiddler 5.0
javascript
Fiddler
中雙擊WebSocket Session
便可查看此鏈接收發的數據。惋惜此選項卡內沒有帶發送數據的功能(一個輸入框(HEX文本) + 一個按鈕),要是有就基本完美了。java
若是須要抓取https
、wss
請求,須要在Fiddler
菜單Tools
>
Options
>
HTTPS
中開啓HTTPS
支持。在Actions
菜單中,設置電腦系統信任Fiddler
的根證書。web
若是須要抓取手機中的數據,須要在Tools
>
Options
>
Connections
中設置容許客戶端鏈接,而後在手機wifi
鏈接中設置使用電腦的ip
和Fiddler監聽的端口
做爲代理。api
而後手機瀏覽器訪問電腦ip
+
端口
進入Fiddler
頁面下載根證書,並信任(安裝)此證書。瀏覽器
完成以上操做纔有可能監控https
和wss
請求,大部分是能監控的。websocket
在Fiddler
界面中並未找到修改WebSocket
數據的地方,搜索也沒找到多少直接的資料信息,不過寫怎麼打印WebSocket
數據日誌的倒蠻多(Fiddler 4.5
開始已沒有這個必要了)。另外看到一篇利用fiddler core api 攔截修改 websocket 數據
的。兩個綜合一下就大功告成了。session
在Fiddler
菜單Rules
>
Customize Rules
中實現Handlers
類的OnWebSocketMessage
方法,此方法能夠獲得WebSocket
收發的數據,並且能夠修改。另:Fildder
主界面中FildderScript
也能夠直接修改腳本代碼。socket
Fiddler
採用的JScript.Net
語法,這個語法不熟?不要緊,我也不熟,但對JavaScript
和C#
任意一個熟就好了。函數
Classic ASP
用戶可能對JScript
和它的好基友VBScript
比較熟,這兩個除了寫ASP
外,Windows
上的vbs
js
腳本代碼也是主力使用方向。測試
簡單點,把JScript
當作IE 6
來寫就ojbk了,絕對的原味,反正下面的例子裏面js
代碼居多。參考文章結尾的測試代碼,不要在乎那些拼音或者縮寫的奇醜變量名。
測試完整代碼在文章結尾。
發送echo
測試數據test edit:ddd
,結果截圖:
echo
響應中徹底包含了被修改後的發送數據,我特地用不一樣顏色標記了一下。
Fiddler
本身的
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
抓包分析和篡改數據,比較土,完.