| 123456789101112131415161718192021222324252627282930313233343536 |
- // 直接绕过 bytenode,用 vm.Script 试
- const fs = require('fs');
- const vm = require('vm');
- const target = process.argv[2];
- const raw = fs.readFileSync(target);
- console.log('size:', raw.length);
- // 尝试 1:整段作 cachedData
- function try1(label, buf) {
- try {
- const s = new vm.Script('"\u200b"', { cachedData: buf });
- console.log(`[${label}] rejected=`, s.cachedDataRejected);
- } catch (e) {
- console.log(`[${label}] ERR:`, e.code, e.message);
- }
- }
- try1('full', raw);
- try1('skip2', raw.subarray(2)); // 去掉 bytenode 头
- try1('skip4', raw.subarray(4)); // 去掉更多
- // 试 brotli 解压后作 cachedData
- const zlib = require('zlib');
- for (let skip of [0, 2, 4, 8]) {
- try {
- const d = zlib.brotliDecompressSync(raw.subarray(skip));
- try1(`brotli-skip${skip}`, d);
- } catch (e) { /* skip */ }
- }
- // 看几个特殊位置的字节
- console.log('\n[byte map]');
- for (let i = 0; i < 16; i++) {
- console.log(` [${i}] = 0x${raw[i].toString(16).padStart(2, '0')} (${raw[i]})`);
- }
|