Прежде чем привязываться к оборудованию, необходимо получить идентификатор оборудования. Идентификатор помещается в серийный номер и при передаче этого номера системе лицензирования происходит проверка соответствия идентификаторов. Поэтому для начала получим идентификатор нашего оборудования. Сократим 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" идентификатором оборудования:
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 - серийный номер подходит.
Попробуем теперь "запустить" нашу программу на другом оборудовании. Для этого поменяем значение "test" параметра MyHWID в ini-файле на "new test". И снова запустим программу:
HWID: new test state = SERIAL_STATE_FLAG_BAD_HWID
На этот раз система лицензирования вернула флаг SERIAL_STATE_FLAG_BAD_HWID, означающий несовпадение реально идентификатора оборудования с тем, что хранится в серийном номере. Текущий идентификатор оборудования, выведенный на экран - "new test", а в серийном номере хранится "test". Поменяв в ini-файле значение параметра KeyHWID на "new test" можно добиться работы серийного номера и на этом "оборудовании".