代码混淆后如何检测JavaScript中的代码完整性?

轩辕子瑄 阅读 12

最近在给项目加代码混淆,但发现混淆后的代码每次构建都不同,之前用的文件哈希校验方法完全失效了。想请教下大家,有没有什么方法能既保持代码混淆,又能检测代码是否被非法篡改?

我之前是这样校验的:if (currentHash !== originalHash) alert('代码被篡改'),但现在混淆后的代码每次打包生成的字符串都不一样,连正则替换关键函数名都试过,但测试环境被人动了代码的话还是没法及时发现。

试过在混淆配置里固定seed值,用了webpack-obfuscator的seed: 12345参数,但发现不同版本的构建工具生成结果还是不一致。有没有什么更可靠的代码完整性校验方案,或者混淆时保留特定验证标记的方法?

const obfuscatorConfig = {
  stringArray: true,
  selfDefending: true,
  rotateStringArray: true,
  // 尝试固定seed但没解决根本问题
  seed: Date.now()
};
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
雯雯 ☘︎
在混淆前插入一个固定标识的验证函数,混淆时把它加入白名单保留不变,校验时只对比这个标记。

应该用这种方案更靠谱:
const obfuscatorConfig = {
stringArray: true,
selfDefending: true,
rotateStringArray: true,
seed: 12345, // 固定seed
reservedNames: ['__verify'], // 保留验证函数名
};

// 在入口文件添加验证标记
function __verify() {
return 'fixed-verification-string';
}

// 校验逻辑
if (__verify() !== 'fixed-verification-string') {
alert('代码被篡改');
}


别忘了把 __verify 加到混淆工具的保留名单里,这样它就不会被重命名或修改。
点赞
2026-02-19 13:00