Chrome V3 插件代码进行代码混淆(防止泄露)并打包成 .crx 文件

张开发
2026/4/15 1:44:57 15 分钟阅读

分享文章

Chrome V3 插件代码进行代码混淆(防止泄露)并打包成 .crx 文件
第一阶段准备环境与代码混淆我们不能直接在原文件夹修改代码需要用脚本将代码复制到一个新的 dist发布目录并在复制过程中对 js 文件夹里的代码进行混淆。1. 安装 Node.js确保你的电脑上安装了 Node.js。2. 初始化项目在你的插件根目录即 manifest.json 所在的目录打开终端命令行运行以下命令npm init -y npm install javascript-obfuscator fs-extra --save-dev3. 创建混淆打包脚本在插件根目录下新建一个文件命名为 build.js将以下代码粘贴进去// --- 补丁区开始给老版本 Node 续命 --- // 1. 修复 Object.hasOwn if (!Object.hasOwn) { Object.hasOwn function (obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }; } // 2. 修复 Array.prototype.at 和 String.prototype.at const atPolyfill function(n) { n Math.trunc(n) || 0; if (n 0) n this.length; if (n 0 || n this.length) return undefined; return this[n]; }; if (!Array.prototype.at) Array.prototype.at atPolyfill; if (!String.prototype.at) String.prototype.at atPolyfill; // --- 补丁区结束 --- const fs require(fs-extra); const path require(path); const JavaScriptObfuscator require(javascript-obfuscator); // 源目录和输出目录 const SRC_DIR __dirname; const DIST_DIR path.join(__dirname, dist); // 需要忽略复制的文件/文件夹 const IGNORE_LIST [node_modules, dist, build.js, package.json, package-lock.json, .git]; async function build() { console.log(开始清理旧的 dist 目录...); await fs.emptyDir(DIST_DIR); console.log(正在复制文件到 dist 目录...); const files await fs.readdir(SRC_DIR); for (const file of files) { if (!IGNORE_LIST.includes(file)) { await fs.copy(path.join(SRC_DIR, file), path.join(DIST_DIR, file)); } } console.log(开始混淆 JS 代码...); // 获取 dist/js 目录下的所有文件 const jsDir path.join(DIST_DIR, js); if (fs.existsSync(jsDir)) { const jsFiles await fs.readdir(jsDir); for (const file of jsFiles) { if (file.endsWith(.js)) { const filePath path.join(jsDir, file); const fileContent await fs.readFile(filePath, utf8); // 执行混淆 (这里配置了中等强度的混淆) const obfuscationResult JavaScriptObfuscator.obfuscate(fileContent, { compact: true, controlFlowFlattening: true, // 控制流扁平化 (强混淆核心) controlFlowFlatteningThreshold: 0.75, deadCodeInjection: true, // 注入死代码 deadCodeInjectionThreshold: 0.4, stringArray: true, // 字符串加密 stringArrayEncoding: [base64], stringArrayThreshold: 0.75, transformObjectKeys: true, unicodeEscapeSequence: false }); // 将混淆后的代码覆盖原文件 await fs.writeFile(filePath, obfuscationResult.getObfuscatedCode(), utf8); console.log(已混淆: js/${file}); } } } console.log(✅ 打包混淆完成请查看 dist 目录。); } build().catch(err console.error(打包失败:, err));在 Node.js 生态中如果没有 package.json不仅后面的人接手时一头雾水连你自己换台电脑可能都忘了当时装了什么包。为了让你的项目规范化只需简单两步我们把环境配置固定下来第一步生成并配置标准的 package.json如果你的项目根目录下还没有 package.json 文件直接新建一个文件命名为 package.json把下面这段代码复制进去或者覆盖原有的内容{ name: chrome-extension-obfuscator, version: 1.0.0, description: Chrome 插件代码打包与混淆脚本, main: build.js, scripts: { build: node build.js }, devDependencies: { fs-extra: ^11.2.0, javascript-obfuscator: ^4.1.0 } }这份配置的巧妙之处devDependencies (开发依赖)明确记录了打包需要 fs-extra 和 javascript-obfuscator 这两个工具以及它们的版本号。scripts (快捷脚本)配置了 build: node build.js。以后打包不用敲 node build.js 了直接敲 npm run build 显得更专业。1. 一键安装所有依赖npm install(系统会自动读取 package.json把缺少的 fs-extra 和 javascript-obfuscator 全部下载到 node_modules 文件夹中。)2. 一键执行混淆打包npm run build附加建议极度重要添加 .gitignore既然考虑到了代码交接和版本控制千万不要把 node_modules 文件夹传给别人或推送到 Git 上那个文件夹非常庞大且包含大量系统相关文件。在根目录新建一个文件名为.gitignore注意前面有个点写入以下内容# 忽略依赖包文件夹 node_modules/ # 忽略打包生成的文件夹和 crx 文件 dist/ *.crx *.pem # 忽略可能产生的日志文件 npm-debug.log这样你的整个插件项目结构就达到了商业级标准的规范了

更多文章