Собственно к чему будет идти привязка ? Насколько я понимаю, вызвав VMProtectGetCurrentHWID на одной машине сейчас, через месяц, год…я должен получить одно и тоже значение. И…насколько я понимаю идет привязка к сер.номерам моей периферии. Т.е. заменив что-то в моем ПК я получу уже другое значение в VMProtectGetCurrentHWID ?
Каков максимальный размер этого идентификатора ?
И, собственно, как его получать ? Примеры только на Сях (
Я попытался получить на Delphi. Получилось, при условии изменения заголовочного файла VMProtectSDK.pas Но полученное значение меня смутило. Что это ? Я получаю &E
Собственно к чему будет идти привязка ? Насколько я понимаю, вызвав VMProtectGetCurrentHWID на одной машине сейчас, через месяц, год…я должен получить одно и тоже значение. И…насколько я понимаю идет привязка к сер.номерам моей периферии. Т.е. заменив что-то в моем ПК я получу уже другое значение в VMProtectGetCurrentHWID ?
И еще одно уточнение. Предположим у меня будет 3 и более ПК с одинаковым железом. Правильно ли я понимаю, что вызвав сабж(VMProtectGetCurrentHWID) я получу разные значения для всех своих ПК ?
В текущей версии привязка идет к CPU+MAC+имя компьютера. В версии 2.02 будет добавлен HDD.
Т.е. заменив что-то в моем ПК я получу уже другое значение в VMProtectGetCurrentHWID ?
Если на компьютере изменится один или несколько перечисленных компонентов, то в результате вы получите уже другой HWID.
Каков максимальный размер этого идентификатора ?
В бинарном виде это 4 DWORD-а, т.е. после преобразования HWID в base64 получится порядка 20-ти символов.
И, собственно, как его получать ? Примеры только на Сях (
Я попытался получить на Delphi.
Если вы используете Delphi2009 и выше - вместо PChar надо использовать PAnsiChar (как в VMProtectSDK.pas, так и в определении pBuf):
function VMProtectGetCurrentHWID(Buffer:PAnsiChar; BufferLen: Cardinal): Integer; stdcall;
...
var pBuf:PAnsiChar;
...
Все остальное правильно.
И еще одно уточнение. Предположим у меня будет 3 и более ПК с одинаковым железом. Правильно ли я понимаю, что вызвав сабж(VMProtectGetCurrentHWID) я получу разные значения для всех своих ПК ?
Если все 3 ПК имеют абсолютно одинаковое железо (CPU+MAC+HDD+имя компьютера), то на всех этих компьютерах будет одинаковый HWID.
Почему вы считаете что пользователь раз месяц меняет или имя компьютера или MAC у своей сетевой карты?
Да потому, что так и есть. Естественно, 95% пользователей этого не делает, но что делать с 5% ?
Вы знаете, в данный момент в своем софте я отображаю серийник винчестера и по нему пользователь проходит регистрацию. Так вот, даже при одной железке (винте) у меня полно проблем… то поменяли, то сгорел, то еще что-то.
А Вы предлагаете имя пользователя + мак )) Нет уж, спасибо ))
В новой версии лицензирования будет проверяться совпадение 3 идентификаторов из 4-х. Т.е. при смене жесткого диска серийный номер все равно будет подходить к новой конфигурации. В любом случае при привязке к железу есть вероятность того, что пользователь может поменять все компоненты и вы заранее должны учитывать эти моменты перед тем как выбрать такой тип лицензирования.
P.S. Для “надежной” привязки программы к железу (если уж очень хочется) я могу предложить вариант с использованием электронного ключа типа SenseLock. Тогда у пользователя не возникнет никаких проблем даже при замене компьютера целиком.
Для “надежной” привязки программы к железу (если уж очень хочется) я могу предложить вариант с использованием электронного ключа типа SenseLock. Тогда у пользователя не возникнет никаких проблем даже при замене компьютера целиком.
Да я в курсе…читал.
Минусы :
Мои клиенты удалены от меня. Я им буду высылать ключ до месяца;
Насколько я осведомлен, то работать с ключами прийдется в Сях(а я хочу в Delphi);
Вся эта затея с идентификаторами используется для моих партнеров. А они в свою очередь получают все и бесплатно. Тут я “попаду” крупно, если буду раздавать эл.ключи бесплатно )) Хотя…в принципе, этот пункт можно отбросить.
Мои клиенты удалены от меня. Я им буду высылать ключ до месяца;
Если вы распространяете программу через партнеров - можно им высылать сразу готовую партию ключей, а конечной доставкой до пользователя уже будут заниматься они.
Вся эта затея с идентификаторами используется для моих партнеров. А они в свою очередь получают все и бесплатно. Тут я “попаду” крупно, если буду раздавать эл.ключи бесплатно )) Хотя…в принципе, этот пункт можно отбросить.
Тут конечно решать вам - если вы продаете программу за 50$, то стоимость самого ключа будет составлять существенную долю от стоимости программы. Ну если программа стоит от 1000$ и выше - то 20-ку можно и “подарить” конечному пользователю )
Привязка к маку - это вообще отдельная тема. При включении, например, WiFi на ноуте, мак сменится. Я с этим нагемороился уже, так что никому не советую . Процессор, кстати, берётся какой? Первый, все сразу (не какой попадётся же)?
Понятное дело
Но в многопроцессорных системах процессоры могут иметь, например, разные Stepping, разные серийные номера и т.п. (не знаю, что вы используете). И какой процессор попадётся в при выполнении CPUID (если не делать SetProcessAffinityMask) - неизвестно. Соответственно, 2 запуска программы могут выдать разные результаты.
Вообще, было бы хорошо, если бы сабжевой функции передавались параметры (в виде бит-маски, например) - привязку к какому железу делать:
Но в многопроцессорных системах процессоры могут иметь, например, разные Stepping, разные серийные номера и т.п. (не знаю, что вы используете). И какой процессор попадётся в при выполнении CPUID (если не делать SetProcessAffinityMask) - неизвестно. Соответственно, 2 запуска программы могут выдать разные результаты.
Мы учтем это в следующих версиях VMProtect.
Вообще, было бы хорошо, если бы сабжевой функции передавались параметры (в виде бит-маски, например) - привязку к какому железу делать:
к процессору
к биосу
к видеокарте
к винту
к маку
к имени компьютера или юзеру (sid’у)
Если вы максимально сузите количество собираемой информации о железе, тем выше вероятность что выданный ранее серийник не будет работать при смене тогоже HDD или материнской платы. В настоящее время в VMProtect разработан более универсальный метод, который позволяет частично менять “железо” и при этом сохранять валидность ранее выданных серийников. С вашим же подходом вы добъетесь совершенно противоположного эффекта. Вам это действительно нужно? )
Есть разная привязка.
Например, привязка к железке, на которой хранится файл (к флешке или HDD) - это одно. Привязка к процессору, биосу, видеокарте и маку - это другое (причём обязательны здесь, ИМХО, только первые 2 пункта). Привязка к Windows (sid’у или имени компьютера) нужна тоже не всегда, т.к. создаёт лишний гемор при переустановке винды - это третье (но сюда не мешает включить cpu,bios,etc).
Это все учитывается - в HWID записываются MAC адреса всех сетевых устройств и при проверке HWID ищется совпадение хотя бы одного MAC из списка.
Кстати, я не совсем понимаю, как это работает. Ведь VMProtectGetCurrentHWID возвращает одно значение. Где же проверка?
Например, привязка к железке, на которой хранится файл (к флешке или HDD) - это одно.
Согласен, что это уже совсем другой тип привязки.
Привязка к процессору, биосу, видеокарте и маку - это другое (причём обязательны здесь, ИМХО, только первые 2 пункта).
Сейчас как раз так и сделано.
Кстати, я не совсем понимаю, как это работает. Ведь VMProtectGetCurrentHWID возвращает одно значение. Где же проверка?
VMProtectGetCurrentHWID возвращает список хешей идентификаторов оборудования в base64. При проверке серийника система лицензирования сверяет между собой 2 списка оборудования (один список это текущий HWID и второй - это HWID из серийника). Допускается замена некоторых “устройств” из общего списка.