Electron 中 preload 模块最为重要,它的源码逻辑如下:
- 首先 electron 中封装了 c++ 模块对接 node.js 的 addon 模块,方法是:在头文件中标注了:#include <node/addon.h>
- 此 c++ 模块将 app 实例绑定 (linkedBinding) 到 process 上,app 实例中有
exposeAPIInWorld方法 - 接着
contextBridge中的expostInMainWorld方法返回的是process.linkedBinding.exposeAPIInWorld方法。
Electron pdf 笔记
# 源代码保护
electron 等编写的程序的源代码需要对代码进行加固加密,以避免被解包、篡改、二次打包和二次分发等,主要有以下解决方案:
- Uglify / Obfuscator: 通过对 JS 代码进行丑化和混淆,尽可能降低其可读性。
- Native 加密: 通过 XOR 或 AES 对构建产物进行加密,封装到 Node Addon 中,并在运行时由 JS 解密。
- ASAR 加密: 将 Electron ASAR 文件进行加密,并修改 Electron 源代码,在读取 ASAR 文件之前对其解密后再运行。
- V8 字节码: 通过 Node 标准库里的 vm 模块,可以从 script 对象中生成其缓存数据(参考)。该缓存数据可以理解为 v8 的字节码,该方案通过分发字节码的形式来达到源代码保护的目的。