步骤1.10:用户数据
序列号最多可容纳 255 字节的任意数据,授权系统按原样传递给程序。该数据可以包含有关销售的任何附加信息、完整版本操作所需的数据或其他内容。让我们修改我们的 main() 函数,让它从一个序列号中读取数据并将它们显示在屏幕上:
int main(int argc, char **argv) { char *serial = "Xserialnumber"; int res = VMProtectSetSerialNumber(serial); print_state(res); if (res) return 0; VMProtectSerialNumberData sd = {0}; VMProtectGetSerialNumberData(&sd, sizeof(sd)); printf("序列号有 %d 个字节的数据\n", sd.nUserDataLength); for (int i = 0; i < sd.nUserDataLength; i++) printf("%02X ", sd.bUserData[i]); printf("\n"); return 0; }
我们还将 Ini 文件简化为:
[测试授权] AcceptedSerialNumber=Xserialnumber
现在,我们运行程序并确保我们的序列号运行良好,但不包含任何数据:
state = 0 序列号有 0 个字节的数据
要将新的用户数据添加到序列号中,我们需要在 ini 文件中创建 UserData 变量并以 HEX 格式为其分配数据。符号必须成对出现,即一行的长度必须是 2 的倍数。像这样:
UserData=010203A0B0C0D0E0
在这种情况下,如果我们运行程序,我们将收到以下结果:
状态= 0 序列号有 8 个字节的数据 01 02 03 A0 B0 C0 D0 E0