加密思路
1、代码混淆
2、编译成二进制代码或者字节码执行
3、编译成通过第三方js解释引擎的opcode
代码混淆
基于代码的AST进行相应的转换和处理。
一般操作是移除空格换行符,字面量替换。
常用工具
UglifyJS
webpack-obfuscator
实践参考
vue项目配置 webpack-obfuscator 进行代码加密混淆
编译成二进制代码或者字节码执行
使用npm包bytenode
bytenode官网
electron 代码保护
保护 Node.js 项目的源代码
- 注意点
js字节码平台相关,且node版本相关。
js字节码是js执行引擎v8的产物。
2、使用asm.js编译成wasm执行
wasm二进制文件并不安全,可以通过wasm2wast反编译成wast文件。
不过市场上的wasm2wast工具并不好用。也就是说并不能完全成功反编译成功。
只有asm.js语法写的文件才能转成 wasm
在 WebAssembly 中调用 Web API
向 wasm 中传递 js 变量
获取并使用从 js 传递的变量
编译成通过第三方js解释引擎的opcode
https://github.com/sablejs/sablejs
实践参考:
https://segmentfault.com/a/1190000008402872
https://www.assemblyscript.org/
https://www.wasm.com.cn/getting-started/advanced-tools/
https://jishuin.proginn.com/p/763bfbd591ee
https://www.wasm.com.cn/getting-started/advanced-tools/
https://juejin.cn/post/6844903813619384327#heading-3