67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
/**
|
|
* 修复 account.js - 单独处理,跳过 AST 清洗
|
|
*/
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const beautify = require('js-beautify').js;
|
|
|
|
const baseDir = 'D:/temp/破解/cursorpro-0.4.5';
|
|
const inputPath = path.join(baseDir, '原版本/extension/out/utils/account.js');
|
|
const outputPath = path.join(baseDir, 'deobfuscated_full/extension/out/utils/account.js');
|
|
const mapPath = path.join(baseDir, 'account_decoded_map.json');
|
|
|
|
console.log('修复 account.js...');
|
|
|
|
// 读取原始代码
|
|
let code = fs.readFileSync(inputPath, 'utf8');
|
|
console.log(`原始大小: ${(code.length / 1024).toFixed(2)} KB`);
|
|
|
|
// 加载解码映射
|
|
const decodeMap = JSON.parse(fs.readFileSync(mapPath, 'utf8'));
|
|
console.log(`加载了 ${Object.keys(decodeMap).length} 个解码映射`);
|
|
|
|
// 替换字符串
|
|
let count = 0;
|
|
for (const [pattern, decoded] of Object.entries(decodeMap)) {
|
|
// 转义正则特殊字符
|
|
const escapedPattern = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
const regex = new RegExp(escapedPattern, 'g');
|
|
|
|
// 选择合适的引号
|
|
let replacement;
|
|
if (decoded.includes('\n') || decoded.includes('\r')) {
|
|
replacement = '`' + decoded.replace(/`/g, '\\`').replace(/\$/g, '\\$') + '`';
|
|
} else if (decoded.includes("'") && !decoded.includes('"')) {
|
|
replacement = JSON.stringify(decoded);
|
|
} else {
|
|
replacement = `'${decoded.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}'`;
|
|
}
|
|
|
|
const before = code;
|
|
code = code.replace(regex, replacement);
|
|
if (code !== before) {
|
|
count++;
|
|
}
|
|
}
|
|
console.log(`替换了 ${count} 个字符串`);
|
|
|
|
// 清理混淆引用
|
|
code = code.replace(/\['([a-zA-Z_$][a-zA-Z0-9_$]*)'\]/g, '.$1');
|
|
code = code.replace(/!!\[\]/g, 'true');
|
|
code = code.replace(/!\[\]/g, 'false');
|
|
|
|
// 美化代码(设置超时防止卡死)
|
|
console.log('美化代码...');
|
|
code = beautify(code, {
|
|
indent_size: 4,
|
|
preserve_newlines: true,
|
|
max_preserve_newlines: 2
|
|
});
|
|
|
|
console.log(`处理后大小: ${(code.length / 1024).toFixed(2)} KB`);
|
|
|
|
// 保存
|
|
fs.writeFileSync(outputPath, code);
|
|
console.log(`已保存: ${outputPath}`);
|