send函数 获得已发送数据长度_Hacker利用C++实现send并解密WebSocket 协议

本文介绍了在WebSocket协议中,如何通过分析发送的数据包来判断握手过程。作者设置了断点并检测发送的Sec-WebSocket-Key字段,由于未Hookrecv,采用了一种简单的方法来识别握手包。在数据传输阶段,提到了 masking-key 的作用以及解密过程,并展示了加密原理和最终效果。此外,还分享了学习C++的资源获取途径。
摘要由CSDN通过智能技术生成

c791f5c08f8fd8bad6482df74a202419.png

415e80c88cb3501da46a17e5fc3cd5e6.png

分析过程
首先对send 下断点 回到调用函数

395f98e950dab1d39942b6fbd39ee5c4.png


在这里他首先会发送握手包

d23375855a28d7e0d1543f23ddb945b9.png


由于我并没有Hook recv 所以不能接受到服务端返回数据. 用了比较笨的办法:
Sec-WebSocket-Key 的固定长度为 24
我先判断了 是否发送了 长为24字节的数据包....
我这里他是分别发送的 整个握手包不是一次发送完.
我不知道你们那里是什么情况
发送握手包的时候 是明文

24014fd5ecc8ec1cd51f3763a510cd4c.png


犹豫我这里Sec-WebSocket-Key 是最后发送. 所以我就简单的判断了一下.
PS: 头顺序无所谓.一旦客户端和服务器都发送了握手信号,如果握手成功,数据传输部分启动。这是双方沟通的渠道,独立于另一方,可随意发送数据。
你们可以依靠服务器返回数据来进行判断 握手是否完成. 嘛 我的先就这样了. 回头再修改.
我只能按照Send的发送数据对比Wireshark中的未解密数据
过滤掉握手包后.
第一次调用Send的时候 buf里面的值 为 4字节的 masking-key 解密时候需要使用.
随后调用Send发送密文解密代码

b5ad06fbc80744550b4a27822f38d5c4.png

加密原理

d41dda5bb9e12eafd21ec76c51677a07.png


最终效果图

dea28110bb0e85bf49d1ddab77255e9f.png


最后,如果你想学C++可以私信小编“01”获取素材资料以及开发工具和听课权限!

8c27608a93c8167dac7c36b27368c48c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值