docs/SEALER.md · 2026-10-22 更新Nebula 加密客户端生成器(NebulaSealClient)说明文档
📚 本文属 Nebula 文档中心;相关文档:C++ SDK 接入 · 客户端加固指南 · HTTP 接口协议
1. 这是什么
加密客户端生成器(sealer/ 目录下的 NebulaSealClient.exe,内部代号 NebulaSealClient / 封包器)把你自己编译好的 exe 程序加密打包成一个「Nebula 加载壳」成品:
- 客户端必须先通过账号 / 卡密验证,验证通过后加载壳才解密并启动你的程序;
- 载荷(你的原始 exe)全程以 AES-256-GCM 加密,服务端不下发密钥就解不开;
- 支持把验证配置写进加载壳镜像,并在打包前用 VMProtect 给加载壳加壳,使成品里静态扫不到
api_url、app_key、证书指纹、公钥等字符串; - 成品在桌面 / 任务栏显示你想要的图标(可跟随目标程序、自选
.ico或保持加载壳默认图标); - 客户最终拿到的是一个 exe,不需要带
stub、不需要带本工具。
它面向的是「已有可执行程序 + 已部署 Nebula 验证服务端」的交付场景,属于 Nebula 3.1 协议 的客户端打包工具。
2. 目录与文件说明
标准交付目录如下:
发布目录/
├── NebulaSealClient.exe 本工具(双击运行)
├── stub.exe 32 位加载壳(给 32 位目标程序用)
├── stub64.exe 64 位加载壳(给 64 位目标程序用)
├── vmp/
│ ├── VMProtect_Con.exe VMProtect 命令行(给加载壳加壳用,可选)
│ └── default.vmp 加壳选项模板(压缩 + 入口点/虚拟机保护)
├── NebulaSealClient.ini 你的配置(首次改动后自动生成)
└── 使用说明.txt 随附的文本说明stub.exe/stub64.exe必须和本工具放在同一目录,否则界面会提示「没找到加载壳」;vmp/目录可整体拷走分发,模板里没有绝对路径,换机器也能直接用。
3. 界面三页怎么填
3.1 基础信息
| 字段 | 说明 |
|---|---|
| 目标程序 | 要加密的那个 exe(界面右下角会显示它的位数与大小) |
| 加载壳 | 目标 64 位选 stub64.exe,目标 32 位选 stub.exe,位数必须一致 |
| 后台地址 | 你自己的验证系统地址,例如 https://你的域名/api/index.php |
| 软件标识 | 后台「软件管理」中对应软件的 app_key |
| 响应公钥 | 后台中该软件的响应验签公钥(整段 PEM 粘贴进来) |
| 域名证书指纹 | 可选。填了之后只允许连接证书指纹一致的服务器,防中间人伪造响应;必须是 64 位十六进制,且地址必须是 https://,否则打包直接报错。留空 = 走系统标准 TLS 校验。 |
| 功能密钥 | 可选。留空时载荷密钥由 app_key 派生(只防君子);填写后只有登录成功、服务端下发密钥才能解包,安全性等同登录墙。 |
| 程序图标 | 三选一:跟随目标程序(默认)/ 自选 .ico / 保持加载壳默认图标。 |
取证书指纹的命令:
openssl s_client -connect 你的域名:443 -servername 你的域名 </dev/null 2>/dev/null | openssl x509 -noout -fingerprint -sha2563.2 安全策略
- 默认「跟随服务端策略」,后台怎么配就怎么生效,一般不用动;
- 选「关闭」则运行时不做环境检测;选「自定义」可逐项设定拦截等级;
- 没有匹配到策略时 SDK 会回落到内置默认(标准级全开 + 踢下线),不是关闭;
- 本地策略(关闭/自定义)在包内用 HMAC-SHA256 签名保护,改配置区会被识别并回落到服务端策略;
- 校验时机:内置密钥模式在启动解析配置时就校验;功能密钥模式要等登录下发密钥后才有能力校验,登录前按服务端策略执行(日志写「待登录后校验」)。
3.3 壳加固
- 勾选「加密时自动给加载壳加壳」→ 一键加密时一次出包:先把配置写进壳镜像,再交给 VMProtect 压缩加固,最后才追加加密载荷;
- 不勾选就用原始壳,出包更快、体积小一半左右;
- 顺序不能反:配置必须先写进镜像、再加壳。先加壳后写配置会写坏壳;
- 加壳后的壳体积会明显变大(约 580KB → 5.7MB),属正常;
- 保护项写在
vmp/default.vmp,可以换成你自己调好的模板; Options必须包含0x100(打包压缩),否则镜像里的配置依旧是明文。默认模板为728832(= 原726016 | 0x100 压缩 | 0x200 导入保护 | 0x800 虚拟机检测)。缺0x100打包时会告警。0x800会让程序拒绝在虚拟机中运行,不需要就删掉这一位。
3.4 程序图标
- 图标是在加壳之前写进加载壳的 PE 资源段(Win32
UpdateResource),等 VMProtect 处理时一起带过去; - 不要试图在成品上加图标(成品尾部有密文和配置,动资源表会把包写坏);
- 换图标 = 重新打包一次,不能事后改;
- 图标只是外观,不影响验证与加密强度;
- 桌面上看到的还是旧图标时,是 Windows 图标缓存没刷新:把成品改个名,或重启资源管理器。
4. 成品里哪些内容是明文的
配置(验证 API、软件标识、TLS 证书指纹、安全策略、响应验签公钥、版本号)在打包时被写进加载壳镜像内部,不再放在文件尾部:
- 勾选「加密时自动给加载壳加壳」后,这块内容随壳一起被 VMProtect 压缩进虚拟机段——成品文件里用
strings扫不到api_url、app_key、证书指纹、公钥,seal.py info也读不出来(只会显示「内嵌于加载壳镜像」); - 没勾选加壳时配置仍在壳镜像里,但那是明文(
.rdata),照样能静态提取;此时打包器会明确提示「未启用 VMP 加壳:配置仍是明文」; - 载荷密文本来就不怕看:AES-256-GCM,改一个字节就解不开。
仍需注意:
app_key不是秘密,不要把它当密钥用;内置密钥模式下载荷密钥由app_key派生,拿到app_key的人就能离线解出原始 exe,等于是没加密——机密软件务必填功能密钥(server 模式)。加壳挡的是静态提取:程序一运行,配置必然在内存里,动态 dump 内存仍然拿得到。
5. 打包与交付
- 填完点右下角「一键加密」;
- 成功后弹窗显示成品大小、位数、加密模式与防护策略(勾了加壳会显示「已加壳」,并标明配置是「已进壳镜像」还是「在尾部明文」);
- 交付给客户的是「一个 exe」,不需要带
stub、不需要带本工具。
运行日志默认收起,点标题栏右侧「展开」可看详细过程;每次开始打包会自动展开。
6. 配置自动保存
你在界面上填的所有内容、拨动的所有开关,改完约 1 秒后自动存进 NebulaSealClient.ini,下次打开自动读取、原样恢复:
- 基础信息:目标程序、加载壳、输出路径、验证 API、软件标识、功能密钥、证书指纹、登录窗标题、版本号、公告、响应公钥;
- 安全策略:策略来源、检测等级、10 项检测勾选、中/高/危三档动作、严格模式、后台巡检开关与间隔;
- 壳加固:自动加壳开关、VMProtect 路径、项目文件。
注意事项:配置文件就在工具同目录,跟着目录一起拷走就带着配置;若工具放在没有写权限的目录(如
Program Files),配置会自动存到%APPDATA%\NebulaSealClient\NebulaSealClient.ini。想恢复出厂状态:直接删掉NebulaSealClient.ini再打开;配置文件里存了功能密钥与证书指纹,分发给客户时记得把 ini 删掉,只发NebulaSealClient.exe与stub/vmp即可。
7. 常见问题
| 问题 | 答案 |
|---|---|
| 提示「没找到加载壳」 | 把 stub.exe / stub64.exe 放到本工具同目录,重开工具。 |
| 提示「传入的加载壳本身已被打包过」 | 你选错了文件,选中的是之前打好的成品。请选原始的 stub.exe / stub64.exe。 |
| 提示「填了域名证书指纹就必须使用 https:// 地址」 | 证书锁定只在 HTTPS 下有意义。要么改成 https,要么清空指纹。 |
| 勾了加壳但报「找不到 VMProtect 命令行」 | 确认 vmp\VMProtect_Con.exe 还在,或用「选择」按钮指定它的位置。 |
| 开始加密时报「No module named 'cryptography'」 | 早期构建漏打依赖,确认使用的是最新 NebulaSealClient.exe(依赖已打进 exe)。 |
| 上次选的目标程序不见了 | 文件被移动或删除时,启动只记一条日志并忽略该项,不会卡住;重新选一次即可。 |
| 文件图标显示成白色窗口 / 任务栏图标不对 | Windows 图标缓存。改文件名,或重启资源管理器(任务管理器里重启「Windows 资源管理器」)。 |
用 strings 还能不能在成品里搜到验证地址和软件标识 | 勾了「加密时自动给加载壳加壳」就搜不到;没勾时配置仍在壳镜像明文段。加壳只挡静态提取,运行时动态 dump 内存仍能拿到配置。 |
| 提示「该 VMP 项目没开打包压缩」 | vmp\default.vmp 里 Options 缺少 0x100。用随附的 default.vmp(Options="728832")或在你自己的模板里加上 0x100。 |
| 成品运行后弹「错误代码 NBR-RT-xxxx」 | 你的程序正在被调试或运行在虚拟机/沙箱里,被运行时防护拦下了。调整后台策略或降低拦截等级后重新打包。 |
8. 与官网文档的对应关系
官网门户中的「SDK 接入 / 加固指南 / 接口协议」等文档页(docs.html)对应本工具的在线版说明:
- SDK 接入:C++ / C# / Python / DLL 四形态 SDK 的接入与配置;
- 客户端加固指南:壳标记、代码混淆、反调试、反虚拟机,默认关闭;
- HTTP 接口协议:Nebula 3.1 协议、握手、各接口字段、离线宽限;
- 加密客户端生成器:本文档描述的就是「已有 exe + 验证服务端」场景下的一键打包工具。
