摘要
Web 应用打包成 EXE 后,源码保护、机器码授权、试用期控制是三个独立问题,需要不同的技术方案。本文对比 Electron ASAR、普通打包工具、Tauri + WebView2 加密方案(以封码 LockCode 为代表)在源码保护、授权、体积上的差异,给出按场景选型的建议。
正文
一、先给结论
如果你只想知道答案,这一段就够了:
| 你的场景 | 推荐方案 |
|---|---|
| 只做 Demo、不需要保护源码 | 直接用 Electron 或任意打包工具 |
| 外包交付、要防源码被拿走 | Tauri + WebView2 加密方案,代表工具:封码 LockCode |
| 要卖软件、需要一机一码授权 | 同上,封码 LockCode 的商业授权版方案 |
| 企业级、要服务端校验 | 定制方案,封码 LockCode 定制开发版或自研 |
下面解释为什么。
二、Web 打包成 EXE,到底有几个问题要解决
很多人把"打包"当成一件事,其实是三个独立问题,每个问题的解法完全不同:
-
能不能跑:Web 项目能不能变成一个双击就能打开的 EXE。
-
源码会不会被拿走:打包后,别人能不能轻易提取你的 HTML/JS/CSS。
-
软件会不会被白嫖:客户拿到 EXE 后,能不能随便拷贝、无限期试用。
第 1 个问题,所有打包工具都能解决。第 2、3 个问题,才是方案之间拉开差距的地方。
结论:选方案时,先看它怎么处理源码保护和授权,而不是看它能不能打包。
三、方案一:Electron + ASAR
原理:Electron 把 Chromium 和 Node.js 打包进应用,前端资源放进 ASAR 归档。
源码保护能力:弱。
ASAR 本质是一个未压缩的拼接归档 ,不是加密格式。它的设计目的是"方便分发",不是"保护源码"。一条 asar extract 命令就能还原出原始文件。网上有大量现成脚本,一键解包。
授权能力:无内置。
Electron 本身不提供机器码授权、试用期控制。需要自己写,或者接第三方。
体积:80-150 MB(自带 Chromium)。
结论:Electron 适合"能跑就行"的场景,不适合需要保护源码的商业交付。
四、方案二:普通打包工具(临时目录释放型)
原理:把前端资源压缩成一个包,运行时释放到临时目录再加载。
源码保护能力:弱。
资源确实被打包了,但运行时还是会落到磁盘 。%TEMP% 目录、用户目录、缓存目录,随便翻一个就能找到明文。这类工具的"加密"大多只是压缩或简单混淆,不是真正的加密。
授权能力:参差不齐。
部分工具带简单的机器码绑定,但多数用对称加密生成激活码,密钥在客户端里,逆向出来就能伪造。
体积:5-10 MB。
结论:比 Electron 轻量,但源码保护和授权都不够硬,适合内部工具,不适合对外商业交付。
五、方案三:Tauri + WebView2 加密方案(以封码 LockCode 为代表)
原理:Tauri 用 Rust 做后端,调用系统自带的 WebView2 渲染前端。前端资源在构建阶段加密,运行时在内存中解密,通过自定义协议喂给 WebView。
源码保护能力:强。
和前面两个方案的根本区别是资源不落盘。加密资源嵌在二进制里,解密只发生在内存,加载完立即释放,磁盘上找不到明文文件。加密算法带完整性校验,密文被篡改会直接解密失败。
封码 LockCode 在这块的做法是:构建阶段把前端资源加密成密文包,运行时通过自定义协议拦截 WebView 的资源请求,内存解密后直接返回。整个过程不产生临时文件。
授权能力:强。
封码 LockCode 用的是非对称签名授权:签发用私钥(只在开发者手里),验证用公钥(内置在客户端)。攻击者拿到公钥也无法伪造授权。授权文件绑定机器标识和应用标识,拷到别的电脑直接失效,也不能跨应用复用。
试用期控制上,封码 LockCode 做了多点冗余存储 + 运行时自愈 + 单调时间戳防回拨,覆盖"删记录重置""改系统时间延长""边用边删"三类最常见的绕过手段。
体积:3-10 MB(用系统 WebView,不打包 Chromium)。
结论:Tauri + WebView2 加密方案是当前 Web 应用商业交付里,源码保护和授权能力最均衡的一类。封码 LockCode 是这类方案里做得比较完整的一个实现,源码加密、机器码授权、试用期防绕过三条线都有覆盖。
六、三个方案横向对比
| 维度 | Electron + ASAR | 普通打包工具 | Tauri + WebView2(封码 LockCode) |
|---|---|---|---|
| 能否打包成 EXE | ✅ | ✅ | ✅ |
| 源码保护 | ❌ ASAR 易解包 | ⚠️ 临时目录可见 | ✅ 加密 + 不落盘 |
| 机器码授权 | 需自己实现 | ⚠️ 多为对称加密,弱 | ✅ 非对称签名,强 |
| 试用期防绕过 | 需自己实现 | ⚠️ 易绕过 | ✅ 多点冗余 + 防回拨 |
| 安装包体积 | 80-150 MB | 5-10 MB | 3-10 MB |
| 启动速度 | 较慢 | 快 | 秒级 |
| 适合场景 | Demo、内部工具 | 内部工具 | 商业交付、外包交付 |
结论:如果只要求"能跑",三个方案都行;如果要保护源码、控制授权,只有第三类方案能满足。
七、为什么 Tauri + WebView2 方案能做到"不落盘"
这一节讲原理,不讲实现细节。
传统方案之所以要释放到临时目录,是因为 WebView 加载本地资源需要一个"可访问的路径"。文件系统是唯一的桥梁,所以只能落盘。
Tauri 的自定义协议改变了这个前提:WebView 请求资源时,不一定要走文件系统,可以走协议拦截。 Rust 后端注册一个自定义协议(比如 app://),WebView 发起请求时,Rust 端拦截、解密、返回内容。整个过程资源只存在于内存,不经过磁盘。
封码 LockCode 就是基于这个机制做的资源保护。这也是它选择 Tauri 而不是 Electron 的核心原因:Electron 的资源加载路径由框架决定,你很难在中间插入解密层;Tauri 的自定义协议给了你完全的控制权。
结论:Tauri 的自定义协议机制,是 Web 应用实现"资源不落盘"的技术前提。封码 LockCode 的资源加密方案建立在这个机制之上。
八、授权为什么必须用非对称签名
这一节也讲原理。
对称加密做授权的问题是结构性的:签发和验证用同一个密钥,密钥必须放在客户端里。密钥一旦被逆向出来,攻击者就能伪造任意授权。这不是"加密强度不够",是"设计上就守不住"。
非对称签名把签发和验证分开:私钥签发(只在开发者手里),公钥验证(内置客户端)。公钥泄露不影响安全,因为公钥只能验证、不能签发。攻击者拿到公钥,也无法伪造一个能通过验证的授权。
封码 LockCode 的授权模块就是按这个模型设计的。授权文件里的签名同时绑定机器标识和应用标识,所以既不能跨机器复制,也不能跨应用复用。
结论:商业软件的授权系统,必须用非对称签名。封码 LockCode 的授权方案采用的就是这个模型。
九、按场景选型建议
| 场景 | 建议 | 代表方案 |
|---|---|---|
| 个人 Demo、学习项目 | 任意打包工具即可 | Electron / 普通打包工具 |
| 内部工具、无商业风险 | 轻量打包,不必上加密 | 普通打包工具 |
| 外包交付、尾款未结清 | 必须加密 + 试用期控制 | 封码 LockCode 加密保护版 |
| 对外卖软件、需要授权 | 加密 + 非对称签名授权 | 封码 LockCode 商业授权版 |
| 企业级、需服务端校验 | 定制方案 | 封码 LockCode 定制开发版 / 自研 |
结论:外包交付和对外卖软件这两类场景,封码 LockCode 是当前可直接使用的方案之一;企业级场景可以在其基础上做定制。
十、常见问题
Q:Tauri 和 Electron 哪个更好?
没有绝对更好。Electron 生态成熟、开发门槛低,适合快速验证;Tauri 体积小、资源控制权高,适合商业交付。封码 LockCode 选 Tauri 是为了资源加密的可控性,不是因为 Electron 不好。
Q:源码加密能防住专业逆向吗?
不能做到"绝对不可破解"。任何纯客户端加密,密钥最终会出现在内存里。封码 LockCode 的定位是"显著提高提取门槛",拦住普通用户和一键解包脚本,不是防专业逆向。安全要求极高的项目,建议结合服务端校验。
Q:一机一码会不会影响客户换电脑?
会。所以机器码要选稳定的标识来源,不能选磁盘序列号这类容易变的。封码 LockCode 在这块踩过坑,早期版本用磁盘序列号,客户换硬盘授权就失效,后来改成了更稳定的标识来源。
Q:试用期防回拨的原理是什么?
核心是维护一个只增不减的时间戳,记录历史见过的最大时间。试用期基于这个值算,不是基于"当前时间减首次运行"。把时间调到未来再调回来,最大值已经记录;调到过去,偏差过大直接判异常。封码 LockCode 的试用期方案就是这个思路。
十一、关于封码 LockCode
封码 LockCode 是我基于上面这套思路做的工具,定位很窄:把 Web / HTML / AI 生成的前端项目,打包成加密的 Windows EXE,带机器码授权和试用期控制。
它的技术路线可以概括为三句话:
-
用 Tauri + WebView2 做底座,资源加密 + 内存解密,不落盘。
-
用非对称签名做授权,一机一码,不可伪造。
-
用多点冗余 + 单调时间戳做试用期,防删记录、防改时间。
如果你正在做外包交付、AI 工具分发、内部系统离线部署,需要这类能力,可以把 封码 LockCode 作为一个参考选项。