【JavaScript 逆向】虚拟货币平台bigex:历史走势和ws协议的实时数据


image-20231124123019719

一、声明

本案例中所有内容仅供个人学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

二、案例目标

aHR0cHM6Ly93d3cuYmlnZXgub25saW5lLyMvc3dhcC9idGNfdXNkdA==

image-20231124123901553

image-20231124124914732

其实这种这么多参数加密多半都是同一个算法,当时看到这么多表单和请求头sign加密,心想那不得大干一笔,话不多说开干!

三、案例分析

1sign:

​ 先看看sign参数,估计就是时间戳相关加密,搜索一下没东西,直接xhr断点

image-20231124125914997

image-20231124130008578

发现已经有值生成了,回溯跟栈。

咱们就直接搜isSign

image-20231124130810587

进去之后发现reuestId是随机生成的加上时间戳

时间戳取到后三位加上000

# 获取随机数
    def get_nonce(self):
        return str(uuid.uuid4()).replace("-", "")

image-20231124131903955

image-20231124132158121

image-20231124133029700

image-20231124133242365

表单数据一起加密 return返回的

_0x406e25:是webpack打包的找到加载器扣出即可

image-20231124140536740

2、表单参数

前面xhr断点处已经看到 send发送的参数,跟栈找到这,

image-20231124141231937

{
    "symbol": "BTC/USDT",
    "from": 1,
    "to": 1700806391000,
    "period": "1min",
    "limit": 1000
}

这里是异步的 看得new了一个 JSEncrypt

找到公钥

image-20231124142311464

image-20231124142607235

function rsa_enc(data) {
    // let _0x10dd1f = new _0x2d62ea.JSEncrypt();
  let _0x10dd1f = _JSEncrypt;

  var public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD2mFVMLsk7MeDhSxKxyseSVIveO1BMh5qtJoKq+NNs2nag1VbbB38kZcqwuQnszzZOM88N5lytPT2fTA3fZtt4MOZp7gds9C7gH76p63Ozre9+cLE3hHzIxKOLtMGQW4VLUkqwG2v7ajbM9k1dQk4Suxv1tyJPSA+0iyDmvGjJYwIDAQAB";
  _0x10dd1f.setPublicKey(public_key);
  let _0x12bab8 = _0x10dd1f.encryptLong(data.toString());
  return _0x12bab8;
}

image-20231124142850727

模拟请求拿到结果

image-20231124154122953

到这里本来就玩事了,但是客户需要的是实时更新。这个history接口最快只能一分钟更新一次,所以只能再看一下了,这种实时更新的一般都是ws或者wss协议的。

3ws协议

了解一下:

ws和wss都是WebSocket协议的实现方式。

​ WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,可以在客户端和服务器之间实现实时数据传输。在 WebSocket 中,浏览器和服务器只需要进行一次握手,就可以在一个持久化的连接上进行数据传输,相比于 HTTP 协议每次请求响应都需要建立和断开连接,WebSocket 可以减少网络带宽和延迟,提高了通信效率和用户体验。

ws是一种不加密的WebSocket协议实现方式,使用的端口号为80或8080。而wss则是一种加密的WebSocket协议实现方式,使用的端口号为443。wss协议通过 SSL/TLS 协议对通信数据进行加密,从而保证通信的安全性,可以防止中间人攻击和窃听。

因此,如果需要保证数据传输的安全性,应该使用wss协议。但是,由于wss协议需要进行SSL/TLS加密解密操作,会增加服务器的负载,同时也会增加通信的延迟。因此,如果对通信数据的安全性要求不高,可以选择使用ws协议。

image-20231124143745454

返回数据是加密的:webcoket 一般都是json数据格式传输,那么发生之前需要JSON.stringify 这里hook一下ws


var my_stringify = JSON.stringify;
JSON.stringify = function (params) {
    debugger
    console.log("json_stringify params:",params);
    return my_stringify(params);
};

var my_parse = JSON.parse;
JSON.parse = function (params) {
    debugger
    console.log("json_parse params:",params);
    return my_parse(params);
};

// 2  webScoket 绑定在windows对象,上,根据浏览器的不同,websokcet名字可能不一样 

window._WebSocket = window.WebSocket;
window._WebSocket.prototype.send = function (data) {
    console.info("Hook WebSocket", data);
    return this.send(data)
}

Object.defineProperty(window, "WebSocket",{value: WebSocket})


image-20231124154239627

image-20231124153644080

就是base64

image-20231124143906332

看了一下url是加密的

后面这个ID是随机数生成的。image-20231124145019288

我测试了一下固定url也是没问题的

image-20231124152735044

…(img-RtyHQKKk-1700811778618)]

看了一下url是加密的

后面这个ID是随机数生成的。[外链图片转存中…(img-9tlBUhQb-1700811778619)]

我测试了一下固定url是没问题的
image-20231124152735044

image-20230913235029956

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值