javascript-obfuscator 混淆代碼
// index.json
{
? ? "compact": false,
? ? "controlFlowFlattening": true,
? ? "controlFlowFlatteningThreshold": 1,
? ? "numbersToExpressions": true,
? ? "simplify": true,
? ? "shuffleStringArray": true,
? ? "splitStrings": true,
? ? "stringArrayThreshold": 1
}

// index.js
// 檢索的相對文件夾
const relativePath = './js'
// 不需要混淆的js或文件夾
const exitFile = ['jquery-3.6.1.min.js']
?
?
var fs = require('fs')
var process = require('child_process');
var readDir = fs.readdirSync(relativePath);
?
?
// 需要存在的js
const czFile = []
?
var filePath = relativePath
var arr = new Array()
readFile(readDir, filePath)
// 讀取相對路徑下的所有文件
function readFile(readDir, filePath) {
? ? if (readDir.length > 0) {
? ? ? ? for (var i = 0; i < readDir.length; i++) {
? ? ? ? ? ? scannerFile(readDir[i], filePath)
? ? ? ? }
? ? }
}
// 掃描文件進行檢索出js文件進行混淆
function scannerFile(file, filePath) {
? ? console.log("file-----" + file);
? ? var readdirpath = ""
? ? if (filePath == './') {
? ? ? ? readdirpath = filePath + file
? ? } else {
? ? ? ? readdirpath = filePath + "/" + file
? ? }
? ? if (exitFile.indexOf(file) < 0) {
? ? ? ? console.log('-->Start entering FS');
? ? ? ? fs.stat(readdirpath, (err, data) => {
? ? ? ? ? ? if (err) {
? ? ? ? ? ? ? ? console.log(err);
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? if (data.isDirectory()) {
? ? ? ? ? ? ? ? ? ? console.log('-->isDirectory:' + file);
? ? ? ? ? ? ? ? ? ? var readChildDir = fs.readdirSync(readdirpath);
? ? ? ? ? ? ? ? ? ? console.log(readChildDir);
? ? ? ? ? ? ? ? ? ? readFile(readChildDir, readdirpath)
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? console.log('-->isNotDirectory:' + file);
? ? ? ? ? ? ? ? ? ? if (file.indexOf('.js') >= 0 && file.indexOf('.json') < 0) {
? ? ? ? ? ? ? ? ? ? ? ? // 開始混淆代碼
? ? ? ? ? ? ? ? ? ? ? ? console.log('-->Start confusing code:' + file);
? ? ? ? ? ? ? ? ? ? ? ? var cmd = ' javascript-obfuscator ' + readdirpath + ' --config index.json --output ' + readdirpath;
? ? ? ? ? ? ? ? ? ? ? ? process.exec(cmd, function(error, stdout, stderr) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log("error:" + error);
? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log("stdout:" + stdout);
? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log("stderr:" + stderr);
? ? ? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? ? ? ? ? arr.push(readdirpath)
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? console.log('Non-folder - Non-js code :' + file);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? })
?
? ? } else {
? ? ? ? console.log('-->skip------------');
? ? }
}

使用方式:

