主页 » 支持 » 用户手册 » 授权系统 » 集成到应用程序 » 步骤1.9:硬件锁

步骤1.9:硬件锁

接收硬件标识符

在锁定硬件之前,我们必须收到硬件标识符。标识符被放入序列号中,当序列号传递给授权系统时,它会检查标识符是否匹配。所以,首先我们需要接收我们硬件的标识符。让我们将 main() 函数简化:

int main(int argc, char **argv)
{
        int nSize = VMProtectGetCurrentHWID(NULL, 0);
        char *buf = new char[nSize];
        VMProtectGetCurrentHWID(buf, nSize);
        printf("HWID: %s\n", buf);
        delete [] buf;
        return 0;
}

通过运行程序,我们将收到一个默认测试硬件标识符:

HWID: myhwid

要更改标识符,请将以下行添加到 ini 文件:

MyHWID=test

如果我们之后运行程序,我们可以看到系统认为 “test” 是我们 PC 的硬件标识符:

HWID: test

重要提示! 只有经过 VMProtect 处理后,程序才会显示真正的硬件标识符。

要将我们的测试序列号锁定到硬件,我们应该在 ini 文件中再添加一行。这次我们定义 “放入” 序列号的标识符:

int main(int argc, char **argv)
{
        int nSize = VMProtectGetCurrentHWID(NULL, 0);
        char *buf = new char[nSize];
        VMProtectGetCurrentHWID(buf, nSize);
        printf("HWID: %s\n", buf);
        delete [] buf;
        
        char *serial = "Xserialnumber";
        int res = VMProtectSetSerialNumber(serial);
        print_state(res);
        return 0;
}

运行代码后,我们将看到以下结果:

HWID: test
state = 0

授权系统已将当前硬件标识符与序列号中写入的标识符进行比较。标识符相等,因此 VMProtectSetSerialNumber() 函数返回 0 - 序列号匹配。

现在让我们尝试在另一个硬件上 “运行” 我们的程序。我们只需将 ini 文件中 MyHWID 参数的值从 “test” 更改为 “new test” 。再次运行程序:

HWID: new test
state = SERIAL_STATE_FLAG_BAD_HWID

这次授权系统返回了 SERIAL_STATE_FLAG_BAD_HWID 标志,这意味着真实的硬件标识符和存储在序列号中的标识符不匹配。我们在屏幕上看到的当前标识符是 “new test” ,而序列号是 “test” 。如果我们将 ini 文件中的 KeyHWID 参数更改为 “新测试” ,我们也可以让我们的序列号在这个 “硬件” 上工作。

下一步