首页›asar 加密教程
实操指南

Electron app.asar 加密:原生模块与自动更新的正确处理方式

app.asar 本质是明文归档,改扩展名挡不住解包。这篇讲清楚加密到底改变了什么,以及 unpacked 原生模块、自动更新这两个最容易翻车的地方。

最后更新:2026-11-13 · 适用于 AppJM 授权云 网页后台

一、为什么只压缩 app.asar 没用

Electron 应用把前端代码和 Node 逻辑打成一个 app.asar,本质是个未加密的归档文件。市面上随便一个 asar 解包工具,一条命令就能把全部源码还原出来——这就是常说的「反编译」,几秒钟的事。

「改扩展名」「加个密码压缩包」这类做法也挡不住:Electron 运行时必须能读取 asar,任何人只要能让它跑起来,就能用同样的方式读出来。真正的门槛在于让载荷以密文形式存在,只有通过授权校验后才在内存中解密。

二、加密流程

  1. 上传:把 app.asar 传到后台「文件加密」。系统按扩展名识别为 Electron 包,不会和普通 zip 混淆。
  2. 构建:服务端生成一次性随机密钥,把 asar 加密成载荷,再套上启动外壳,产出可分发的包。
  3. 下载:下载的是完整可分发的产物,替换原来的应用目录即可。
  4. 授权:首次运行显示机器码,后台批准或客户用卡密自助绑定,之后正常启动。
关键点:密钥不写死在客户端,而是随构建记录存放在服务端;客户端只持有密文和验签逻辑。这样即使有人 dump 出载荷,也拿不到明文源码。

三、原生模块与 unpacked 目录

带原生模块(.node)的 Electron 应用,打包时通常会把模块放到 app.asar.unpacked/。这类目录有两个特点:

所以加密时要区分处理:主体 JS 走密文载荷,unpacked 里的原生模块单独保留并修复权限与符号链接。如果产物启动时报 Cannot find module,先检查 unpacked 目录是否完整,而不是怀疑加密本身。

四、自动更新要注意什么

五、常见问题

加密后启动变慢了吗?

会有一次解密开销,通常在几百毫秒量级,之后进入正常启动流程。如果明显变慢,多半是载荷体积过大或 unpacked 目录被整体塞进了密文。

支持 macOS 的 .app 吗?

高级会员与永久买断支持 .app 应用包(macOS 目录形态),打包时会保留符号链接与可执行权限。签名与公证(notarization)需自行处理,且应在加壳之后进行。

asar 和 zip 有什么区别?

asar 是 Electron 专用归档,有固定的目录结构约定;zip 是通用压缩包。平台按扩展名分别处理,不要把 asar 改名为 zip 上传,会导致结构识别错误。

能只加密其中几个 js 文件吗?

当前是按整个包加密,不支持细粒度挑文件。如果只想保护部分逻辑,建议把敏感逻辑抽到独立模块再整体打包。

注册即开独立授权后台

免费体验 12 小时,无需绑定支付方式,可加密文件、发卡密、撤销授权。

免费开通 →