VMProtectGetCurrentHWID

Issues related to VMProtect
Talla2k
Posts: 5
Joined: Mon Nov 30, 2009 10:35 pm

VMProtectGetCurrentHWID

Post 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;

Talla2k
Posts: 5
Joined: Mon Nov 30, 2009 10:35 pm

Post by Talla2k »

Собственно к чему будет идти привязка ? Насколько я понимаю, вызвав VMProtectGetCurrentHWID на одной машине сейчас, через месяц, год...я должен получить одно и тоже значение. И...насколько я понимаю идет привязка к сер.номерам моей периферии. Т.е. заменив что-то в моем ПК я получу уже другое значение в VMProtectGetCurrentHWID ?

И еще одно уточнение. Предположим у меня будет 3 и более ПК с одинаковым железом. Правильно ли я понимаю, что вызвав сабж(VMProtectGetCurrentHWID) я получу разные значения для всех своих ПК ?
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post 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.
Talla2k
Posts: 5
Joined: Mon Nov 30, 2009 10:35 pm

Post by Talla2k »

В текущей версии привязка идет к CPU+MAC+имя компьютера. В версии 2.02 будет добавлен HDD.
Если все 3 ПК имеют абсолютно одинаковое железо (CPU+MAC+HDD+имя компьютера), то на всех этих компьютерах будет одинаковый HWID.

ИМХО, это не правильно. Особенно с MAC+имя компьютера. При таких условиях нужно будет каждый месяц генерить новый пароль.
Ну что ж...спасибо и на этом.
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

ИМХО, это не правильно. Особенно с MAC+имя компьютера. При таких условиях нужно будет каждый месяц генерить новый пароль.
Ну что ж...спасибо и на этом.
Почему вы считаете что пользователь раз месяц меняет или имя компьютера или MAC у своей сетевой карты?
Talla2k
Posts: 5
Joined: Mon Nov 30, 2009 10:35 pm

Post by Talla2k »

Почему вы считаете что пользователь раз месяц меняет или имя компьютера или MAC у своей сетевой карты?

Да потому, что так и есть. Естественно, 95% пользователей этого не делает, но что делать с 5% ?

Вы знаете, в данный момент в своем софте я отображаю серийник винчестера и по нему пользователь проходит регистрацию. Так вот, даже при одной железке (винте) у меня полно проблем... то поменяли, то сгорел, то еще что-то.

А Вы предлагаете имя пользователя + мак )) Нет уж, спасибо ))
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

В новой версии лицензирования будет проверяться совпадение 3 идентификаторов из 4-х. Т.е. при смене жесткого диска серийный номер все равно будет подходить к новой конфигурации. В любом случае при привязке к железу есть вероятность того, что пользователь может поменять все компоненты и вы заранее должны учитывать эти моменты перед тем как выбрать такой тип лицензирования.

P.S. Для "надежной" привязки программы к железу (если уж очень хочется) я могу предложить вариант с использованием электронного ключа типа SenseLock. Тогда у пользователя не возникнет никаких проблем даже при замене компьютера целиком.
Talla2k
Posts: 5
Joined: Mon Nov 30, 2009 10:35 pm

Post by Talla2k »

Для "надежной" привязки программы к железу (если уж очень хочется) я могу предложить вариант с использованием электронного ключа типа SenseLock. Тогда у пользователя не возникнет никаких проблем даже при замене компьютера целиком.

Да я в курсе...читал.
Минусы :
- Мои клиенты удалены от меня. Я им буду высылать ключ до месяца;
- Насколько я осведомлен, то работать с ключами прийдется в Сях(а я хочу в Delphi);
- Вся эта затея с идентификаторами используется для моих партнеров. А они в свою очередь получают все и бесплатно. Тут я "попаду" крупно, если буду раздавать эл.ключи бесплатно )) Хотя...в принципе, этот пункт можно отбросить.
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

- Насколько я осведомлен, то работать с ключами прийдется в Сях(а я хочу в Delphi);
Для работы с теме же SenseLock есть SDK на Delphi (http://www.senselock.ru/support.php)
- Мои клиенты удалены от меня. Я им буду высылать ключ до месяца;
Если вы распространяете программу через партнеров - можно им высылать сразу готовую партию ключей, а конечной доставкой до пользователя уже будут заниматься они.
- Вся эта затея с идентификаторами используется для моих партнеров. А они в свою очередь получают все и бесплатно. Тут я "попаду" крупно, если буду раздавать эл.ключи бесплатно )) Хотя...в принципе, этот пункт можно отбросить.
Тут конечно решать вам - если вы продаете программу за 50$, то стоимость самого ключа будет составлять существенную долю от стоимости программы. Ну если программа стоит от 1000$ и выше - то 20-ку можно и "подарить" конечному пользователю :))
jx
Posts: 13
Joined: Wed Dec 23, 2009 5:22 pm

Post by jx »

Привязка к маку - это вообще отдельная тема. При включении, например, WiFi на ноуте, мак сменится. Я с этим нагемороился уже, так что никому не советую :). Процессор, кстати, берётся какой? Первый, все сразу (не какой попадётся же)?
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

jx wrote:При включении, например, WiFi на ноуте, мак сменится.
Это все учитывается - в HWID записываются MAC адреса всех сетевых устройств и при проверке HWID ищется совпадение хотя бы одного MAC из списка.
jx wrote:Процессор, кстати, берётся какой? Первый, все сразу (не какой попадётся же)?
Информация о процессоре получается через CPUID.
jx
Posts: 13
Joined: Wed Dec 23, 2009 5:22 pm

Post by jx »

Admin wrote:Информация о процессоре получается через CPUID.
Понятное дело :)
Но в многопроцессорных системах процессоры могут иметь, например, разные Stepping, разные серийные номера и т.п. (не знаю, что вы используете). И какой процессор попадётся в при выполнении CPUID (если не делать SetProcessAffinityMask) - неизвестно. Соответственно, 2 запуска программы могут выдать разные результаты.

Вообще, было бы хорошо, если бы сабжевой функции передавались параметры (в виде бит-маски, например) - привязку к какому железу делать:
* к процессору
* к биосу
* к видеокарте
* к винту
* к маку
* к имени компьютера или юзеру (sid'у)
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

Но в многопроцессорных системах процессоры могут иметь, например, разные Stepping, разные серийные номера и т.п. (не знаю, что вы используете). И какой процессор попадётся в при выполнении CPUID (если не делать SetProcessAffinityMask) - неизвестно. Соответственно, 2 запуска программы могут выдать разные результаты.
Мы учтем это в следующих версиях VMProtect.
Вообще, было бы хорошо, если бы сабжевой функции передавались параметры (в виде бит-маски, например) - привязку к какому железу делать:
* к процессору
* к биосу
* к видеокарте
* к винту
* к маку
* к имени компьютера или юзеру (sid'у)
Если вы максимально сузите количество собираемой информации о железе, тем выше вероятность что выданный ранее серийник не будет работать при смене тогоже HDD или материнской платы. В настоящее время в VMProtect разработан более универсальный метод, который позволяет частично менять "железо" и при этом сохранять валидность ранее выданных серийников. С вашим же подходом вы добъетесь совершенно противоположного эффекта. Вам это действительно нужно? :))
jx
Posts: 13
Joined: Wed Dec 23, 2009 5:22 pm

Post by jx »

Есть разная привязка.
Например, привязка к железке, на которой хранится файл (к флешке или HDD) - это одно. Привязка к процессору, биосу, видеокарте и маку - это другое (причём обязательны здесь, ИМХО, только первые 2 пункта). Привязка к Windows (sid'у или имени компьютера) нужна тоже не всегда, т.к. создаёт лишний гемор при переустановке винды - это третье (но сюда не мешает включить cpu,bios,etc).
Это все учитывается - в HWID записываются MAC адреса всех сетевых устройств и при проверке HWID ищется совпадение хотя бы одного MAC из списка.
Кстати, я не совсем понимаю, как это работает. Ведь VMProtectGetCurrentHWID возвращает одно значение. Где же проверка?
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Post by Admin »

Например, привязка к железке, на которой хранится файл (к флешке или HDD) - это одно.
Согласен, что это уже совсем другой тип привязки.
Привязка к процессору, биосу, видеокарте и маку - это другое (причём обязательны здесь, ИМХО, только первые 2 пункта).
Сейчас как раз так и сделано.
Кстати, я не совсем понимаю, как это работает. Ведь VMProtectGetCurrentHWID возвращает одно значение. Где же проверка?
VMProtectGetCurrentHWID возвращает список хешей идентификаторов оборудования в base64. При проверке серийника система лицензирования сверяет между собой 2 списка оборудования (один список это текущий HWID и второй - это HWID из серийника). Допускается замена некоторых "устройств" из общего списка.
Post Reply