有很多方法可以保护电子代码。比如默认的electron会将代码打包成asar格式。虽然这对客户是不可见的,但是对于有一点编程基础的人来说是透明的。那么我们可能会想到简单的代码来做Uglify处理,降低代码的可读性,但是对于那些想破解你软件的人来说,也只是费点功夫而已。那么我们可能会想到node的addon,甚至重写electron的源码,让核心代码在Executeafterdecryptionbeforeexecution。但是你需要非常熟悉node和c++。我们可以做一个折衷,即降低实施成本,增加破解成本。使用字节码可以达到这种效果。本文使用工具bytenode生成并加载bytecodebytenode命令行bytenode可以命令行形式安装,通过-c参数将js编译成字节码形式(jsc)。编译完成后会生成一个同名的jsc文件。而bytenode命令可以直接运行jsc文件。具体参数请参考bytenode文档。注意节点的版本。比如你的jsc是在v14下编译的,在v15下是不能用的。jstest.jsc$bytenodetest.jscok使用bytenode导出模块。上面的命令行只是简单的使用,没有实际用处。我们需要隐藏核心代码使用//core.jsfunctioncoreFunction(){console.log("thisiscorefunction");}exports.coreFunction=coreFunction;//main.jsrequire("bytenode")//必须导入bytenode,既暴露了bytenode的接口,又配置了环境,让node可以请求字节码文件。const{coreFunction}=require("./core.jsc")coreFunction();$bytenode-ccore.js$nodemain.js"thisiscorefunction"至此核心代码获取具有一定的保护性,可以方便的导入到业务逻辑中使用,但是这对于electron还是有问题的。electron使用的node和我们正常安装使用是不一样的,即使你安装了和electron相同版本号的node编译好的jsc也不能在electron中使用,所以我们需要在electron中编译。具体例子可以参考bytenode注释中的例子electron中webview使用的preload.js是独立的,里面要用jsc如果需要再require("bytenode")
