const fs = require("fs");
const path = require("path");
const { createEnv, loadScript, run } = require("./index.js");
const signers = safeRead("./signers.json", []);
const targets = safeRead("./targets.json", []);
const sandbox = createEnv();
console.log("[env] navigator.userAgent =", run(sandbox, "navigator && navigator.userAgent"));
console.log("[env] navigator.platform =", run(sandbox, "navigator && navigator.platform"));
console.log("[env] screen =", run(sandbox, "screen && (screen.width + 'x' + screen.height)"));
console.log("[env] canvas.toDataURL len=", run(sandbox, "document.createElement('canvas').toDataURL().length"));
console.log("[env] webgl vendor =", run(sandbox, "(function(){var g=document.createElement('canvas').getContext('webgl');return g&&g.getParameter(37445);})()"));
const signerDir = path.join(__dirname, "signer");
const files = fs.existsSync(signerDir) ? fs.readdirSync(signerDir).filter((f) => f.endsWith(".js")) : [];
if (!files.length) {
console.log("\n下一步:把下列签名脚本下载到 ./signer/(命名为 *.js)后重跑 `node demo.js`:");
if (signers.length) {
signers.forEach((s) => console.log(" - " + (s.url || s)));
} else {
console.log(" (signers.json 为空——若目标站点确有签名请求,确保吐环境时已触发它)");
}
if (targets.length) {
console.log("\n参考:已抓到的目标参数真实上线值(用于核对纯算结果):");
targets.slice(0, 5).forEach((t) => console.log(" - " + t.key + " = " + String(t.value).slice(0, 48)));
}
return;
}
console.log("\n[load] 加载 signer/ 下脚本到补环境:");
for (const f of files) {
console.log(" - " + f);
try {
loadScript(sandbox, path.join("signer", f));
} catch (e) {
console.log(" ! 加载失败:" + (e && e.message));
}
}
console.log("\n已加载 signer/ 脚本到补环境。请按 signers.json 找到签名函数名,在 demo.js 末尾调用它。");
console.log("可枚举可疑全局:", run(sandbox, "Object.keys(this).filter(function(k){return /sign|bogus|acrawler|bdms|token/i.test(k);})"));
function safeRead(rel, fallback) {
try {
return JSON.parse(fs.readFileSync(path.resolve(__dirname, rel), "utf8"));
} catch (e) {
return fallback;
}
}