网上流传的 Electron 加密打包文件 或 electron 源码加密 都是指的 asar pack 并非真正的加密
如何在 asar 的基础上实现加密呢?
先来看看 asar 文件的结构
-
文件大小标记 04 00 00 00 64 10 00 00 60 10 00 00 5B 10 00 00
-
文件头部 json {"files":...}
-
文件内容区 由一个个文件拼接而成
加密最简单的方式就是在 asar 打包的基础上对需要的文件进行加密
asar 文件是怎么被识别调用的呢, 首先是 C++部分
asar::Archive 压缩包功能类
asar::URLRequestAsarJob 压缩包注册为资源, 供 Browser 模块识别
Archive V8 绑定到 node, 供 Node 模块识别
其次是 js 部分
asar.js 导出 wrapFsWithAsar 方法, 把 V8 绑定的 Archive 能力提供给 fs
asar_init.js 用来覆盖 fs 的读取操作, 这样 fs 就可以识别 asar 压缩包内的资源了
根据以上分析, 加密解密思路就有了
加密方法
在 asar 打包时写入文件之前, 通过加密算法把写入的文件进行加密
解密方法
-
修改
asar::Archive类增加 C++解密方式, 供 Browser 和 atom 加载 asar 资源 -
修改
asar.js增加 js 解密方式, 供 nodejs 加载 asar 资源
同时也可以做文件头部 json 的加密,官方的 asar 就没法解包了
通过这种方式, 个人在稳定版本 electron-2.0.8 和最新版本 electron-3.0.0 都做了成功的尝试
再也不用担心核心业务代码泄露了
想尝试下的可以联系我 Q 1584625095