Шаг 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" идентификатором оборудования:

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" можно добиться работы серийного номера и на этом "оборудовании".


Следующий шаг




© 2006-2015 Copyright VMProtect Software