备份: 完整开发状态(含反混淆脚本和临时文件)
This commit is contained in:
65
convert_unicode.js
Normal file
65
convert_unicode.js
Normal file
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* 安全转换 Unicode 转义序列为中文
|
||||
* 只处理字符串字面量,不破坏正则表达式
|
||||
*/
|
||||
const fs = require('fs');
|
||||
const babel = require('@babel/core');
|
||||
const traverse = require('@babel/traverse').default;
|
||||
const generate = require('@babel/generator').default;
|
||||
const t = require('@babel/types');
|
||||
|
||||
const inputPath = 'D:/temp/破解/cursorpro-0.4.5/deobfuscated_full/extension/out/webview/provider.js';
|
||||
const code = fs.readFileSync(inputPath, 'utf8');
|
||||
|
||||
console.log('安全转换 Unicode...');
|
||||
|
||||
let ast;
|
||||
try {
|
||||
ast = babel.parseSync(code, { sourceType: 'script' });
|
||||
} catch (e) {
|
||||
console.error('解析失败:', e.message);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
let converted = 0;
|
||||
|
||||
traverse(ast, {
|
||||
StringLiteral(path) {
|
||||
const value = path.node.value;
|
||||
// 检查是否包含 Unicode 转义(已解码的中文字符)
|
||||
// 或者检查原始值是否有 \u
|
||||
if (path.node.extra && path.node.extra.raw) {
|
||||
const raw = path.node.extra.raw;
|
||||
if (raw.includes('\\u')) {
|
||||
// 保持已解码的 value,只是清除 extra 让生成器使用 value
|
||||
delete path.node.extra;
|
||||
converted++;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
console.log(`处理了 ${converted} 个字符串`);
|
||||
|
||||
const output = generate(ast, {
|
||||
comments: false,
|
||||
compact: false,
|
||||
jsescOption: {
|
||||
minimal: true // 最小转义,保留中文
|
||||
}
|
||||
}, code);
|
||||
|
||||
fs.writeFileSync(inputPath, output.code);
|
||||
|
||||
// 验证
|
||||
try {
|
||||
babel.parseSync(output.code, { sourceType: 'script' });
|
||||
console.log('✅ 语法正确');
|
||||
} catch (e) {
|
||||
console.error('❌ 语法错误:', e.message);
|
||||
}
|
||||
|
||||
// 统计
|
||||
const unicodeRemaining = (output.code.match(/\\u[0-9a-fA-F]{4}/g) || []).length;
|
||||
console.log(`剩余 Unicode 转义: ${unicodeRemaining}`);
|
||||
console.log(`文件大小: ${(output.code.length / 1024).toFixed(2)} KB`);
|
||||
Reference in New Issue
Block a user