代码混淆后如何检测JavaScript中的代码完整性?
最近在给项目加代码混淆,但发现混淆后的代码每次构建都不同,之前用的文件哈希校验方法完全失效了。想请教下大家,有没有什么方法能既保持代码混淆,又能检测代码是否被非法篡改?
我之前是这样校验的:if (currentHash !== originalHash) alert('代码被篡改'),但现在混淆后的代码每次打包生成的字符串都不一样,连正则替换关键函数名都试过,但测试环境被人动了代码的话还是没法及时发现。
试过在混淆配置里固定seed值,用了webpack-obfuscator的seed: 12345参数,但发现不同版本的构建工具生成结果还是不一致。有没有什么更可靠的代码完整性校验方案,或者混淆时保留特定验证标记的方法?
const obfuscatorConfig = {
stringArray: true,
selfDefending: true,
rotateStringArray: true,
// 尝试固定seed但没解决根本问题
seed: Date.now()
};
应该用这种方案更靠谱:
别忘了把
__verify加到混淆工具的保留名单里,这样它就不会被重命名或修改。