代码混淆
什么是混淆
- 混淆是指在js编译期间,对代码进行花指令、流程更改等转换,目的是为了保护代码
如何开始混淆的工作
- EC iOS 的IDEA开发工具在升级到 5.0.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-obfuscator
npm 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开关可以在编译期间看到混淆代码的详细信息
- 混淆是比较耗费电脑资源的的事情,建议在平时调试开发的时候,关闭混淆,在发布、或者打包的时候进行开启