## 调试虎牙 

发现找到 pending 正在连接中 WebSocket

并发送一条测试信息

![debugger](../../img/39.png)

进入js代码，发现new WebSocket

![debugger](../../img/40.png)

这里就要注意，无论js代码怎么混淆 new WebSocket 肯定会出现

    s && !o.online && e.useHttps && (h += ":4434");
    var p = new WebSocket((e.useHttps ? "wss://" : "ws://") + h + _);
    p.ip = h,
    p.onopen = c,
    p.onclose = d,
    p.onerror = d
    
通过搜索发现很多 onmessage 和 send 方法

一个个打断点非常麻烦，直接hook
    
    p.send_ = p.send;
    p.send = function(t){
        debugger;
        return p.send_(t);
    }

![debugger](../../img/41.png)

hook

![debugger](../../img/42.png)

发送弹暮测试，定位到加密函数

    w && m.connected && w.send(t)

这里的 && 如果 w为true， m.connected为true，w.send(t)为true。执行w.send(t)

![debugger](../../img/44.png)

这里可以看到t是发送的二进制的数据

![debugger](../../img/43.png)

r 值序列化数据 

    a = JSON.stringify(r)
    b = JSON.parse(a)

![debugger](../../img/46.png)

r中间存在我发送的代码内容，打上断点

    d.writeStruct("tReq", r)

这里能发现 d 存在方法做加密，d是由 var d = new l.Wup; 得到的，那么现在需要搞定 l 值。

![debugger](../../img/45.png)

l 值是 h.Taf 得到的， h 值是 t.taf 得到的，那买t值？t值是传入的