吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9346|回复: 11
上一主题 下一主题
收起左侧

[C&C++ 转载] HOOK send 并解密WebSocket 协议

[复制链接]
跳转到指定楼层
楼主
By:刺刀 发表于 2018-11-23 01:11 回帖奖励
本帖最后由 By:刺刀 于 2018-11-27 14:51 编辑

正在封装客户端. 使其能与Chrome浏览器进行通信 (11/24)

参考地址

WebSocket协议详解及应用
WebSocket 协议

分析过程

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

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

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

数据传输格式:
传输数据格式.png

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

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

解密代码


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[i] ^ g_dec[i % 4];
                                }
                                FILE *fp = fopen("dec.txt", "a");
                                fprintf(fp, "%s\n", s.c_str());
                                fclose(fp);
                                status1 = false;
                        }
                }
        }
}

加密原理

加密原理.png

源代码

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



最终效果图

免费评分

参与人数 2吾爱币 +5 热心值 +2 收起 理由
jackie1 + 1 谢谢@Thanks!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| By:刺刀 发表于 2018-11-23 12:41 来自手机 |楼主
kalafinaglll 发表于 2018-11-23 02:45
大概看懂一个意思。。请问楼主能不能分享一下用途的思路,我大多数情况遇到的websocket都不能让我hook并且 ...

我主要是对一个封装好的Google 浏览器的 Dev tools 框架进行分析 接触到的 websocket 他的dll我感觉有点东西 不是很敢使用 所以准备自己重新封装一份


客户端发送websocket 必须是加密的 server返回数据 可选加密
推荐
kalafinaglll 发表于 2018-11-23 02:45
大概看懂一个意思。。请问楼主能不能分享一下用途的思路,我大多数情况遇到的websocket都不能让我hook并且看不到明文,要么就是在应用层最后解密了,也能看到明文。谢谢!
4#
闹巷里的树语 发表于 2018-11-23 01:55
5#
GJH588 发表于 2018-11-23 08:24
看不懂,先收藏,以后在学习
6#
jiejie1405 发表于 2018-11-23 09:47 来自手机
有协议分析过程么
7#
edata 发表于 2018-11-23 11:46
感谢分享,学习了。。
8#
 楼主| By:刺刀 发表于 2018-11-23 12:36 来自手机 |楼主
jiejie1405 发表于 2018-11-23 09:47
有协议分析过程么

有的 晚点我会更新的
9#
jackie1 发表于 2018-11-23 16:23
谢谢分享,楼主说的Dev Tools有点东西是指什么
10#
 楼主| By:刺刀 发表于 2018-11-23 16:30 |楼主
jackie1 发表于 2018-11-23 16:23
谢谢分享,楼主说的Dev Tools有点东西是指什么

是别人封装好的DLL
Google浏览器只是自己提供了API接口而已
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 11:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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