asarmor
Version:
Protect asar archive files from extraction
29 lines (21 loc) • 1.26 kB
JavaScript
/**
* JavaScript to C/C++.
*
* This script mangles and compresses source code of required core JavaScript functions and embeds them into a static C++ header file `includes.h`.
*/
const fs = require('fs/promises');
const { join } = require('path');
const terser = require('terser');
const targetDir = join(__dirname, '..', 'src', 'encryption');
const notice = '// DO NOT MODIFY - this file was automatically generated by `scripts/js2c.js`'
const obfuscationOptions = {};
const wrap = (code) => `(${code});`;
const str2buf = (str) => Buffer.concat([Buffer.from(str), Buffer.alloc(1)]);
const buf2pchar = (buf, varname) => `const char ${varname}[]={${Array.prototype.join.call(buf, ',')}};`;
(async () => {
const script1 = await terser.minify(await fs.readFile(join(targetDir, 'includes', 'find-entrypoint.js'), 'utf8'), obfuscationOptions);
const script2 = await terser.minify(await fs.readFile(join(targetDir, 'includes', 'require.js'), 'utf8'), obfuscationOptions);
const scriptFind = buf2pchar(str2buf(wrap(script1.code)), 'scriptFind');
const scriptRequire = buf2pchar(str2buf(wrap(script2.code)), 'scriptRequire');
await fs.writeFile(join(targetDir, 'includes.h'), [notice, scriptFind, scriptRequire].join('\n'), 'utf8');
})();