Page 1 of 2
VMProtectGetCurrentHWID
Posted: Mon Nov 30, 2009 10:51 pm
by Talla2k
Доброй ночи.
Пару вопросов.
1) Собственно к чему будет идти привязка ? Насколько я понимаю, вызвав VMProtectGetCurrentHWID на одной машине сейчас, через месяц, год...я должен получить одно и тоже значение. И...насколько я понимаю идет привязка к сер.номерам моей периферии. Т.е. заменив что-то в моем ПК я получу уже другое значение в VMProtectGetCurrentHWID ?
2) Каков максимальный размер этого идентификатора ?
3) И, собственно, как его получать ? Примеры только на Сях (
Я попытался получить на Delphi. Получилось, при условии изменения заголовочного файла VMProtectSDK.pas Но полученное значение меня смутило. Что это ? Я получаю
&E
Код :
Code: Select all
[b]function VMProtectGetCurrentHWID(Buffer:PChar; BufferLen: Cardinal): Integer; stdcall;[/b]
...
procedure TForm1.Button1Click(Sender: TObject);
var pBuf:PChar;
nSize:Integer;
begin
nSize:=VMProtectGetCurrentHWID(nil,0);
GetMem(pBuf,nSize);
try
VMProtectGetCurrentHWID(pBuf,0);
Memo1.Lines.Add(pBuf);
finally
FreeMem(pBuf);
end;
end;
Posted: Mon Nov 30, 2009 10:54 pm
by Talla2k
Собственно к чему будет идти привязка ? Насколько я понимаю, вызвав VMProtectGetCurrentHWID на одной машине сейчас, через месяц, год...я должен получить одно и тоже значение. И...насколько я понимаю идет привязка к сер.номерам моей периферии. Т.е. заменив что-то в моем ПК я получу уже другое значение в VMProtectGetCurrentHWID ?
И еще одно уточнение. Предположим у меня будет 3 и более ПК с одинаковым железом. Правильно ли я понимаю, что вызвав сабж(VMProtectGetCurrentHWID) я получу разные значения для всех своих ПК ?
Posted: Tue Dec 01, 2009 3:38 am
by Admin
Собственно к чему будет идти привязка ?
В текущей версии привязка идет к CPU+MAC+имя компьютера. В версии 2.02 будет добавлен HDD.
Т.е. заменив что-то в моем ПК я получу уже другое значение в VMProtectGetCurrentHWID ?
Если на компьютере изменится один или несколько перечисленных компонентов, то в результате вы получите уже другой HWID.
Каков максимальный размер этого идентификатора ?
В бинарном виде это 4 DWORD-а, т.е. после преобразования HWID в base64 получится порядка 20-ти символов.
И, собственно, как его получать ? Примеры только на Сях (
Я попытался получить на Delphi.
Если вы используете Delphi2009 и выше - вместо PChar надо использовать PAnsiChar (как в VMProtectSDK.pas, так и в определении pBuf):
Code: Select all
function VMProtectGetCurrentHWID(Buffer:PAnsiChar; BufferLen: Cardinal): Integer; stdcall;
...
var pBuf:PAnsiChar;
...
Все остальное правильно.
И еще одно уточнение. Предположим у меня будет 3 и более ПК с одинаковым железом. Правильно ли я понимаю, что вызвав сабж(VMProtectGetCurrentHWID) я получу разные значения для всех своих ПК ?
Если все 3 ПК имеют абсолютно одинаковое железо (CPU+MAC+HDD+имя компьютера), то на всех этих компьютерах будет одинаковый HWID.
Posted: Tue Dec 01, 2009 8:08 am
by Talla2k
В текущей версии привязка идет к CPU+MAC+имя компьютера. В версии 2.02 будет добавлен HDD.
Если все 3 ПК имеют абсолютно одинаковое железо (CPU+MAC+HDD+имя компьютера), то на всех этих компьютерах будет одинаковый HWID.
ИМХО, это не правильно. Особенно с MAC+имя компьютера. При таких условиях нужно будет каждый месяц генерить новый пароль.
Ну что ж...спасибо и на этом.
Posted: Tue Dec 01, 2009 12:13 pm
by Admin
ИМХО, это не правильно. Особенно с MAC+имя компьютера. При таких условиях нужно будет каждый месяц генерить новый пароль.
Ну что ж...спасибо и на этом.
Почему вы считаете что пользователь раз месяц меняет или имя компьютера или MAC у своей сетевой карты?
Posted: Tue Dec 01, 2009 6:14 pm
by Talla2k
Почему вы считаете что пользователь раз месяц меняет или имя компьютера или MAC у своей сетевой карты?
Да потому, что так и есть. Естественно, 95% пользователей этого не делает, но что делать с 5% ?
Вы знаете, в данный момент в своем софте я отображаю серийник винчестера и по нему пользователь проходит регистрацию. Так вот, даже при одной железке (винте) у меня полно проблем... то поменяли, то сгорел, то еще что-то.
А Вы предлагаете имя пользователя + мак )) Нет уж, спасибо ))
Posted: Tue Dec 01, 2009 6:53 pm
by Admin
В новой версии лицензирования будет проверяться совпадение 3 идентификаторов из 4-х. Т.е. при смене жесткого диска серийный номер все равно будет подходить к новой конфигурации. В любом случае при привязке к железу есть вероятность того, что пользователь может поменять все компоненты и вы заранее должны учитывать эти моменты перед тем как выбрать такой тип лицензирования.
P.S. Для "надежной" привязки программы к железу (если уж очень хочется) я могу предложить вариант с использованием электронного ключа типа SenseLock. Тогда у пользователя не возникнет никаких проблем даже при замене компьютера целиком.
Posted: Tue Dec 01, 2009 10:01 pm
by Talla2k
Для "надежной" привязки программы к железу (если уж очень хочется) я могу предложить вариант с использованием электронного ключа типа SenseLock. Тогда у пользователя не возникнет никаких проблем даже при замене компьютера целиком.
Да я в курсе...читал.
Минусы :
- Мои клиенты удалены от меня. Я им буду высылать ключ до месяца;
- Насколько я осведомлен, то работать с ключами прийдется в Сях(а я хочу в Delphi);
- Вся эта затея с идентификаторами используется для моих партнеров. А они в свою очередь получают все и бесплатно. Тут я "попаду" крупно, если буду раздавать эл.ключи бесплатно )) Хотя...в принципе, этот пункт можно отбросить.
Posted: Wed Dec 02, 2009 3:31 am
by Admin
- Насколько я осведомлен, то работать с ключами прийдется в Сях(а я хочу в Delphi);
Для работы с теме же SenseLock есть SDK на Delphi (
http://www.senselock.ru/support.php)
- Мои клиенты удалены от меня. Я им буду высылать ключ до месяца;
Если вы распространяете программу через партнеров - можно им высылать сразу готовую партию ключей, а конечной доставкой до пользователя уже будут заниматься они.
- Вся эта затея с идентификаторами используется для моих партнеров. А они в свою очередь получают все и бесплатно. Тут я "попаду" крупно, если буду раздавать эл.ключи бесплатно )) Хотя...в принципе, этот пункт можно отбросить.
Тут конечно решать вам - если вы продаете программу за 50$, то стоимость самого ключа будет составлять существенную долю от стоимости программы. Ну если программа стоит от 1000$ и выше - то 20-ку можно и "подарить" конечному пользователю

)
Posted: Wed Dec 23, 2009 5:49 pm
by jx
Привязка к маку - это вообще отдельная тема. При включении, например, WiFi на ноуте, мак сменится. Я с этим нагемороился уже, так что никому не советую

. Процессор, кстати, берётся какой? Первый, все сразу (не какой попадётся же)?
Posted: Wed Dec 23, 2009 7:19 pm
by Admin
jx wrote:При включении, например, WiFi на ноуте, мак сменится.
Это все учитывается - в HWID записываются MAC адреса всех сетевых устройств и при проверке HWID ищется совпадение хотя бы одного MAC из списка.
jx wrote:Процессор, кстати, берётся какой? Первый, все сразу (не какой попадётся же)?
Информация о процессоре получается через CPUID.
Posted: Thu Dec 24, 2009 9:20 am
by jx
Admin wrote:Информация о процессоре получается через CPUID.
Понятное дело

Но в многопроцессорных системах процессоры могут иметь, например, разные Stepping, разные серийные номера и т.п. (не знаю, что вы используете). И какой процессор попадётся в при выполнении CPUID (если не делать SetProcessAffinityMask) - неизвестно. Соответственно, 2 запуска программы могут выдать разные результаты.
Вообще, было бы хорошо, если бы сабжевой функции передавались параметры (в виде бит-маски, например) - привязку к какому железу делать:
* к процессору
* к биосу
* к видеокарте
* к винту
* к маку
* к имени компьютера или юзеру (sid'у)
Posted: Thu Dec 24, 2009 10:43 am
by Admin
Но в многопроцессорных системах процессоры могут иметь, например, разные Stepping, разные серийные номера и т.п. (не знаю, что вы используете). И какой процессор попадётся в при выполнении CPUID (если не делать SetProcessAffinityMask) - неизвестно. Соответственно, 2 запуска программы могут выдать разные результаты.
Мы учтем это в следующих версиях VMProtect.
Вообще, было бы хорошо, если бы сабжевой функции передавались параметры (в виде бит-маски, например) - привязку к какому железу делать:
* к процессору
* к биосу
* к видеокарте
* к винту
* к маку
* к имени компьютера или юзеру (sid'у)
Если вы максимально сузите количество собираемой информации о железе, тем выше вероятность что выданный ранее серийник не будет работать при смене тогоже HDD или материнской платы. В настоящее время в VMProtect разработан более универсальный метод, который позволяет частично менять "железо" и при этом сохранять валидность ранее выданных серийников. С вашим же подходом вы добъетесь совершенно противоположного эффекта. Вам это действительно нужно?

)
Posted: Thu Dec 24, 2009 11:22 am
by jx
Есть разная привязка.
Например, привязка к железке, на которой хранится файл (к флешке или HDD) - это одно. Привязка к процессору, биосу, видеокарте и маку - это другое (причём обязательны здесь, ИМХО, только первые 2 пункта). Привязка к Windows (sid'у или имени компьютера) нужна тоже не всегда, т.к. создаёт лишний гемор при переустановке винды - это третье (но сюда не мешает включить cpu,bios,etc).
Это все учитывается - в HWID записываются MAC адреса всех сетевых устройств и при проверке HWID ищется совпадение хотя бы одного MAC из списка.
Кстати, я не совсем понимаю, как это работает. Ведь VMProtectGetCurrentHWID возвращает одно значение. Где же проверка?
Posted: Thu Dec 24, 2009 12:14 pm
by Admin
Например, привязка к железке, на которой хранится файл (к флешке или HDD) - это одно.
Согласен, что это уже совсем другой тип привязки.
Привязка к процессору, биосу, видеокарте и маку - это другое (причём обязательны здесь, ИМХО, только первые 2 пункта).
Сейчас как раз так и сделано.
Кстати, я не совсем понимаю, как это работает. Ведь VMProtectGetCurrentHWID возвращает одно значение. Где же проверка?
VMProtectGetCurrentHWID возвращает список хешей идентификаторов оборудования в base64. При проверке серийника система лицензирования сверяет между собой 2 списка оборудования (один список это текущий HWID и второй - это HWID из серийника). Допускается замена некоторых "устройств" из общего списка.