var base64hash = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function atob(s) {
s = s.replace(/\s|=/g, '');
var cur, prev, mod, i = 0, result = [];
while (i < s.length) {
cur = base64hash.indexOf(s.charAt(i));
mod = i % 4;
switch (mod) {
case 0: break;
case 1: result.push(String.fromCharCode(prev << 2 | cur >> 4)); break;
case 2: result.push(String.fromCharCode((prev & 0x0f) << 4 | cur >> 2)); break;
case 3: result.push(String.fromCharCode((prev & 3) << 6 | cur)); break;
}
prev = cur;
i++;
}
return result.join('');
}
function B(e) {
let t = e.words.length;
let n = new Uint8Array(e.sigBytes);
let r = 0;
for (let i = 0; i < t; i++) {
let word = e.words;
let a = [word >> 24 & 255, word >> 16 & 255, word >> 8 & 255, word & 255];
for (let t = 0; t < 4 && r < e.sigBytes; t++) n[r++] = a[t];
}
return n;
}
function V(e) {
let t = e.replace(/-/g, '+').replace(/_/g, '/');
while (t.length % 4) t += '=';
let n = atob(t);
let r = n.length;
let i = new Uint8Array(r);
for (let e = 0; e < r; e++) i[e] = n.charCodeAt(e);
return i;
}
async function decryptAES(key, data, iv) {
let c = crypto.createSecretKey(key, 'raw');
let d = crypto.createDecipheriv('aes-128-gcm', c, iv);
d.setAuthTag(data.slice(data.length - 16));
let res = d.update(data.slice(0, data.length - 16), null, 'utf8') + d.final('utf8');
return res;
}
function md5(str) {
let hash = crypto.createHash('md5').update(str).digest();
let words = [];
for (let i = 0; i < 16; i += 4) {
words.push((hash << 24) | (hash[i + 1] << 16) | (hash[i + 2] << 8) | hash[i + 3]);
}
return { words, sigBytes: 16 };
}
async function decode(main, par, tt, range = 5, salt = "EncryptKeyByRoss") {
let buf = V(main);
let iv = buf.slice(0, 12);
let body = buf.slice(12);
for (let i = 0; i <= range; i++) {
try {
let key2 = md5(`${ip}-${salt}-${time + i}`);
let res2 = await decryptAES(B(key2), body, iv);
console.log("结果:", JSON.parse(res2));
return;
} catch {}
}
console.log("\n❌ 失败");
}