![7258c6153015a6736762c4c6b4ad14d5.png](https://i-blog.csdnimg.cn/blog_migrate/6060b40d21c0291d2d38abef359d406e.jpeg)
分析过程
首先对send 下断点 回到调用函数
![94015d55b0c75b19dffaec3b80f6b540.png](https://i-blog.csdnimg.cn/blog_migrate/3e2c6b54abbe2be9411c7ee7781d7135.jpeg)
在这里他首先会发送握手包
![da76703ecc48b750c6c3725b3e963e39.png](https://i-blog.csdnimg.cn/blog_migrate/c59e8bb001fa74f94c3b99fde43df3c8.jpeg)
由于我并没有Hook recv 所以不能接受到服务端返回数据. 用了比较笨的办法:
Sec-WebSocket-Key 的固定长度为 24
我先判断了 是否发送了 长为24字节的数据包....
我这里他是分别发送的 整个握手包不是一次发送完.
我不知道你们那里是什么情况
发送握手包的时候 是明文
![e0f7ad54bf0872d55642d5ad03cb67ec.png](https://i-blog.csdnimg.cn/blog_migrate/fab876fc0fe170bc750cc65d194cbfa2.jpeg)
犹豫我这里Sec-WebSocket-Key 是最后发送. 所以我就简单的判断了一下.
PS: 头顺序无所谓.一旦客户端和服务器都发送了握手信号,如果握手成功,数据传输部分启动。这是双方沟通的渠道,独立于另一方,可随意发送数据。
你们可以依靠服务器返回数据来进行判断 握手是否完成. 嘛 我的先就这样了. 回头再修改.
我只能按照Send的发送数据对比Wireshark中的未解密数据
过滤掉握手包后.
第一次调用Send的时候 buf里面的值 为 4字节的 masking-key 解密时候需要使用.
随后调用Send发送密文
解密代码
![7c2c4e8316d4797e409c4cb5e20f9e17.png](https://i-blog.csdnimg.cn/blog_migrate/cc5ee1280814bd34251d0169a2ec5cfb.jpeg)
加密原理
![4d310453cbff1bad974d5d469dbb0f77.png](https://i-blog.csdnimg.cn/blog_migrate/6438e9804dd7bb03c86b3a7b1fc5bb10.jpeg)
最终效果图
![65b9c7b342a83b0a40e6a72e5f8b2e86.png](https://i-blog.csdnimg.cn/blog_migrate/847692806c0808fa67eb29db9a26ebb1.jpeg)
最后,如果你想学C++可以私信小编“01”获取素材资料以及开发工具和听课权限!
![a48d1bf6431893d535b2b94bb2524707.png](https://i-blog.csdnimg.cn/blog_migrate/3b70abaa038b6d0e51f027144feffca1.jpeg)