一、声明
本案例中所有内容仅供个人学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
二、案例目标
aHR0cHM6Ly93d3cuYmlnZXgub25saW5lLyMvc3dhcC9idGNfdXNkdA==
其实这种这么多参数加密多半都是同一个算法,当时看到这么多表单和请求头sign
加密,心想那不得大干一笔,话不多说开干!
三、案例分析
1sign
:
先看看sign参数,估计就是时间戳相关加密,搜索一下没东西,直接xhr断点
发现已经有值生成了,回溯跟栈。
咱们就直接搜isSign
进去之后发现reuestId是随机生成的加上时间戳
时间戳取到后三位加上000
# 获取随机数
def get_nonce(self):
return str(uuid.uuid4()).replace("-", "")
表单数据一起加密 return返回的
_0x406e25
:是webpack打包的找到加载器扣出即可
2、表单参数
前面xhr断点处已经看到 send发送的参数,跟栈找到这,
{
"symbol": "BTC/USDT",
"from": 1,
"to": 1700806391000,
"period": "1min",
"limit": 1000
}
这里是异步的 看得new了一个 JSEncrypt
找到公钥
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;
}
模拟请求拿到结果
到这里本来就玩事了,但是客户需要的是实时更新。这个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协议。
返回数据是加密的: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})
就是base64
看了一下url是加密的
后面这个ID是随机数生成的。
我测试了一下固定url也是没问题的
…(img-RtyHQKKk-1700811778618)]
看了一下url是加密的
后面这个ID是随机数生成的。[外链图片转存中…(img-9tlBUhQb-1700811778619)]
我测试了一下固定url是没问题的