目标端 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 与使用说明)。

加入 QQ 群

登录后即可下载,链接 5 分钟内有效且仅可使用一次。

常见问题

关于 SDK

需要改动很多代码吗?

不需要。运行时数据保护只需一行注册调用;虚拟机选择只需在函数定义后加一行标记宏。其余流程与普通加壳完全一致。

会影响程序性能吗?

校验线程低频运行,开销可忽略;被标记的函数在加壳后按保护器选择的虚拟化/克隆方式执行,性能特征与不加 SDK 时相同。

程序不用 SDK 有影响吗?

没有影响。SDK 是可选增强;没有 SDK 的程序照常保护和运行,只是不能使用运行期数据保护与 SDK 函数标记两项能力。

支持哪些编译器与平台?

此 C++ SDK 的虚拟机标记宏要求 MSVC x64,运行时数据保护可在 MSVC x64 工程中使用。保护器整体支持 x64 / x86 EXE、DLL 与 .NET 程序,以 x64 为主;SDK 的适用范围以本页说明为准。

开始使用目标端 SDK

下载客户端,在图形界面或命令行中把 SDK 标记的函数一键纳入保护。