代码混淆
什么是混淆
- 混淆是指在js编译期间,对代码进行花指令、流程更改等转换,目的是为了保护代码
如何开始混淆的工作
- EC的IDEA开发工具在升级到 9.4.0后,会在在工程模块下面创建一个 obfuscator.json文件
- 默认是不开启混淆的,需要正确设置json配置中的binPath的路径才能支持工作
安装和设置混淆器
安装Node.js
安装 npm install -g javascript-obfuscator
- windows在cmd 或者powershell中运行以下命令
- 参考https://www.npmjs.com/package/javascript-obfuscator
- 也可以百度搜索 javascript-obfuscator 的安装
npm install -g javascript-obfuscatornpm install -g class-validator配置说明
- 这里的默认配置是测试过的,可以运行的,更多配置可以参考工具的官网[https://www.npmjs.com/package/javascript-obfuscator]
- nodeBinPath属性,nodejs的的node.exe文件路径,请看实例
- obfuscatorBinPath属性,javascript-obfuscator 的可执行文件的路径,
- 安装NodeJs后,默认全局安装路径为:C:\Users\Administrator\AppData\Roaming\npm\node_modules(可通过npm命令npm root -g查看。Administrator用户名各人一般不同。)
- node_modules 找到 javascript-obfuscator全路径复制过来
{ "nodeBinPath": "D:\\programe\\nodejs\\node.exe", "obfuscatorBinPath": "C:\\Users\\Administrator\\AppData\\Roaming\\npm\\node_modules\\javascript-obfuscator\\bin\\javascript-obfuscator", "target": "node", "compact": false, // 是否压缩代码 "log": true, // 是否展示log "optionsPreset": "high-obfuscation", // 混淆程度 "deadCodeInjection": false, "simplify": false, "seed": 10, // 随机种子数量 "controlFlowFlattening": true, "controlFlowFlatteningThreshold": 1, "unicodeEscapeSequence": false, "stringArray": true, "stringArrayRotate": false, "stringArrayShuffle": false, "stringArrayThreshold": 1, "stringArrayWrappersCount": 5, "stringArrayEncoding": ["rc4"], "stringArrayCallsTransform": false, "selfDefending": false, "splitStrings": false, "splitStringsChunkLength": 1}特别说明
- 配置文件中 obfuscatorBinPath 文件路径配置了,并且文件存在,就会默认进行混淆,包括EC编译的js模式和dex模式
- 删除 obfuscatorBinPath 属性值,或者直接删除obfuscator.json,都会导致js代表编译期间不进行混淆
- 混淆会增加代码的体积,不建议一个文件中有很长的代码,建议分开文件进行模块化
- 在自行改动混淆配置属性的时候,可以会导致混淆后无法运行脚本的情况,这个时候只要自己恢复一下默认设置即可
- log开关可以在编译期间看到混淆代码的详细信息
- 混淆是比较耗费电脑资源的的事情,建议在平时调试开发的时候,关闭混淆,在发布、或者打包的时候进行开启