清乐云 · 官方文档
企业级网络授权 / 卡密分销 / 代码防破解一体化平台 · 平台已上线 · 5 种 SDK · 无需自备服务器
1. 产品介绍#
清乐云 是一套"网络授权 + 反破解 + 卡密分销 + 云端下发"一体化验证平台。你的软件(PC / 移动 / 工具 / 游戏辅助等)接入后即可获得:
- 授权变现:时长卡 / 次数卡 / 永久卡 + 面额与推荐价,支持代理商多级分销
- 反破解:HMAC 请求签名 + RSA 响应验签 + 应用层加密 + 加壳反调试 + CloudGate 代码云保护
- 实时控制:一键封号 / 强制下线 / 拉黑机器 / 灰度版本 / 远程变量 / 云公告
- 零运维:平台服务端由运营方托管,稳定性 / 备份 / 升级均由运营方负责
平台角色
| 角色 | 说明 |
|---|---|
| 平台运营方 | 部署并维护平台服务端(服务器 / 数据库 / 安全 / 备份),你无需接触 |
| 平台用户(你) | 注册账号 → 创建应用 → 生成卡密 → 下载 SDK 接入自己的软件 → 在后台管理授权 |
| 代理商(可选) | 你可以开设下级代理账号,让他们自行生成卡密、代售代发(代理拥有独立门户) |
| 最终用户 | 你软件的使用者,购买卡密后在软件内激活使用 |
2. 快速开始#
接入只有 3 步:注册账号 → 创建应用 → 客户端调 SDK。
第零步 · 获取平台信息
- 向平台运营方注册账号(或使用运营方为你开通的账号登录 管理后台)
- 记录运营方提供的 服务器地址(形如
https://auth.你的运营方域名.com或http://1.2.3.4:8000)
第一步 · 创建应用
- 进入 管理后台 → 应用管理,点「新增应用」
- 填名称、描述、版本号;机器码/多开/加密选项保持默认即可
- 保存后记录 AppKey(客户端 SDK 必填参数)
第二步 · 生成一批卡密
- 进入 管理后台 → 卡密管理,点「批量生成」
- 选应用 → 类型(例:时长卡 · 30 天 · 5 张)→ 生成
- 弹窗点「导出本批次」拿到卡号 CSV,用于售卖或代理分发
第三步 · 客户端接入(改 3 行即可运行)
服务器地址 与 APP_KEY 替换为你的实际值(服务器地址问运营方,AppKey 在后台应用管理里看)。
pythonfrom qingleyun import NetAuthClient
cli = NetAuthClient("https://服务器地址", "APP_KEY", "1.0.0")
cli.activate("CARD-CODE") # 第一次输入卡密激活
cli.login() # 之后每次启动自动登录
cli.start_heartbeat() # 后台线程心跳 (默认 60s)
typescriptimport { NetAuthClient } from './qingleyun.mjs'
const cli = new NetAuthClient({ baseUrl: 'https://服务器地址', appKey: 'APP_KEY', clientVer: '1.0.0' })
await cli.activate('CARD-CODE')
await cli.login()
cli.startHeartbeat()
csharpusing var cli = new NetAuthClient("https://服务器地址", "APP_KEY", "1.0.0");
await cli.ActivateAsync("CARD-CODE");
await cli.LoginAsync();
cli.StartHeartbeat();
cppNetAuthClient::Options opt;
opt.base_url = "https://服务器地址";
opt.app_key = "APP_KEY";
opt.client_ver = "1.0.0";
NetAuthClient cli(opt);
cli.activate("CARD-CODE");
cli.login();
cli.start_heartbeat();
e.子程序 取SERVER, 文本型
返回 ("https://服务器地址")
.子程序 取APPKEY, 文本型
返回 ("APP_KEY")
.子程序 取VERSION, 文本型
返回 ("1.0.0")
如果真 (清乐云.激活卡密 ("CARD-CODE") = 真)
清乐云.登录 ()
清乐云.启动心跳 ()
如果真结束
SERVER / APP_KEY / VERSION 三个常量,改完即跑。
3. 管理端功能#
侧栏按 概览 / 经营 / 发布 / 系统 4 组呈现;超管 标记的仅平台运营方可见。所有高危操作会二次密码 sudo。
3.1 概览
3.2 经营
3.3 发布
3.4 系统
4. 代理商门户#
代理商有独立门户(路由前缀 /agent),由你(平台用户 / 运营方)开设下级代理账号后,代理自行登录使用。入口:代理商登录。
| 页面 | 能干什么 |
|---|---|
| 仪表盘 | 余额 / 历史充值 / 消费 / 生卡总数;权限套餐摘要;近 30 天销售曲线;最近流水与生卡 |
| 生成卡密 | 选授权应用 → 时长/次数/永久 → 预设时长 → 面额(推荐价一键应用)→ 扣余额生成;受套餐限制(卡类型、日配额、单次上限、允许 app、最低售价系数) |
| 我的卡密 | 只看自己生成的;高级筛选;复制卡号;若被授权可自助冻结/解冻 |
| 下级代理 | 创建 / 管理自己的下级代理,查看下级 QQ / 备注,给下级充值余额 |
| 下级激活 | 查询直接下级代理生成的卡密激活记录(可按下级、应用、卡号、激活时间筛选) |
| 资金流水 | 充值 / 生卡 / 佣金 / 退款 / 调整等流水按类型筛选 |
| 提现 | 发起提现(支付宝 / 微信 / 银行卡)→ 冻结对应余额;查状态;等审批打款 |
5. REST API#
Base URL:https://服务器地址/api(服务器地址由运营方提供)。所有 POST 请求 body 为 JSON,Content-Type 必须 application/json。
5.1 客户端签名规则
所有客户端 POST 必带以下 header,服务端 HMAC-SHA256 校验(SDK 已自动处理):
| Header | 说明 |
|---|---|
X-App-Key | 应用 AppKey,管理后台可看 |
X-Timestamp | Unix 秒,服务端容忍 ±300s |
X-Nonce | 16 字节随机 hex;10 分钟内不能重放 |
X-Sign | HMAC_SHA256(app_key, canonical),canonical = 按字典序拼接 app_key×tamp&nonce&body_hash,hex 小写 |
5.2 客户端接口 /api/client/*
| Method | Endpoint | 说明 |
|---|---|---|
| GET | /info | 应用元信息 + RSA 公钥(验签用) |
| GET | /notice | 启动公告(Markdown) |
| GET | /version | 检查更新 / 拿最新版直链 |
| GET | /variables | 远程变量(带 version 增量) |
| GET | /build/:id/download | 加壳产物下载 |
| GET | /ws | WebSocket 长连接(见 §6) |
| POST | /handshake | X2:RSA-OAEP 换 AES session |
| POST | /integrity | X3:上报 EXE 完整性 hash |
| POST | /free_trial | 免费试用(1h 临时 session,同机 24h 冷却) |
| POST | /activate | 卡密激活 |
| POST | /register | 账号自助注册(应用开启注册码通道后可用) |
| POST | /login | 账号登录,拿 session token |
| POST | /heartbeat | 心跳(默认 60s,超时自动判离线) |
| POST | /logout | 退出,token 立即失效 |
| POST | /rebind | 客户端自助换机器码(受 rebind_max_count 限制) |
| POST | /check | 通用授权判定(DRM) |
| POST | /resource/get | 受保护数据资源下发(AES 一次性 key) |
| POST | /codeblock/get | CloudGate μVM 字节码下发 |
| POST | /codeblock/hostcall | CloudGate Tier B 服务端计算 |
| POST | /cloud/compute | 云端计算(把关键算法放服务端执行) |
5.3 管理端接口 /api/admin/*
公开:POST /auth/login、POST /auth/refresh、POST /auth/register-send-code、POST /auth/register-verify、GET /tos。
需登录(按模块,仅列核心):
| 模块 | Endpoint 示例 |
|---|---|
| 认证 | /auth/me · /auth/logout · /auth/change-password · /auth/totp/* · /auth/sudo |
| 服务条款 | /tos/status · /tos/accept |
| 应用 | /apps CRUD · /apps/:id/rotate-key |
| 远程变量 | /apps/:id/variables CRUD |
| 受保护资源 | /apps/:id/resources CRUD(含 type=xvm) |
| 卡密 | /cards · /cards/generate · /cards/import · /cards/extend · /cards/batch/freeze · /cards/:id/freeze |
| 黑名单 | /blacklist CRUD · 支持 kick_online / freeze_cards 联动 |
| 在线 | /online · /online/kick · /online/user/:user_id/kick |
| 代理 超管 | /agents CRUD · /agents/:id/recharge · /agents/:id/permissions |
| 提现 超管 | /withdrawals · /withdrawals/:id/{approve,reject,pay} |
| 版本 / 产物 | /versions CRUD · /builds 上传/签发 |
| 公告 / 审计 | /notices · /audit |
| SDK / Tools | /sdks · /tools/list |
| 导出 sudo | /export/cards · /export/users · /export/agents |
| 超管 超管 | /admins/* · /admins/:id/impersonate · /tenants/* · /system/health |
5.4 代理商接口 /api/agent/*
| Method | Endpoint | 说明 |
|---|---|---|
| POST | /auth/login · /auth/refresh | 代理登录 |
| GET | /me · /apps · /recommended-prices | 身份 + 授权 app + 推荐价 |
| GET | /cards · /transactions · /withdrawals | 只看自己名下 |
| GET | /sub-agents · /sub-agent-activations | 下级代理列表 / 下级激活记录 |
| GET | /stats/overview · /stats/daily | 仪表盘数据源 |
| POST | /cards/generate | 扣余额生成 |
| POST | /cards/:id/{freeze,unfreeze} | 需 can_freeze_own_cards 权限 |
| POST | /sub-agents 及下级操作 | 创建下级 / 充值 / 状态 / 重置密码 |
| POST | /withdrawals | 提交提现 |
运维接口(归平台运营方管理):GET /health 健康检查 · GET /metrics 监控指标。
6. WebSocket 实时通道#
客户端 GET /api/client/ws?token=<session_token> 建立长连接,用于(SDK 已内置,可选开启):
- 踢线通知:管理端踢线后服务端主动下发
{"type":"kick","reason":"..."},客户端立即退出 - 变量热更新:远程变量表变化推
{"type":"var_update","version":"..."},客户端重新拉/variables - 公告即时推送:新发布公告直接推
{"type":"notice","title":"...","content":"..."}
心跳:客户端每 30s 发 {"type":"ping"},服务端回 {"type":"pong"};90s 无响应视为断开重连。
7. SDK 使用#
5 套 SDK 协议层与服务端 字节级一致,全部零第三方依赖、可一站式编译。每种 SDK 提供:源码 + Demo + 离线签名一致性自检 + README。管理后台 → SDK 下载 一键打包。
| 语言 | 适用场景 | 跑 Demo |
|---|---|---|
| Python | 跨平台 / 工具脚本 / 服务端集成 / 快速验证 | python demo.py |
| TypeScript | Electron 桌面应用 / Node 后端 / Bun / Deno | node demo.mjs |
| C# | Windows 桌面 WPF / WinForms / Unity / .NET 后端 | dotnet run --project Demo |
| C++ | Windows 原生客户端(反破解首选)/ 小体积单文件 EXE | cl /std:c++17 demo.cpp |
| 易语言 | 小白用户 / 个人作者小工具 | 易语言 IDE 编译 |
Python
单文件 qingleyun.py;仅标准库(urllib / hashlib / hmac)。
pythonfrom qingleyun import NetAuthClient, AuthError, NetworkError
cli = NetAuthClient("https://服务器地址", "APP_KEY", "1.0.0")
try:
cli.activate("CARD-CODE") # 首次激活;已激活的直接 login
cli.login()
cli.start_heartbeat(interval=60)
var = cli.get_variables()["discount_pct"] # 远程变量
data = cli.get_resource("vip_config") # DRM 数据
except AuthError as e:
print("卡密无效或过期", e)
except NetworkError as e:
print("网络失败", e)
TypeScript / JavaScript
支持 Node ≥ 18;qingleyun.ts(源码)+ qingleyun.mjs(编译产物);含 codegate.ts CloudGate 支持。
typescriptimport { NetAuthClient } from './qingleyun.mjs'
const cli = new NetAuthClient({ baseUrl: 'https://服务器地址', appKey: 'APP_KEY', clientVer: '1.0.0' })
await cli.activate('CARD-CODE')
await cli.login()
cli.startHeartbeat()
const { discountPct } = await cli.getVariables()
C# / .NET
单文件 QingleyunClient.cs;.NET 6+;只依赖 BCL;含 CodeGate.cs 与 WinForms / WPF / Console Demo。
csharpusing var cli = new NetAuthClient("https://服务器地址", "APP_KEY", "1.0.0");
try
{
await cli.ActivateAsync("CARD-CODE");
await cli.LoginAsync();
cli.StartHeartbeat();
}
catch (AuthException ex) { Console.WriteLine($"卡密无效: {ex.Message}"); }
C++
Header-only qingleyun.hpp;Windows Only(Vista+);只依赖 WinHTTP + BCrypt;含 xvm.hpp(μVM 解释器)。
cpp#include "qingleyun.hpp"
NetAuthClient::Options opt;
opt.base_url = "https://服务器地址";
opt.app_key = "APP_KEY";
opt.client_ver = "1.0.0";
NetAuthClient cli(opt);
try {
cli.activate("CARD-CODE");
cli.login();
cli.start_heartbeat();
} catch (const qly::AuthError& e) {
MessageBoxA(nullptr, e.what(), "授权失败", MB_ICONERROR);
}
易语言
提供完整可复制代码 + demo;仅易语言核心支持库;无第三方依赖。
e.子程序 取SERVER, 文本型
返回 ("https://服务器地址")
.子程序 取APPKEY, 文本型
返回 ("APP_KEY")
.子程序 取VERSION, 文本型
返回 ("1.0.0")
如果真 (清乐云.激活卡密 ("CARD-CODE") = 真)
清乐云.登录 ()
清乐云.启动心跳 ()
如果真结束
SDK 安全要点(全 5 端通用)
- TLS 默认开启 — 生产保持
verify_ssl = true - 机器码绑定 — MAC + 主机名 + 平台 → SHA-256,一码一机
- Nonce 防重放 — 每个签名请求随机 nonce,服务端 10 分钟去重
- 时间戳 ±300s 容忍 — 防止机器时钟漂移误判
- 凭据不入盘 — token 只存在内存,进程退出即清零
8. 加壳工具(PackerX32)#
官方工具包提供两条加壳路线,从 管理后台 → 工具下载 获取 zip 后本地运行(纯客户端工具,不需要服务器)。
| 方案 | 可执行文件 | 定位 |
|---|---|---|
| pe_patcher(推荐生产) | patcher.exe | 注入 .qly 节 + 运行时 DLL;可勾选 VMProtect 二次加壳;支持 X3 完整性预生成 |
| PackerX32 经典 | packer.exe + stub.exe | 把目标 EXE 嵌入 stub RCDATA;运行时先弹卡密,再解压启动 |
加壳流程(pe_patcher)
- 解压 zip,双击
patcher.exe(qly_runtime*.dll / vmp 目录须同级) - 首次输入平台账号密码(用你注册的后台账号);勾「记住本机」加密保存本地
- 选目标 EXE → 自动识别 x86/x64 → 选 AppKey、客户端版本、安全 flags(反调试 / 反 Hook / 完整性 / 字符串混淆)
- 点「加壳」→ 输出
原名_qly.exe - 可勾 VMProtect 双层(轻度 / 标准 / 极度 preset 或自定义
.vmp) - 加壳完成后可算 X3 expected hash 写入 sidecar,供管理端 应用管理 一键 promote
patcher.exe --input app.exe --appkey AK_XXX --version 1.0.0 --sec-flags 0x07 --vmp
安全选项 (X3)
| flag | 能力 | 命中后 |
|---|---|---|
0x01 | 反调试(5 层) | ExitProcess(0xDEAD0001) |
0x02 | 反 Hook(12 关键 API) | ExitProcess(0xDEAD0002) |
0x04 | 完整性校验 | ExitProcess(0xDEAD0003) |
0x08 | 字符串混淆 | — |
9. CloudGate 代码保护#
CloudGate 把 1-3 个关键函数编译成 μVM 字节码(XVM) 存服务端,客户端 CodeGate.invoke(name, args) 凭有效授权拉取 → 内存里解释执行 → 用完清零。反破解者反编译本地二进制看不到这段逻辑,无授权拿不到字节码。
与普通 DRM 的区别
| 特性 | 受保护资源(DRM 数据) | CloudGate(代码保护) |
|---|---|---|
| 保护对象 | 字符串 / JSON / binary | 代码逻辑 |
| 接口 | POST /resource/get | POST /codeblock/get |
| 执行位置 | 客户端拿明文使用 | 客户端 μVM 解释;Tier B 关键步骤在服务端 |
| 抗静态逆向 | 只能防抓包 | 逻辑不在本地二进制 |
使用步骤
- 进入 XVM 编译器,用类 C 高级语言或 XVM 汇编写核心函数
- 点「编译」→「测试运行」验证结果
- 点「保存为受保护资源」,选目标应用 + 资源名 + 访问权限(任意登录 / 已激活 / VIP)
- 去 应用管理 打开 CloudGate 代码块下发 开关
- 客户端 SDK 里调
CodeGate.invoke("license_gate", [seed])
两档模式
- Tier A · 全客户端:字节码整段发下去,本地 μVM 解释。快,适合轻量算法。
- Tier B · 服务端计算:字节码含
CALLH SERVER指令,遇到该指令客户端调/codeblock/hostcall让服务端算完再返回。最秘密的一步不出客户端。
10. 安全体系#
平台采用 多层纵深防御:从传输层到应用层到客户端二进制到代码逻辑,逐层加固。下面这些能力都已内置,你无需任何配置即可享受:
| 层 | 机制 | 作用 |
|---|---|---|
| 传输 | HTTPS + TLS | 加密链路防中间人(由运营方配置) |
| X0 | HMAC-SHA256 请求签名 + Nonce 防重放 | 防篡改、防重放、防伪造客户端 |
| X1 | RSA 响应签名(X-Resp-Sign) | 客户端用 App 公钥验签,防伪造服务端响应 |
| X2 | 应用层 Body 加密(RSA-OAEP 握手 + AES-256-GCM) | 抓包也看不到明文(App 级开关) |
| X3 | 加壳反调试 / 反 Hook / 完整性 hash | 客户端二进制反破解(加壳时勾选) |
| 业务 | 机器码黑名单(3 级 severity) | 拉黑破解者机器;可踢线 + 冻卡 |
| 逻辑 | CloudGate μVM 字节码 + Tier B | 关键函数不在本地二进制里(App 级开关) |
平台侧安全(运营方负责,你可放心)
- 数据加密存储:PII 字段 AES 入库,泄库也只能看到密文
- 密码 bcrypt(cost=12):暴力破解成本极高
- 登录防护:IP 限流 + 5 次失败锁 15 分钟 + 错误文案脱敏防枚举
- 审计全量:所有写操作
audit_logs全量记录,可溯源 - 每日备份:数据库每日自动备份(运营方执行)
11. 常见问题#
我需要购买服务器吗?
不需要。 平台服务端已由运营方部署完成,你只需要注册账号、创建应用、下载 SDK 接入你的软件即可。服务器 / 数据库 / 升级 / 备份全部由运营方负责。
接入需要多长时间?
正常 30 分钟内。SDK 是单文件(或 header-only),Demo 顶部只有 SERVER / APP_KEY / VERSION 三个常量,改完即可运行;再替换成你的卡密激活逻辑即可。
客户换电脑了怎么办?
三条路:① 应用允许「客户端自助换绑」,客户端调 /rebind(扣配额);② 你在 卡密管理 里点该卡「换绑机器码」(强制换绑不扣次数);③ 在应用配置里放宽 rebind_max_count。
怎么防止软件被破解?
五层组合拳:① 加壳勾选反调试 + 反 Hook + 完整性(X3);② 上 VMP 双层;③ 开 X2 加密通道;④ 核心算法搬到 CloudGate;⑤ 及时把发现的破解机器加黑名单。任何单层都不是银弹,堆叠才有威慑力。
调试器检测触发后用户看到啥?
进程被 ExitProcess(0xDEAD000X) 静默结束,不弹窗。0xDEAD0001=调试器 / 0xDEAD0002=Hook / 0xDEAD0003=完整性。排查建议:让用户关杀软 / 关 Wireshark / 关 Fiddler 后重试。
能不能让用户在线买卡?
系统本身不含收银台。你可以:① 自己开代理门户,让下级代理买卡后代客户激活(代理商登录);② 配合微信/支付宝收款 + 发卡平台,自动发卡后客户在你的软件里激活即可。
远程变量更新客户端要等多久?
接了 WebSocket 的客户端 即时收到 var_update 推送;未接 WS 的下次心跳(默认 60s)会带 version 增量拉取。
能不能强制下架某版本?
可以。版本管理 → 找到那版本 → 点「停用」;下次客户端 GET /version 会自动回退到上一个可用版本。
X2 应用层加密开了之后老 SDK 客户端会不会挂?
会。X2 开启前请确认所有客户端都升级到支持 /handshake 的版本。建议先灰度:新版 SDK 发布 → 观察 30 天 → 后台开 X2。
我的数据安全吗?
- PII 字段(邮箱 / 手机 / 付款账号)AES 入库,泄库看到密文
- 密码 bcrypt(cost=12)
- 所有写操作 audit_logs 全量
- 数据库每日备份 + 异地存储(运营方负责)
平台出故障了找谁?
平台由运营方 7×24 维护。遇到无法登录、接口异常、数据疑似丢失等问题,直接联系运营方(见 平台服务与支持),运营方会在服务端排查(健康检查 / 日志 / 备份恢复)。
12. 平台服务与支持#
平台服务说明
| 项目 | 说明 |
|---|---|
| 平台状态 | 已上线 · 由运营方托管维护 |
| 服务器地址 | 向运营方获取(SDK 中 SERVER 常量的值) |
| 账号开通 | 联系运营方注册平台账号(邮箱验证码注册) |
| 功能范围 | 本平台为多租户系统:你的账号管理你的应用与数据;运营方账号管理全平台 |
| 服务保障 | 平台稳定性 / 数据备份 / 安全加固 / 版本升级由运营方负责;故障请及时反馈 |
联系我们
技术咨询 / 账号开通 / 功能建议 / 故障反馈:
© 清乐云 · 官方文档 v3.0 · 最后更新