授权 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; // 释放内存