彩票走势图

logo VMPsoft中文文档

步骤 1.9:硬件锁


VMProtect 是保护应用程序代码免遭分析和破解的可靠工具,但只有在正确构建应用程序内保护机制并且没有可能破坏整个保护的典型错误的情况下才能最有效地使用。

VMProtect最新版下载

VMProtect 是保护应用程序代码免遭分析和破解的可靠工具,但只有在正确构建应用程序内保护机制并且没有可能破坏整个保护的典型错误的情况下才能最有效地使用。

接收硬件标识符

在我们锁定硬件之前,我们必须收到一个硬件标识符。标识符被放入序列号中,当序列号传递给许可系统时,它会检查标识符是否匹配。因此,首先我们需要接收硬件的标识符。让我们将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 文件中再添加一行。这次我们定义“放入”序列号的标识符:
KeyHWID=test

然后我们将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; 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 参数更改为“new test”,我们也可以让我们的序列号在这个“硬件”上工作。

扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP