+-
一个强大的 JavaScript 和 Node.js 代码混淆器,能够为源代码提供多种保护功能,防止代码被轻易理解和篡改。

javascript-obfuscator

一个强大的 JavaScript 和 Node.js 代码混淆器,能够为 JavaScript 源代码提供多种保护功能,防止代码被轻易理解和篡改。

Github地址

https://github.com/javascript-obfuscator/javascript-obfuscator

一个强大的 JavaScript 和 Node.js 代码混淆器,能够为源代码提供多种保护功能,防止代码被轻易理解和篡改。

功能特性

  • 变量重命名:将代码中的变量名替换为难以理解的名称,增加代码的可读性难度。

  • 字符串提取与加密:将字符串字面量提取出来并进行加密,防止敏感信息被直接暴露。

  • 死代码注入:在代码中注入一些无实际功能的代码片段,增加代码的复杂性,干扰反混淆工具。

  • 控制流扁平化:改变代码的执行流程,将复杂的控制结构转换为更难以理解的形式。

  • 代码变换:对代码进行多种变换,如将数字转换为表达式、简化代码结构等,进一步增加代码的复杂性。

  • 支持多种选项:提供了丰富的配置选项,用户可以根据需要自定义混淆的强度和方式。

使用方法

  • 通过 Yarn 或 NPM 安装

    • 使用 Yarn:yarn add --dev javascript-obfuscator

    • 使用 NPM:npm install --save-dev javascript-obfuscator

  • 在浏览器中使用

    • 从 CDN 加载:<script src="https://cdn.jsdelivr.net/npm/javascript-obfuscator/dist/index.browser.js"></script>

    • 从本地node_modules加载:<script src="./node_modules/javascript-obfuscator/dist/index.browser.js"></script>

  • Node.js API 使用示例

    varJavaScriptObfuscator=require('javascript-obfuscator');
    varobfuscationResult =JavaScriptObfuscator.obfuscate(
    `
    (function(){
    var variable1 = '5' - 3;
    var variable2 = '5' + 3;
    var variable3 = '5' + - '2';
    var variable4 = ['10','10','10','10','10'].map(parseInt);
    var variable5 = 'foo ' + 1 + 1;
    console.log(variable1);
    console.log(variable2);
    console.log(variable3);
    console.log(variable4);
    console.log(variable5);
    })();
    `,
    {
    compact:false,
    controlFlowFlattening:true,
    controlFlowFlatteningThreshold:1,
    numbersToExpressions:true,
    simplify:true,
    stringArrayShuffle:true,
    splitStrings:true,
    stringArrayThreshold:1
    }
    );
    console.log(obfuscationResult.getObfuscatedCode());

  • CLI 使用

    • 基本命令格式:javascript-obfuscator input_file_name.js [options]

    • 可以通过--output指定输出文件或目录。

    • 支持多种 CLI 选项,如--compact--control-flow-flattening--dead-code-injection等。

注意事项

  • 性能影响:某些混淆选项(如控制流扁平化、死代码注入)可能会显著降低代码的运行速度,建议根据实际需求谨慎使用。

  • 代码冲突:在混淆多个文件时,建议为每个文件设置不同的identifiersPrefix,以避免全局标识符之间的冲突。

  • 调试困难:启用调试保护和自卫功能后,代码的调试难度会大大增加,可能会导致开发和维护的困难。