vanzy-protect
Version:
Epic Obfuscator Yeahhh
120 lines (119 loc) • 5.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.E_FNC_NAME = exports.R_FNC_NAME = exports.B_FNC_NAME = exports.A_FNC_NAME = exports.CONFIG_PATH = void 0;
const commander = require("commander");
const fs = require("fs");
const espree = require("espree");
const kolorist = require("kolorist");
const cfg_1 = require("./config/cfg");
const error_1 = require("./log/error");
const traverse_1 = require("./traverse/traverse");
const obfuscateName_1 = require("./obfuscate/obfuscateName");
const checkVersion_1 = require("./program/checkVersion");
const constants_1 = require("./program/constants");
const applyLines_1 = require("./obfuscate/applyLines");
const applyArt_1 = require("./obfuscate/applyArt");
const Randomizer_1 = require("./random/Randomizer");
const generateProxyFunction_1 = require("./obfuscate/generateProxyFunction");
const StringToArrayExtr_1 = require("./obfuscate/StringToArrayExtr");
const program = new commander.Command();
program
.option('-i, --input <file>', 'Input file')
.option('-o, --output <file>', 'Output file')
.option('-c, --config <file>', 'Config file')
.option('-s, --logseed', 'Print out the seed at the end')
.option('-n, --noupdate', 'Don\'t check for updates')
.option('-h, --help', 'Get help')
.option('-v, --version', 'Get the version');
program.helpOption(false);
const opts = program.parse().opts();
const { input, output, config, help, version, logseed, noupdate } = opts;
if (help) {
console.log(constants_1.HELP_TEXT);
process.exit(0);
}
if (version) {
console.log(constants_1.VERSION);
process.exit(0);
}
if (!input) {
(0, error_1.error)('You must specify an input', true);
process.exit(1);
}
if (!output) {
(0, error_1.error)('You must specify an output', true);
process.exit(1);
}
if (!config) {
(0, error_1.error)('You must specify a config file', true);
process.exit(1);
}
const vcheckPromise = noupdate ? null : (0, checkVersion_1.checkVersion)();
exports.CONFIG_PATH = config;
const string = String(fs.readFileSync(input));
const ast = espree.parse(string, { ecmaVersion: (0, cfg_1.cfg)().input.esVersion });
new Randomizer_1.Randomizer((0, cfg_1.cfg)().input.seed);
console.log(kolorist.white(` ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠳⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣀⡴⢧⣀⠀⠀⣀⣠⠤⠤⠤⠤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠘⠏⢀⡴⠊⠁⠀⠀⠀⠀⠀⠀⠈⠙⠦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢶⣶⣒⣶⠦⣤⣀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣟⠲⡌⠙⢦⠈⢧⠀
⠀⠀⠀⣠⢴⡾⢟⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡴⢃⡠⠋⣠⠋⠀
⠐⠀⠞⣱⠋⢰⠁⢿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⠤⢖⣋⡥⢖⣫⠔⠋⠀⠀⠀
⠈⠠⡀⠹⢤⣈⣙⠚⠶⠤⠤⠤⠴⠶⣒⣒⣚⣩⠭⢵⣒⣻⠭⢖⠏⠁⢀⣀⠀⠀⠀⠀
⠠⠀⠈⠓⠒⠦⠭⠭⠭⣭⠭⠭⠭⠭⠿⠓⠒⠛⠉⠉⠀⠀⣠⠏⠀⠀⠘⠞⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⢤⣀⠀⠀⠀⠀⠀⠀⣀⡤⠞⠁⠀⣰⣆⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠘⠿⠀⠀⠀⠀⠀⠈⠉⠙⠒⠒⠛⠉⠁⠀⠀⠀⠉⢳⡞⠉⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ` + kolorist.green(input) + '\nDONE ENCRYPT WITH VANZY-PROTECT!! \n' + kolorist.yellow(constants_1.VERSION)));
const t = Date.now();
StringToArrayExtr_1.StringToArrayExtr.init();
var aFnName = Randomizer_1.Randomizer.INSTANCE.randIName(64);
var bFnName = Randomizer_1.Randomizer.INSTANCE.randIName(64);
var rFnName = Randomizer_1.Randomizer.INSTANCE.randIName(64);
var eFnName = Randomizer_1.Randomizer.INSTANCE.randIName(64);
const A_FNC_NAME = () => aFnName;
exports.A_FNC_NAME = A_FNC_NAME;
const B_FNC_NAME = () => bFnName;
exports.B_FNC_NAME = B_FNC_NAME;
const R_FNC_NAME = () => rFnName;
exports.R_FNC_NAME = R_FNC_NAME;
const E_FNC_NAME = () => eFnName;
exports.E_FNC_NAME = E_FNC_NAME;
(0, obfuscateName_1.updateRedo)();
(0, obfuscateName_1.addObfuscated)('Array', rFnName);
(0, obfuscateName_1.addObfuscated)('RegExp', eFnName);
const headerFncName1 = Randomizer_1.Randomizer.INSTANCE.randIName(64);
const headerFncName2 = Randomizer_1.Randomizer.INSTANCE.randIName(64);
(0, obfuscateName_1.addObfuscated)(null, headerFncName1);
(0, obfuscateName_1.addObfuscated)(null, headerFncName2);
const proxyFnc = (0, generateProxyFunction_1.generateProxyFunction)((0, exports.A_FNC_NAME)(), headerFncName1, headerFncName2);
const obf = (0, traverse_1.traverse)(ast.body);
const mapped = obfuscateName_1.REDONE_PAIRS.map(([og, n]) => `const ${n}=${og}`).join(';');
const result = `
${proxyFnc};const ${(0, exports.B_FNC_NAME)()}=Boolean;${StringToArrayExtr_1.StringToArrayExtr.generateHeader()}
${mapped};
const ${rFnName} = Array;const ${eFnName}=RegExp;
${obf};
`;
var finalResult = result;
if ((0, cfg_1.cfg)().format.removeEmptyLines)
while (finalResult.includes('\n\n'))
finalResult = finalResult.replaceAll('\n\n', '\n');
if ((0, cfg_1.cfg)().format.shrink)
finalResult = finalResult.replaceAll('\n', ';');
finalResult = (0, applyLines_1.applyLines)(finalResult);
finalResult = (0, applyArt_1.applyArt)(finalResult);
console.log(kolorist.white('Done in ' + kolorist.magenta((Date.now() - t) + ' ms')));
if (logseed) {
console.log('\tObfuscation seed is ' + kolorist.green((0, cfg_1.cfg)().input.seed));
}
fs.writeFileSync(output, finalResult);
(async () => {
if (noupdate)
return;
var { currentVersion, latestVersion } = await vcheckPromise;
currentVersion = currentVersion.slice(1);
if (currentVersion !== latestVersion)
(0, checkVersion_1.printVersionInfo)([currentVersion, latestVersion]);
})();