猿人学Web-61 实战

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

const C = "aiding1234567891";
// 截取前 16 字节作为密钥
const validKey = CryptoJS.enc.Utf8.parse(C.slice(0, 16));

function X(k, n = validKey) {
const encrypted = CryptoJS.AES.encrypt(k, n, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}

const plaintext = "1";
const encryptedResult = X(plaintext);
console.log(encryptedResult);

协议是从ws 走的,image-20250217172302327

第一页参数为原始参数为 1|python-spider.com|yuanrenxue.com|大威天龙,大罗法咒,
加密后的结果为BpcFZapyYcAmt1JP12G43QzJgYizE+QhFhAtT9PGLMBSd+hkZJSVOOZZFKyAA5He3zhxZSxd3AdIrHEMj2j9oA==

还原后发现加密后的结果不一致。

跟栈到这里image-20250217172132741 发现关键词DES

使用在线加密网站 https://the-x.cn/cryptography/Tripledes.aspx 进行测试 可以得到算法为3DES

这里找到 https://www.cnblogs.com/winyh/p/12442535.html 3DES 加密解密demo

使用AI 将curl 转为 js 代码,并且使用websocket 连接,并修改请求之后有如下代码,可以通过这一题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
const WebSocket = require('ws');
const CryptoJS = require("crypto-js");

// WebSocket 连接地址
const url = 'wss://www.python-spider.com/api/challenge61';

// 处理密钥
const key = CryptoJS.enc.Utf8.parse('aiding1234567891');

// 加密函数
function encrypted(params) {
const encrypted = CryptoJS.TripleDES.encrypt(params, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}

// 构造请求头
const headers = {
'Upgrade': 'websocket',
'Origin': 'https://www.python-spider.com',
'Cache-Control': 'no-cache',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Pragma': 'no-cache',
'Connection': 'Upgrade',
'Sec-WebSocket-Key': 'tkK4L2QPcRxOE6r5LtDOkQ==',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
'Sec-WebSocket-Version': '13',
'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits'
};

// 创建 WebSocket 实例并传入请求头
const ws = new WebSocket(url, { headers });

const result = [];

// 监听 WebSocket 连接成功事件
ws.on('open', () => {
console.log('WebSocket 连接已建立');
// 可以在这里发送消息
for (let i = 1; i < 101; i++) {
ws.send(encrypted(i.toString()));
}
});

// 监听接收到消息事件
ws.on('message', (data) => {
console.log('接收到消息:', data.toString());
JSON.parse(data.toString()).data.forEach((item) => {
result.push(Number(item.value));
});
});

// 监听 WebSocket 连接关闭事件
ws.on('close', () => {
console.log('WebSocket 连接已关闭');
function sum(arr) {
let total = 0;
for (let i = 0; i < arr.length; i++) {
total += arr[i];
}
return total;
}
console.log(result);
console.log(sum(result));
});

// 监听 WebSocket 连接错误事件
ws.on('error', (error) => {
console.error('WebSocket 连接出错:', error);
});


猿人学Web-61 实战
https://kingjem.github.io/2025/02/17/猿人学/猿人学Web61题实战/
作者
Ruhai
发布于
2025年2月17日
许可协议