fiddler抓websocket消息并修改数据

开启https支持

如果需要抓取https、wss请求,需要在Fiddler菜单Tools > Options > HTTPS 中开启HTTPS支持。在Actions菜单中,设置电脑系统信任Fiddler的根证书。
手机简单支持

如果需要抓取手机中的数据,需要在Tools > Options > Connections中设置允许客户端连接,然后在手机wifi连接中设置使用电脑的ip和Fiddler监听的端口作为代理。

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

完成以上操作才有可能监控https和wss请求,大部分是能监控的。

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

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

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);
    }
图片.png

红框中的值是需要匹配消息中的值,如果匹配的到,就修改

转自:https://www.cnblogs.com/xiangyuecn/p/10618982.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。