爱护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$ lstest.js test.jsc$ bytenode test.jscok

用bytenode导出模块

下面只是简略应用了命令行, 并没有理论的用途. 咱们须要将须要暗藏的外围代码导出给业务代码应用

// core.jsfunction coreFunction(){    console.log("this is core function");}exports.coreFunction = coreFunction;
// main.jsrequire("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")