主页 » 支持 » 用户手册 » 授权系统 » 集成到应用程序 » 授权 API 函数

授权 API 函数

授权系统 API 是 VMProtect API 及其 SDK 的组成部分。API允许您指定序列号并检索有关它的所有信息:它是否适合程序,序列号是否过期,该产品注册的名称等等。此外,API 提供了运行程序的计算机的硬件标识符。

VMProtectSetSerialNumber

此函数将序列号加载到授权系统。调用语法:

int VMProtectSetSerialNumber(const char *SerialNumber);

输入 序列号 参数必须包含一个指向以 null 结尾的字符串 ('\0') 的指针,该字符串包含 base-64 编码的序列号。该函数返回序列号状态标志的位掩码,与 VMProtectGetSerialNumberState() 返回的相同。您可以在下面阅读有关标志的更多信息。如果函数返回 0,则序列号为 “正确” 。

VMProtectGetSerialNumberState

此函数返回由调用 VMProtectSetSerialNumber() 指定的序列号的状态标志。

int VMProtectGetSerialNumberState();

如果设置了至少一个标志,则序列号存在问题。如果设置至少一个比特,则该程序不应工作。标志及其值的详细说明在下表中列出:

标志 描述
SERIAL_STATE_FLAG_CORRUPT 0×00000001 授权系统已损坏。可能的原因是:所保护的工程设置不正确,尝试破解。
SERIAL_STATE_FLAG_INVALID 0×00000002 序列号不正确。如果授权系统无法解密序列号,则设置该标志。
SERIAL_STATE_FLAG_BLACKLISTED 0×00000004 序列号与产品匹配,但在 VMProtect 中被列入黑名单。
SERIAL_STATE_FLAG_DATE_EXPIRED 0×00000008 序列号已过期。您可以通过调用 VMProtectGetSerialNumberData() 获取有关到期日期的详细信息。
SERIAL_STATE_FLAG_RUNNING_TIME_OVER 0×00000010 该程序的运行时间已耗尽。可以通过调用 VMProtectGetSerialNumberData() 获取程序运行时间的详细信息。
SERIAL_STATE_FLAG_BAD_HWID 0×00000020 硬件标识符与密钥中规定的硬件标识符不匹配。
SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED 0×00000040 序列号与受保护程序的当前版本不匹配。您可以通过调用 VMProtectGetSerialNumberData() 获取此序列号匹配的程序的最大构建日期。

VMProtectGetSerialNumberData

此函数获取有关通过调用 VMProtectSetSerialNumber() 获取的序列号内容的信息。调用语法:

bool VMProtectGetSerialNumberData(VMProtectSerialNumberData *Data, int Size);

第一个参数是指向结构的指针,所有必要的信息都将写入其中。第二个参数是第一个参数中传递的结构的大小。需要控制结构的格式。如果授权系统损坏(请参阅 SERIAL_STATE_FLAG_CORRUPTED 标志),如果提供了结构的零地址或如果结构的传递大小不正确,则该函数返回 FALSE。在所有其他情况下,该函数返回 TRUE 并将有关序列号的所有信息记录到提供的地址。下面是结构的元素:

元素 类型 描述
nState int 指示密钥状态的位元标志掩码。类似于 VMProtectGetSerialNumberState() 返回的那个。
wUserName wchar_t[256] UNICODE 格式的客户名称,以空字符结尾。
wEMail wchar_t[256] UNICODE 格式的客户电子邮件,以空字符结尾。
dtExpire VMProtectDate 密钥到期日期。VMProtectDate 结构的格式如下所述。
dtMaxBuild VMProtectDate 给定密钥可以使用的最大产品构建日期。VMProtectDate 结构的格式如下所述。
bRunningTime int 程序将运行的分钟数(会话的最长持续时间)。以分钟为单位的值从程序启动的那一刻开始计算。
nUserDataLength unsigned char bUserData 字段中用户数据的长度。
bUserData unsigned char[255] 用户数据放入密钥。实际的字节数在 nUserDataLength 中指定。

VMProtectDate 结构是日期的紧凑表示。其字段如下表所示:

元素 类型 描述
wYear unsigned short 年。
Bmonth unsigned char 月,从 1 开始。
bday unsigned char 天,从 1 开始。

VMProtectGetCurrentHWID

此函数获取程序正在运行的 PC 的硬件标识符。调用语法:

int VMProtectGetCurrentHWID(char * HWID, int Size);

第一个参数是指向写入标识符的内存区域的指针。第二个参数是这个区域的大小。该函数返回写入的字节数,包括尾随零字节 ('\0')。如果在第一个参数中提供 NULL,则函数返回存储硬件标识符所需的字节数。以下是使用该功能的正确方法:

int nSize = VMProtectGetCurrentHWID(NULL, 0); // 获取所需的缓冲区大小
char *pBuf = new char[nSize]; // 为缓冲区分配内存
VMProtectGetCurrentHWID(pBuf, nSize); // 获取标识符
// 使用标识符
delete [] pBuf; // 释放内存