加密客户端生成器用于已有 exe + 已部署 Nebula 验证服务端的交付场景:把目标程序封装为 Nebula 加载壳,载荷 AES-256-GCM 加密,验证配置可内嵌壳镜像并配合 VMProtect 压缩加固。在线说明对应本地文档 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. 目录与文件说明

标准交付目录如下:

TEXT
发布目录/
├── 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 / 保持加载壳默认图标。

取证书指纹的命令:

BASH
openssl s_client -connect 你的域名:443 -servername 你的域名 </dev/null 2>/dev/null | openssl x509 -noout -fingerprint -sha256

3.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. 打包与交付

  1. 填完点右下角「一键加密」;
  2. 成功后弹窗显示成品大小、位数、加密模式与防护策略(勾了加壳会显示「已加壳」,并标明配置是「已进壳镜像」还是「在尾部明文」);
  3. 交付给客户的是「一个 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 + 验证服务端」场景下的一键打包工具。