爱护 electron 代码有很多思路, 例如默认的 electron 会将代码打包为 asar 格局, 这尽管对客户不可见, 但对稍有编程根底的人来说都是通明的.
而后咱们可能会想到简略的代码做 uglify 解决, 以缩小代码的可读性, 但对于想要破解你软件的人来说只需略微花点精力即可.
再来咱们可能会想到 node 的 addon, 甚至是改写 electron 源码来让外围代码在执行前解密后执行. 但这须要对 node 和 c ++ 非常相熟.
咱们能够折中一下, 即升高实现老本, 又减少破解老本. 应用字节码就能够达到这样的成果.
本文应用工具 bytenode 来生成和加载字节码
bytenode 命令行
bytenode 能够以命令行的模式装置, 并通过 -c
参数来将 js 编译为字节码模式(jsc), 编译实现后会生成同名的 jsc 文件. 并且 bytenode 命令能够间接运行 jsc 文件. 具体参数见 bytenode 文档
须要留神 node 的版本, 例如你的 jsc 是在 v14 版本下编译的失去的 jsc, 在 v15 就不能用了
$ npm install -g bytenode
$ echo "console.log('ok')" > test.js
$ bytenode -c test.js
$ ls
test.js test.jsc
$ bytenode test.jsc
ok
用 bytenode 导出模块
下面只是简略应用了命令行, 并没有理论的用途. 咱们须要将须要暗藏的外围代码导出给业务代码应用
// core.js
function coreFunction(){console.log("this is core function");
}
exports.coreFunction = coreFunction;
// main.js
require("bytenode") // 必须要引入 bytenode, 其不仅裸露 bytenode 的接口还对环境进行了配置, 以使 node 能 require 字节码文件.
const {coreFunction} = require("./core.jsc")
coreFunction();
$ bytenode -c core.js
$ node main.js
"this is core function"
至此外围代码失去了肯定的爱护, 并能够不便的导入业务逻辑中进行应用, 但这对于 electron 还是存在问题.
electron 所应用的 node 与咱们失常装置应用的不同, 即便你装置了和 electron 所应用雷同版本号的 node 所编译进去的 jsc 也不能在 electron 中应用, 所以咱们须要在 electron 中进行编译. 具体例子能够参照 bytenode 中的 example
注意事项
electron 中的 webview 所应用的 preload.js 是独立的, 在其中要应用 jsc 的话须要再次require("bytenode")