UNPKG

asarmor

Version:

Protect asar archive files from extraction

29 lines (21 loc) 1.26 kB
/** * 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'); })();