avatar

mdo

Hello

  • 首页
  • 知识库
  • 归档
  • 标签
  • 关于
主页 Js 混淆
文章

Js 混淆

发表于 2026-05-9 更新于 2026-05- 9
作者 mdo
4~5 分钟 阅读

如果你想在 ThinkPHP6 项目中针对特定的某个 JS 文件(例如存放解密逻辑的 decrypt.js)进行混淆,而不是混淆整个项目的代码,可以参考以下三种方式:

1. 命令行方式(最简单直接)

如果你不想配置复杂的构建环境,直接使用全局命令行工具即可。

  1. 安装工具:

    bash

    npm install -g javascript-obfuscator
    

    请谨慎使用此类代码。

  2. 执行混淆:

    bash

    # 基础混淆
    javascript-obfuscator ./public/static/js/decrypt.js --output ./public/static/js/decrypt.min.js
    
    # 高强度混淆(带加密字符串和防调试)
    javascript-obfuscator ./public/static/js/decrypt.js --output ./public/static/js/decrypt.min.js --string-array true --string-array-encoding 'base64' --debug-protection true --self-defending true
    

    请谨慎使用此类代码。

    [1]

2. 使用 Node.js 脚本批量处理(推荐)

如果你有多个指定文件,或者想在发布前自动化处理,可以写一个简单的 obfuscate.js 脚本放到项目根目录。

javascript

// obfuscate.js
const JavaScriptObfuscator = require('javascript-obfuscator');
const fs = require('fs');

// 1. 指定要处理的文件路径
const targetFiles = [
    './public/static/js/decrypt.js',
    './public/static/js/api_config.js'
];

targetFiles.forEach(file => {
    const code = fs.readFileSync(file, 'utf8');
    
    // 2. 执行混淆
    const obfuscatedCode = JavaScriptObfuscator.obfuscate(code, {
        compact: true,
        controlFlowFlattening: true,
        stringArray: true,
        stringArrayEncoding: ['base64'],
        identifierNamesGenerator: 'hexadecimal'
    }).getObfuscatedCode();

    // 3. 覆盖原文件或另存为
    fs.writeFileSync(file.replace('.js', '.min.js'), obfuscatedCode);
    console.log(`${file} 混淆完成!`);
});

请谨慎使用此类代码。

运行: node obfuscate.js

技术
许可协议:  CC BY 4.0
分享

相关文章

7月 26, 2026

完美地解决 TP3 老系统数据的平滑读取

为了彻底、完美地解决 TP3 老系统数据的平滑读取,必须解决两个核心痛点: TP3 的盲猜反序列化机制(标量存原样,数组/对象存原生 serialize,同时兼容 json)。 TP3 与 TP6 的缓存前缀(Prefix)不一致。 以下是为你量身定制的终极落地解决方案,通

7月 26, 2026

thinkphp3 redis序列化和反序列化

在老系统重构迁移至 ThinkPHP 6 (TP6) 的过程中,ThinkPHP 3 (TP3) 的 Redis 序列化历史遗留问题是最核心的连环坑之一。 TP3 的 S('key', $value) 缓存方法和底层 Redis 驱动,在存储非字符串(如数组、对象)时,有一套独特的序列化行为。如果不

7月 24, 2026

Table 空间极易发生哈希冲突并溢出

既然你没有在业务中主动调用 Room,只使用了全局广播,那么这个问题就非常明确了:即使你不用房间功能,think-swoole 只要开启了 WebSocket,底层就会强行初始化并注入一个名为 Room 的驱动组件。 [1] 框架底层默认使用 table 类型来作为 Room 的存储介质。当进行全局

下一篇

Forgot password

上一篇

jquery-tagsinput标签插件

最近更新

  • 完美地解决 TP3 老系统数据的平滑读取
  • thinkphp3 redis序列化和反序列化
  • Table 空间极易发生哈希冲突并溢出
  • 将监控程序直接跑在云端
  • AI 驱动型 Facebook 群组关键词监控 Chrome 浏览器插件

热门标签

API CodeGeex Gitkraken Management Manticore Premiere Sublime Swoole ThinkPHP ThinkPHP5

目录

©2026 mdo. 保留部分权利。