目标端 SDK
让保护深入业务代码
WZProtector 目标端 SDK 是可选的两个源码文件:在程序内保护关键运行期数据缓冲区、用宏标记需要虚拟化的函数;加壳时一键选中,未加壳时自动回退。
SDK 是可选组件。不使用 SDK 的程序完全不受影响;使用 SDK 的程序未加壳运行时自动回退到开发模式,调试与正常运行都不受影响。
1. 运行时数据保护
把 SDK 的 wzprotector_sdk.h / .cpp 加入工程,在数据缓冲区初始化完成、内容不再变化后注册一次:
#include "wzprotector_sdk.h"
static std::uint8_t g_configData[4096];
void InitConfig()
{
// ... 初始化 g_configData ...
// 内容最终稳定后注册:SDK 保存只读快照并启动低频校验线程
WzSdkProtectBuffer(g_configData, sizeof(g_configData));
}
- 注册后请保证缓冲区常驻进程、内容保持稳定;后续修改请通过正常流程重新注册。
- 加壳时 WZProtector 会在程序入口前写入每次启动随机生成的运行密钥;SDK 的校验会把只读快照与运行密钥绑定,单纯篡改运行期数据或替换校验值都无法通过。
- SDK 自带低频校验线程,正常业务不需要手动调用校验接口。
2. 链接期虚拟机选择
用宏标记需要虚拟化的函数,加壳时一键选中;标记本身不引入运行调用,未加壳时就是普通函数:
WZ_SDK_VM_NOINLINE int CalculateChecksum(const std::uint8_t* data, std::size_t size)
{
// 业务实现
return 0;
}
WZ_SDK_VM_FUNCTION(CalculateChecksum) // 只写入标记节,无需在代码里调用
- 加壳时使用命令行 --functions sdk,或在图形界面使用「选择 SDK 标记的函数」一键选中(详见 命令行说明)。
- 静态成员函数与重载函数使用 WZ_SDK_VM_FUNCTION_PTR(uniqueTag, &Type::method),把重载地址转成精确的函数指针类型。
- 请标记独立的 out-of-line 函数;不要标记会被内联的调用点,以免编译器把标记内容优化掉。
- 该宏仅支持 MSVC x64 工程;其他编译器下保持普通函数定义即可。
3. 注意事项
- SDK 是增强能力,不替代保护器本身的虚拟机保护、加密外壳与授权控制;建议搭配使用。
- 运行时数据保护适用于密钥、配置、授权校验结果等运行期敏感数据,不建议注册超大数据块。
- 校验线程低频运行,对性能影响可忽略;如程序自行 Fork/卸载模块,请在生命周期内保持注册状态。
- 开发调试阶段无需任何特殊配置,SDK 自动回退,不会误报。
4. 下载与支持
SDK 以压缩包形式独立提供(含 wzprotector_sdk.h / wzprotector_sdk.cpp 与使用说明)。
登录后即可下载,链接 5 分钟内有效且仅可使用一次。
常见问题
关于 SDK
需要改动很多代码吗?
不需要。运行时数据保护只需一行注册调用;虚拟机选择只需在函数定义后加一行标记宏。其余流程与普通加壳完全一致。
会影响程序性能吗?
校验线程低频运行,开销可忽略;被标记的函数在加壳后按保护器选择的虚拟化/克隆方式执行,性能特征与不加 SDK 时相同。
程序不用 SDK 有影响吗?
没有影响。SDK 是可选增强;没有 SDK 的程序照常保护和运行,只是不能使用运行期数据保护与 SDK 函数标记两项能力。
支持哪些编译器与平台?
此 C++ SDK 的虚拟机标记宏要求 MSVC x64,运行时数据保护可在 MSVC x64 工程中使用。保护器整体支持 x64 / x86 EXE、DLL 与 .NET 程序,以 x64 为主;SDK 的适用范围以本页说明为准。