html原生js文件使用javascript-obfuscator插件进行加密处理

发布于:2025-08-14 ⋅ 阅读:(33) ⋅ 点赞:(0)

目录

1.打开代码编辑器终端 下载js加密插件

2.创建混淆配置文件

3.创建混淆脚本

4. 运行混淆脚本

5.修改了js需要重新执行加密


1.打开代码编辑器终端 下载js加密插件

npm install --save-dev javascript-obfuscator

下载成功之后在根目录会多三个文件

2.创建混淆配置文件

在项目的根目录下创建一个名为 obfuscator.config.js 的文件,并添加以下内容配置:

module.exports = {
  // 是否压缩代码,去除空格、换行等,使代码变成一行,减小文件体积
  compact: true,
  // 控制流扁平化:将 if、for、while 等结构转换为 switch 或函数调用形式,增加逻辑阅读难度
  controlFlowFlattening: true,
  // 死代码注入:在代码中插入永远不会执行的“垃圾”代码,干扰反混淆分析
  deadCodeInjection: true,
  // 调试保护:防止用户在浏览器中使用开发者工具(如断点调试、控制台)分析代码
  // 启用后可能导致页面在调试器中卡死或崩溃
  debugProtection: false,
  // 调试保护的检测频率(毫秒),仅在 debugProtection 为 true 时有效
  // 值越小检测越频繁,对性能影响越大,设为 0 表示禁用
  debugProtectionInterval: 0,
  // 禁用 console 输出:移除或屏蔽 console.log、console.debug 等调试信息
  disableConsoleOutput: true,
  // 标识符(变量名、函数名等)生成方式
  // 可选值:'hexadecimal'(十六进制,如 _0xabc123)、'mangled'(短字母,如 a, b, c)
  identifierNamesGenerator: "hexadecimal",
  // 是否在控制台输出混淆过程中的日志信息(用于调试混淆配置)
  log: false,
  // 是否重命名全局变量和函数(启用后可能影响外部调用,如 window.myFunction)
  // 一般建议设为 false,避免破坏全局作用域
  renameGlobals: false,
  // 是否随机打乱字符串数组的顺序,增加分析难度
  rotateStringArray: true,
  // 自我保护机制:检测代码是否被修改或调试,若被篡改则可能导致代码失效或报错
  selfDefending: true,
  // 字符串数组:将字符串字面量收集到一个数组中,并通过索引访问,隐藏原始字符串内容
  stringArray: true,
  // 字符串数组的编码方式,可选 'base64'、'rc4' 等,rc4安全性更高但是比较消耗性能
  // 注意:必须是数组形式,如 ['base64'],且值唯一
  stringArrayEncoding: ["base64"],
  // 字符串数组启用阈值:只有当字符串数量占比超过该值时才启用 stringArray
  // 范围 0 - 1,0.75 表示 75% 的字符串将被放入数组
  stringArrayThreshold: 0.75,
  // 是否将字符串转换为 Unicode 转义序列(如 \u0048\u0065\u006c\u006c\u006f)
  // 可增加混淆程度,但会显著增大代码体积
  unicodeEscapeSequence: false,
  sourceMap: false, // 禁用 sourceMap,防止映射回原始代码
  // domainLock: ["yourdomain.com"], // 域名锁定
  // domainLockRedirectUrl: "https://google.com/", // 防盗跳转
};

3.创建混淆脚本

在项目的根目录下创建一个名为 obfuscate.js 的脚本来执行混淆操作。这个脚本会遍历 js 目录下的所有 .js 文件并进行混淆。

const fs = require("fs");
const path = require("path");
const JavaScriptObfuscator = require("javascript-obfuscator");
const obfuscationConfig = require("./obfuscator.config.js");
// 获取 js 目录路径
const jsDir = path.join(__dirname, "assets", "js"); // 获取js目录路径
const obfJsDir = path.join(__dirname, "assets", "obf-js"); // 输出目录到新的文件夹
console.log(`JS Directory: ${jsDir}`); // 打印 JS 目录路径以便调试
console.log(`Output Directory: ${obfJsDir}`); // 打印输出目录路径以便调试
// 判断 js 目录是否存在
if (!fs.existsSync(jsDir)) {
  console.error(`Directory ${jsDir} does not exist.`);
  process.exit(1);
}
// 创建 obf-js 目录(如果不存在)
if (!fs.existsSync(obfJsDir)) {
  fs.mkdirSync(obfJsDir, { recursive: true });
}
// 遍历 js 目录下的所有 .js 文件
function walkDir(dir) {
  let results = [];
  try {
    const list = fs.readdirSync(dir);
    console.log(`Files in directory ${dir}:`, list); // 打印目录中的文件列表以便调试
    list.forEach((file) => {
      file = path.join(dir, file);
      const stat = fs.statSync(file);
      if (stat && stat.isDirectory()) {
        /* Recurse into a subdirectory */
        results = results.concat(walkDir(file));
      } else {
        /* Is a file */
        results.push(file);
      }
    });
  } catch (error) {
    console.error(`Error reading directory ${dir}:`, error.message);
  }
  return results;
}
const jsFiles = walkDir(jsDir).filter((file) => path.extname(file) === ".js");
jsFiles.forEach((file) => {
  try {
    // 读取原始代码文件
    const originalCode = fs.readFileSync(file, "utf8");

    // 执行混淆
    const obfuscatedCode = JavaScriptObfuscator.obfuscate(
      originalCode,
      obfuscationConfig
    );

    // 构建输出文件路径
    const fileName = path.basename(file); // 获取文件名(包括 .js 扩展名)
    const outputFilePath = path.join(obfJsDir, fileName); // 输出路径

    // 写入混淆后的代码到新文件
    fs.writeFileSync(
      outputFilePath,
      obfuscatedCode.getObfuscatedCode(),
      "utf8"
    );

    console.log(`已混淆文件: ${file} -> ${outputFilePath}`);
  } catch (error) {
    console.error(`混淆文件 ${file} 时发生错误:`, error.message);
    console.error(`详细错误信息:`, error.errors); // 打印详细的错误信息
  }
});
console.log("所有文件混淆完成!");

4. 运行混淆脚本

node obfuscate.js

加密之后的js文件

生成新的js文件之后替换html的路径引入,也可以修改加密的js文件夹名称为之前的,本地调试用没有加密的,上线就改为加密的(再次加密的时候把文件夹名称改回来,js文件夹是未加密的,比改html路径方便但是容易忘记哈哈

这个就是引用的加密的js文件

5.修改了js需要重新执行加密

node obfuscate.js

如果改了文件夹名称执行加密之前记得改回来,对应上文件夹名称!!!


网站公告

今日签到

点亮在社区的每一天
去签到