当前位置: 首页 > news >正文

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

目录

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

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

http://www.lryc.cn/news/619285.html

相关文章:

  • 《C++进阶之继承多态》【final + 继承与友元 + 继承与静态成员 + 继承模型 + 继承和组合】
  • HTML第三次作业
  • 腾讯位置商业授权微信小程序关键词输入提示
  • Flink DataStream 按分钟或日期统计数据量
  • 深度学习——03 神经网络(3)-网络优化方法
  • 基于Apache Flink的实时数据处理架构设计与高可用性实战经验分享
  • 搜索引擎核心机制解析
  • 美团搜索推荐统一Agent之性能优化与系统集成
  • 云计算-OpenStack 实战运维:从组件配置到故障排查(含 RAID、模板、存储管理,网络、存储、镜像、容器等)
  • Flink中的窗口
  • HTML5 Canvas实现数组时钟代码,适用于wordpress侧边栏显示
  • 方法论基础。
  • 设计秒杀系统从哪些方面考虑
  • 从零开始:用PyTorch实现线性回归模型
  • 比特币与区块链:去中心化的技术革命
  • VUE2连接USB打印机
  • Pytorch FSDP权重分片保存与合并
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day3
  • 【Qt开发】常用控件(三) -> geometry
  • 疏老师-python训练营-Day44预训练模型
  • php7 太空船运算符
  • Linux 软件编程:文件IO、目录IO、时间函数
  • 适配安卓15(对应的sdk是35)
  • RxJava 在 Android 中的深入解析:使用、原理与最佳实践
  • 大牌点餐接口api对接全流程
  • 《吃透 C++ 类和对象(中):构造函数与析构函数的核心逻辑》
  • Ubuntu22.04轻松安装Qt与OpenCV库
  • 药房智能盘库系统的Python编程分析与实现—基于计算机视觉与时间序列预测的智能库存管理方案
  • 基于大数据spark的医用消耗选品采集数据可视化分析系统【Hadoop、spark、python】
  • 分段锁和限流的间接实现