飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5650|回复: 7

[C/C++] HOOK send 并解密WebSocket 协议

[复制链接]
  • TA的每日心情
    无聊
    2021-8-27 04:13
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2018-11-23 01:04:31 | 显示全部楼层 |阅读模式
    本帖最后由 By刺刀 于 2018-11-23 14:48 编辑

    [md]
    # 思路有点乱 我先理一下自己的思路

    ## 参考地址
    [WebSocket协议详解及应用](https://blog.csdn.net/SilenceNet/article/details/79662124)
    [WebSocket 协议](https://segmentfault.com/a/1190000013298527)

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

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

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

    犹豫我这里Sec-WebSocket-Key 是最后发送. 所以我就简单的判断了一下.

    PS: 头顺序无所谓.一旦客户端和服务器都发送了握手信号,如果握手成功,数据传输部分启动。这是双方沟通的渠道,独立于另一方,可随意发送数据。

    你们可以依靠服务器返回数据来进行判断 握手是否完成. 嘛 我的先就这样了. 回头再修改.

    数据传输格式:


    > 分析协议的时候 这里出现了一个小问题: 目前也不知道是什么问题
    > 按照协议 他会传输一个2字节的head头
    > 在Wireshark中. 能看见 Hook Send的时候并不能看见
    > 所以没办法判断数据是否已经传输完毕.

    我只能按照Send的发送数据对比Wireshark中的未解密数据
    过滤掉握手包后.
    第一次调用Send的时候 buf里面的值 为 4字节的 masking-key 解密时候需要使用.
    随后调用Send发送密文

    [C++] 纯文本查看 复制代码
    void Decrypt(LPCSTR buf, int len) {
    
            if (len == 24) {
                    status = true;
            }
    
            if (status) {
                    std::string s;
                    if (len == 4) {
                            strncpy((char *)g_dec, buf, 4);
                            status1 = true;
                    }
                    else {
                            if (status1) {
                                    for (int i = 0; i < len; i++) {
                                            s += buf ^ g_dec[i % 4];
                                    }
                                    FILE *fp = fopen("dec.txt", "a");
                                    fprintf(fp, "%s\n", s.c_str());
                                    fclose(fp);
                                    status1 = false;
                            }
                    }
            }
    }


    加密原理


    代码已经上传到 github: https://github.com/hackbayonet/WebSocket


    最终效果图

    TIM截图20181123010547.png

    评分

    参与人数 2威望 +18 飘云币 +28 收起 理由
    yosen2001 + 8 + 8 赞一个,这个帖子很给力!
    small-q + 10 + 20 PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情

    昨天 17:25
  • 签到天数: 161 天

    [LV.7]常住居民III

    发表于 2018-11-23 08:44:56 | 显示全部楼层
    表哥凌晨还在研究,佩服啊,来坐个沙发。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-2-19 14:43
  • 签到天数: 69 天

    [LV.6]常住居民II

    发表于 2018-11-23 09:38:29 | 显示全部楼层
    厉害啊~~非常强大
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    4 小时前
  • 签到天数: 2170 天

    [LV.Master]伴坛终老

    发表于 2018-11-23 10:34:40 | 显示全部楼层

    来学习了,多谢分享
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-7-11 09:41
  • 签到天数: 32 天

    [LV.5]常住居民I

    发表于 2018-11-24 12:22:40 | 显示全部楼层
    厉害,学习了~~~~~~~~~~~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表