asarmor
Version:
Protect asar archive files from extraction
56 lines (55 loc) • 2.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const extra_typings_1 = require("@commander-js/extra-typings");
const src_1 = require("../src");
const package_json_1 = require("../package.json");
function parseNumber(value, isRequired) {
if (value == null && !isRequired) {
return;
}
const parsedValue = parseInt(value, 10);
if (isNaN(parsedValue)) {
throw new extra_typings_1.InvalidArgumentError('Not a number.');
}
return parsedValue;
}
const program = new extra_typings_1.Command()
.version(package_json_1.version)
.requiredOption('-a, --archive <archive>', 'input asar file (required)')
.requiredOption('-o, --output <output>', 'output asar file (required)')
.option('-b, --backup', 'create backup')
.option('-r, --restore', 'restore backup')
.option('-bl, --bloat [gigabytes]', 'fill the drive with useless data on extraction attempt', (value) => parseNumber(value, false))
.option('-e, --encryption', 'encrypt the JavaScript files stored in the archive')
.addHelpText('after', `
Examples:
$ asarmor -a app.asar -o asarmor.asar --backup --bloat 1000
$ asarmor -a plaintext.asar -o encrypted.asar --encryption
`)
.parse(process.argv);
const options = program.opts();
if (!options.archive || !options.output) {
program.help();
process.exit();
}
async function main() {
if (options.encryption) {
await (0, src_1.encrypt)({
src: options.archive,
dst: options.output,
});
}
const asarmor = await (0, src_1.open)(options.encryption ? options.output : options.archive);
if (options.restore) {
await asarmor.restoreBackup();
}
else if (options.output) {
if (options.backup)
await asarmor.createBackup();
if (options.bloat)
asarmor.patch((0, src_1.createBloatPatch)(options.bloat === true ? undefined : options.bloat));
await asarmor.write(options.output);
}
}
main();