Re: Привязка программы к компьютеру
От: edton  
Дата: 02.11.11 07:36
Оценка: 1 (1) +2
Здравствуйте, LupakovO, Вы писали:

LO>Здравствуйте.


LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?

LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.

Еще 15 лет назад наши классики шаровары вроде Каталова писали что привязка к железу — плохая идея.
Найдите статьи, почитайте.
Re: Привязка программы к компьютеру
От: Kubyshev Andrey  
Дата: 02.11.11 04:51
Оценка: +1 -2
Я привязываюсь к имени компьютера.
На мой взгляд удобно.
Re: Привязка программы к компьютеру
От: okman Беларусь https://searchinform.ru/
Дата: 01.11.11 16:56
Оценка: 1 (1) +1
Здравствуйте, LupakovO, Вы писали:

LO>Здравствуйте.


LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?


Привязываться лучше к нескольким параметрам, для надежности.
Например, если из пяти компонентов три или четыре вдруг меняют характеристики — значит,
запуск произведен на другом компьютере.

LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?


Дело даже не в этом, а в том, что для получения наиболее "железных" параметров приходится
влезать в kernel-mode (писать драйвер). К тому же, железо разных производителей (Intel/AMD,
GeForce/Radeon) имеет, как правило, разный API для доступа к своим характеристикам.

LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.


Наиболее реальный вариант — использовать WMI и CPUID.
В Windows Vista и выше есть полезная функция — GetSystemFirmwareTable (для XP придется
писать хак через Device\PhysicalMemory). С ее помощью можно вытянуть очень много интересного,
но чтобы разобраться во всем этом, нужно перелопатить официальные спецификации SMBIOS, DMI и т.п.
В общем, пуд соли обеспечен, а выгоды туманны.
Re[5]: Привязка программы к компьютеру
От: Disker  
Дата: 02.11.11 18:50
Оценка: 2 (1)
Здравствуйте, okman, Вы писали:

O>>>На моем компе в соответствующем ключе под Wow6432Node запись MachineGuid отсутствует.


Странно, сейчас откомпилировал Delphi-вариант (разумеется, результат 32-битный), он работает корректно в Windows 7 SP1 64-bit, и с привилегиями, и без них.
Больше того :) Проверил в Windows 8 Developer Preview 64-bit (правда, в виртуальной машине), там тоже всё работает.
Re[3]: Привязка программы к компьютеру
От: Nonmanual Worker  
Дата: 02.11.11 02:32
Оценка: 1 (1)
Здравствуйте, de Niro, Вы писали:

DM>>Я бы не заморачивался и сделал бы шифрованный ключевой файл. Файл есть и его содержимое корректно — работаем, если нет — прошу на регистрацию, работаем в демо режиме.

DN>Может, я чего-то недопонимаю.
DN>А что помешает недобросовестному юзеру выложить этот ключевой файл на всеобщее пользование?

Мы продаем так софт больше 10 лет. Случаев выкладывания серийника или кейфайла было всего несколько. Софт популярный и известный в определенных кругах.
ИМХО если цена приложения невелика (<500$) и продажи массовые а не адресные, и приложению не нужен всегда интернет, то нет смысла в привязке к машине. Больше потеряете потенциальных покупателей чем выиграете. Однако, это всего лишь мое мнение, буду рад услышать сакскесс-стори про то как перешли на регистрацию с привязкой к железу и продажи выросли хотя бы на 10%.
Re[2]: Привязка программы к компьютеру
От: _AND Российская Империя За Русский мир! За Русь святую!
Дата: 02.11.11 05:45
Оценка: 1 (1)
Здравствуйте, byterus, Вы писали:

B>Я привязываюсь к виндовому идентификатору, у каждой инсталляции он свой.


B>
B>function GetMachineID: string;
B>var
B>  Reg: TRegistry;                    
B>begin
B>  Result := 'UNKNOWN_' + IntToStr(Random(100000));
B>  try
B>    Reg := TRegistry.Create(KEY_READ OR $0100);
B>    try
B>      Reg.RootKey := HKEY_LOCAL_MACHINE;
B>      if Reg.KeyExists('SOFTWARE\Microsoft\Cryptography') and Reg.OpenKey('SOFTWARE\Microsoft\Cryptography', False) and Reg.ValueExists('MachineGuid') then
B>        Result := AnsiUpperCase(Reg.ReadString('MachineGuid'));
B>    finally
B>      Reg.Free;
B>    end;
B>  except
B>  end;
B>end;
B>


Что-то мне кажется что будут проблемы у 32-битного приложения на x64.
Re: Привязка программы к компьютеру
От: drVanо Россия https://vmpsoft.com
Дата: 02.11.11 06:08
Оценка: 1 (1)
Здравствуйте, LupakovO, Вы писали:

LO>Здравствуйте.


LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать?


Лучше взять готовое решение из подписи чем изобретать очередной велосипед.
Re[2]: Привязка программы к компьютеру
От: veroni  
Дата: 02.11.11 16:33
Оценка: 1 (1)
Здравствуйте, DarkMaster, Вы писали:

DM>Здравствуйте, LupakovO, Вы писали:



LO>>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?

LO>>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
LO>>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.

DM>Тебе лучше к шароварщикам обратится. Основные места привязки: материнские платы, винты, система. Винты — не всегда можно точно привязаться — информация, доставаемая через GetVolumeInformation() может быть легко изменена. То же самое относится к системе (Windows ID) — переставили систему — все уехало. Доступ к ID материнки — отдельная песня. Я бы не заморачивался и сделал бы шифрованный ключевой файл. Файл есть и его содержимое корректно — работаем, если нет — прошу на регистрацию, работаем в демо режиме.


DM>P.S. Можно использовать и навесную защиту и комбинацию разных защит — все зависит от того, что программа делает.


Тяжелое детство было у советских шароварщиков. Возьмите любой популярный продует — нет там никакой привязки к железу!
Re[2]: Привязка программы к компьютеру
От: LupakovO  
Дата: 02.11.11 08:26
Оценка: +1
CRT>а как ты будешь поступать когда пользователь поменяет железо и обратится к тебе c просьбой сделать так чтобы его ключ работал на новом железе?

Мне кажется оптимальным решением будет давать пользователю возможность 2-3 раза сменить железо и соответственно серийный номер.
Указать это в лицензионном соглашении. При этом ключи выписывать автоматически на своем сайте. Всякие бывают ситуации, и всех можно
понять и иногда увеличить данное число регистраций.
Re[8]: Привязка программы к компьютеру
От: icezone  
Дата: 02.11.11 09:16
Оценка: -1
Здравствуйте, Nonmanual Worker, Вы писали:

NW>Почему мой? К тому же не припомню случая чтобы какие-нибудь вложения резались, если конечно это не exe или по 10 мегов.


Упс, это DarkMaster'у должно быть адресовано. Аттачи режутся у корпоративщиков, меня даже заранее перед покупкой об этом предупреждали.
Re[2]: Привязка программы к компьютеру
От: okman Беларусь https://searchinform.ru/
Дата: 02.11.11 09:58
Оценка: -1
Здравствуйте, edton, Вы писали:

E>Еще 15 лет назад наши классики шаровары вроде Каталова писали что привязка к железу — плохая идея.


Плюсую.
У меня полно разнообразного софта, но ни один не привязывается к железу и не лезет ни на какие
серверы для всяких там своих проверок. А железо я обновляю периодически, гораздо чаще чем раз в
пять лет. И если бы каждая вторая прога при этом требовала перерегистрации, так ну в баню
такой софт — лучше найти альтернативные программы и не мучиться.
Привязка программы к компьютеру
От: LupakovO  
Дата: 01.11.11 10:19
Оценка:
Здравствуйте.

Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?
Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.

02.11.11 08:32: Перенесено модератором из 'Delphi & Builder' — больше соответствует теме. H_D. — Hacker_Delphi
Re: Привязка программы к компьютеру
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 01.11.11 11:37
Оценка:
Здравствуйте, LupakovO, Вы писали:


LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?

LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.

Тебе лучше к шароварщикам обратится. Основные места привязки: материнские платы, винты, система. Винты — не всегда можно точно привязаться — информация, доставаемая через GetVolumeInformation() может быть легко изменена. То же самое относится к системе (Windows ID) — переставили систему — все уехало. Доступ к ID материнки — отдельная песня. Я бы не заморачивался и сделал бы шифрованный ключевой файл. Файл есть и его содержимое корректно — работаем, если нет — прошу на регистрацию, работаем в демо режиме.

P.S. Можно использовать и навесную защиту и комбинацию разных защит — все зависит от того, что программа делает.
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re: Привязка программы к компьютеру
От: acDev Россия  
Дата: 01.11.11 14:35
Оценка:
Здравствуйте, LupakovO, Вы писали:

LO>Здравствуйте.


LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?


Только HDD (HDDSN) и Монитор (EDID) имеют реально уникальный ID, который производитель обязан "заполнить".

Так же есть ID в:
1) сетевых картах (во встроенных можно в биосе менять значение MAC, поэтому не уникален)
2) планках памяти (не во всех и встречаются дубликаты);
3) материнских платах (не во всех и встречаются дубликаты).

Все эти идентификаторы можно при помощи спец. утилит поменять (кроме HDDSN).

LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?


Только Pentium III первых ревизий содержал ID (да и то можно было в биосе отключить его определение).
Материнские платы штампуют китайцы и им всё равно (дорогие платы конечно содержат всякие ID и т.п.).

LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.

Жёский диск служит в среднем 5 лет. Да и сам комп живёт не больше (апгрейды и т.п.).

ЗЫ. Все выше упомянутые ID можно проэмулировать (перехватить и изменить) ... умельцев на это хватает.
Re[2]: Привязка программы к компьютеру
От: de Niro Ниоткуда  
Дата: 02.11.11 01:34
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>Я бы не заморачивался и сделал бы шифрованный ключевой файл. Файл есть и его содержимое корректно — работаем, если нет — прошу на регистрацию, работаем в демо режиме.


Может, я чего-то недопонимаю.

А что помешает недобросовестному юзеру выложить этот ключевой файл на всеобщее пользование?
Re[4]: Привязка программы к компьютеру
От: de Niro Ниоткуда  
Дата: 02.11.11 04:13
Оценка:
Здравствуйте, Nonmanual Worker, Вы писали:

DM>>>Я бы не заморачивался и сделал бы шифрованный ключевой файл. Файл есть и его содержимое корректно — работаем, если нет — прошу на регистрацию, работаем в демо режиме.

DN>>Может, я чего-то недопонимаю.
DN>>А что помешает недобросовестному юзеру выложить этот ключевой файл на всеобщее пользование?

NW>Мы продаем так софт больше 10 лет. Случаев выкладывания серийника или кейфайла было всего несколько. Софт популярный и известный в определенных кругах.


У меня опыт противоположный. Но вопрос был не об этом. Каков смысл этого ключевого файла по сравнению с серийником, тоже не привязанным к железу? Выложить могут и то, и то. Отличие только в размере?
Re[5]: Привязка программы к компьютеру
От: Nonmanual Worker  
Дата: 02.11.11 04:54
Оценка:
Здравствуйте, de Niro, Вы писали:

DN>У меня опыт противоположный. Но вопрос был не об этом. Каков смысл этого ключевого файла по сравнению с серийником, тоже не привязанным к железу? Выложить могут и то, и то. Отличие только в размере?

Верно, если ключ длинный и его рассылать в письме текстом, то находятся трудные юзеры которые его нормально скопипастить не могут.
Re: Привязка программы к компьютеру
От: byterus Россия  
Дата: 02.11.11 05:11
Оценка:
Я привязываюсь к виндовому идентификатору, у каждой инсталляции он свой.

function GetMachineID: string;
var
  Reg: TRegistry;                    
begin
  Result := 'UNKNOWN_' + IntToStr(Random(100000));
  try
    Reg := TRegistry.Create(KEY_READ OR $0100);
    try
      Reg.RootKey := HKEY_LOCAL_MACHINE;
      if Reg.KeyExists('SOFTWARE\Microsoft\Cryptography') and Reg.OpenKey('SOFTWARE\Microsoft\Cryptography', False) and Reg.ValueExists('MachineGuid') then
        Result := AnsiUpperCase(Reg.ReadString('MachineGuid'));
    finally
      Reg.Free;
    end;
  except
  end;
end;
MySQL stored procedure debugging
Re[2]: Привязка программы к компьютеру
От: _AND Российская Империя За Русский мир! За Русь святую!
Дата: 02.11.11 05:38
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, LupakovO, Вы писали:


O>Наиболее реальный вариант — использовать WMI и CPUID.

Это наиболее НЕ реальный вариант.
WMI сервис может быть не запущен, могут настройки COM быть неправильные, может нехватать прав и тд
Re: Привязка программы к компьютеру
От: _AND Российская Империя За Русский мир! За Русь святую!
Дата: 02.11.11 05:50
Оценка:
Здравствуйте, LupakovO, Вы писали:

LO>Здравствуйте.


LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?

LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.

Надо привязываться к нескольким параметрам и делать так, что-бы изменение одного-двух не влияло на результат.
Использовать параметры ОС для привязки, помимо собственно железа.
Re[6]: Привязка программы к компьютеру
От: icezone  
Дата: 02.11.11 06:29
Оценка:
Здравствуйте, Nonmanual Worker, Вы писали:

NW>Верно, если ключ длинный и его рассылать в письме текстом, то находятся трудные юзеры которые его нормально скопипастить не могут.


Ваш аттач с ключевым файлом могут антивирусники порезать.
Re[3]: Привязка программы к компьютеру
От: okman Беларусь https://searchinform.ru/
Дата: 02.11.11 06:42
Оценка:
Здравствуйте, _AND, Вы писали:

_AN>Это [WMI и CPUID] наиболее НЕ реальный вариант.

_AN>WMI сервис может быть не запущен, могут настройки COM быть неправильные, может нехватать прав и тд

Привязка к оборудованию — это вообще сомнительный вариант, об этом я уже писал, на этом
форуме и не только. Тут столько всяких "но" и "если", что самое время задуматься о
разумности и целесообразности этого пути. Про WMI я в курсе, как и про другие методы — сам
занимался такой защитой вплотную. Еще варианты — приобретать апробированные технические
решения и библиотеки у сторонних компаний, но они имеют приличную стоимость, либо
распостраняются по очень неудобным лицензиям.
Re: Привязка программы к компьютеру
От: CRT  
Дата: 02.11.11 07:09
Оценка:
Здравствуйте, LupakovO, Вы писали:

LO>Здравствуйте.


LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?

LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.

а как ты будешь поступать когда пользователь поменяет железо и обратится к тебе c просьбой сделать так чтобы его ключ работал на новом железе?
Re[2]: Привязка программы к компьютеру
От: _AND Российская Империя За Русский мир! За Русь святую!
Дата: 02.11.11 07:14
Оценка:
Здравствуйте, CRT, Вы писали:

CRT>Здравствуйте, LupakovO, Вы писали:


LO>>Здравствуйте.


LO>>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?

LO>>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
LO>>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.

CRT>а как ты будешь поступать когда пользователь поменяет железо и обратится к тебе c просьбой сделать так чтобы его ключ работал на новом железе?


Сбросить его регистрацию и попросить перерегистрировать с тем же ключом?
Re[3]: Привязка программы к компьютеру
От: CRT  
Дата: 02.11.11 07:20
Оценка:
Здравствуйте, _AND, Вы писали:


CRT>>а как ты будешь поступать когда пользователь поменяет железо и обратится к тебе c просьбой сделать так чтобы его ключ работал на новом железе?


_AN>Сбросить его регистрацию и попросить перерегистрировать с тем же ключом?


тогда возникает еще один вопрос. А если он через неделю еще раз попросит, а потом через неделю еще раз, потом еще раз. Что будешь делать?
Re[4]: Привязка программы к компьютеру
От: _AND Российская Империя За Русский мир! За Русь святую!
Дата: 02.11.11 07:39
Оценка:
Здравствуйте, CRT, Вы писали:

CRT>Здравствуйте, _AND, Вы писали:



CRT>>>а как ты будешь поступать когда пользователь поменяет железо и обратится к тебе c просьбой сделать так чтобы его ключ работал на новом железе?


_AN>>Сбросить его регистрацию и попросить перерегистрировать с тем же ключом?


CRT>тогда возникает еще один вопрос. А если он через неделю еще раз попросит, а потом через неделю еще раз, потом еще раз. Что будешь делать?


Недавно уже было обсуждение, я там подробно писал, что я делаю в таком случае.
Если коротко — попрошу объяснить причину и посмотрю, какие именно параметры привязки у него меняются.
По этой информации делаю вывод, позволить перерегистрацию или нет. Пока что в таких ситуациях (очень редких) всегда продлял.

Встречал такой вариант — это если много пользователей (не мой вариант — на каждый ключ есть несколько (3-5) попыток регистрации (при этом нигде явно это не говорится), если пользователю нужно больше — он пишет и объясняет.
Re[3]: Привязка программы к компьютеру
От: byterus Россия  
Дата: 02.11.11 08:11
Оценка:
Здравствуйте, _AND, Вы писали:

_AN>Что-то мне кажется что будут проблемы у 32-битного приложения на x64.


Нет проблем.
MySQL stored procedure debugging
Re[7]: Привязка программы к компьютеру
От: Nonmanual Worker  
Дата: 02.11.11 08:26
Оценка:
Здравствуйте, icezone, Вы писали:

I>Ваш аттач с ключевым файлом могут антивирусники порезать.

Почему мой? К тому же не припомню случая чтобы какие-нибудь вложения резались, если конечно это не exe или по 10 мегов.
З.Ы. Я не вижу приемуществ файлов перед короткими ключами. Много лет назад мы использовали файлы, но на то были причины, которые уже давно устранены.
Re[2]: Привязка программы к компьютеру
От: okman Беларусь https://searchinform.ru/
Дата: 02.11.11 09:55
Оценка:
Здравствуйте, byterus, Вы писали:

B>Я привязываюсь к виндовому идентификатору, у каждой инсталляции он свой.


B>
B>function GetMachineID: string;
B>var
B>  Reg: TRegistry;                    
B>begin
B>  Result := 'UNKNOWN_' + IntToStr(Random(100000));
B>  try
B>    Reg := TRegistry.Create(KEY_READ OR $0100);
B>    try
B>      Reg.RootKey := HKEY_LOCAL_MACHINE;
B>      if Reg.KeyExists('SOFTWARE\Microsoft\Cryptography') and Reg.OpenKey('SOFTWARE\Microsoft\Cryptography', False) and Reg.ValueExists('MachineGuid') then
B>        Result := AnsiUpperCase(Reg.ReadString('MachineGuid'));
B>    finally
B>      Reg.Free;
B>    end;
B>  except
B>  end;
B>end;
B>


На моем компе в соответствующем ключе под Wow6432Node запись MachineGuid отсутствует.
Re[3]: Привязка программы к компьютеру
От: byterus Россия  
Дата: 02.11.11 10:32
Оценка:
Здравствуйте, okman, Вы писали:

O>На моем компе в соответствующем ключе под Wow6432Node запись MachineGuid отсутствует.


Вы код запускали? У меня куча пользователей на 64 бит системах.
MySQL stored procedure debugging
Re[4]: Привязка программы к компьютеру
От: _AND Российская Империя За Русский мир! За Русь святую!
Дата: 02.11.11 10:49
Оценка:
Здравствуйте, byterus, Вы писали:

B>Здравствуйте, okman, Вы писали:


O>>На моем компе в соответствующем ключе под Wow6432Node запись MachineGuid отсутствует.


B>Вы код запускали? У меня куча пользователей на 64 бит системах.


А вы сами подебажте и посмотрите.
На 7ке 64битной, при условии что приложение 32х битное, записи MachineGuid не увидите.
Может быть у вас при невозможности чтения какое-нибудь дефолтное значение используется?
Re[5]: Привязка программы к компьютеру
От: byterus Россия  
Дата: 02.11.11 10:53
Оценка:
Здравствуйте, _AND, Вы писали:

_AN>А вы сами подебажте и посмотрите.

_AN>На 7ке 64битной, при условии что приложение 32х битное, записи MachineGuid не увидите.
_AN>Может быть у вас при невозможности чтения какое-нибудь дефолтное значение используется?

Ребята, кончайте пугать блин! Все работает, и у пользователей и на виртуалке. По умолчанию используется UNKNOWN_(рандом набор цифр), если бы не работало то пользователям пришлось бы активацию делать каждый раз при запуске.
MySQL stored procedure debugging
Re[4]: Привязка программы к компьютеру
От: okman Беларусь https://searchinform.ru/
Дата: 02.11.11 10:57
Оценка:
Здравствуйте, byterus, Вы писали:

B>Здравствуйте, okman, Вы писали:


O>>На моем компе в соответствующем ключе под Wow6432Node запись MachineGuid отсутствует.


B>Вы код запускали? У меня куча пользователей на 64 бит системах.


#include <iostream>
#include <Windows.h>



int main()
{
    using namespace std;

    HKEY hKey;

    if (ERROR_SUCCESS != RegOpenKeyExW(HKEY_LOCAL_MACHINE,
        L"SOFTWARE\\Microsoft\\Cryptography",
        0,
        KEY_READ,
        &hKey))
    {
        cout << "RegOpenKeyExW failed." << endl;
        return EXIT_FAILURE;
    }

    wchar_t Buffer[50];
    DWORD cbBuffer = 50 * sizeof (wchar_t);

    if (ERROR_SUCCESS != RegQueryValueExW(hKey,
        L"MachineGuid",
        NULL,
        NULL,
        (BYTE *)&Buffer[0],
        &cbBuffer))
    {
        RegCloseKey(hKey);
        cout << "RegQueryValueExW failed." << endl;
        return EXIT_FAILURE;
    }

    RegCloseKey(hKey);
    wcout << L"Succeeded (" << &Buffer[0] << L")" << endl;
    return EXIT_SUCCESS;
}

Компилируем в двух конфигурациях — Win32 и x64.
Запускаем на 64-битной Windows Vista или Windows 7.

64-bit exe:

>Succeeded (78d40214-f8fc-4769-b03c-1a2eea2d6fbb)


32-bit exe:

>RegQueryValueExW failed.

Re[6]: Привязка программы к компьютеру
От: okman Беларусь https://searchinform.ru/
Дата: 02.11.11 21:48
Оценка:
Здравствуйте, Disker, Вы писали:

D>Странно, сейчас откомпилировал Delphi-вариант (разумеется, результат 32-битный), он работает корректно в Windows 7 SP1 64-bit, и с привилегиями, и без них.


Вот она — обратная сторона велосипедостроения в области защиты.
На одной машине работает, на другой — нет.
Re[7]: Привязка программы к компьютеру
От: byterus Россия  
Дата: 03.11.11 05:46
Оценка:
Здравствуйте, okman, Вы писали:

O>Вот она — обратная сторона велосипедостроения в области защиты.

O>На одной машине работает, на другой — нет.

Обратите внимание на это:
Reg := TRegistry.Create(KEY_READ OR $0100);
MySQL stored procedure debugging
Re: Привязка программы к компьютеру
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 03.11.11 05:56
Оценка:
Здравствуйте, LupakovO, Вы писали:

LO>Здравствуйте.


LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?

LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.

Я вот так сделал, через WMI. Сначала дергаю серийник мамки, если не получилось (на моем компе и не получилось, выдает " " строку), то серийник процессора. А потом по этому считаю crc32.
Сейчас проверил — у нескольких пользователей действительно ключ одинаковый — надо наверно еще способ добавить.

Потом по номеру лицензии, hwid и прочей инфе генерю ключевой файл в xml, и отсылаю пользователю. Он его просто драг-энд-дропает в окошко ввода лицензии и все. Ну и в письме дублирую даннные, для ручного ввода.

inline
RCODE getHardwareId( ::std::string &serial )
   {
    ::std::string tmp;
    RCODE res = getWmiValueHelper( tmp, "Win32_BaseBoard", L"SerialNumber" );
    if (res) return res;
    ::marty::util::trim( tmp , ::marty::util::CIsSpace<char>() );
    if (!tmp.empty())
       {
        serial = crc32ToString( ::crctools::crc32( tmp ) );
        return EC_OK;
       }

    res = getWmiValueHelper( tmp, "Win32_Processor", L"ProcessorId" );
    if (res) return res;
    ::marty::util::trim( tmp , ::marty::util::CIsSpace<char>() );
    if (!tmp.empty())
       {
        serial = crc32ToString( ::crctools::crc32( tmp ) );
        return EC_OK;
       }

    serial = crc32ToString( ::crctools::crc32( ::std::string("1234567890") ) );
    return EC_OK;
    //EC_UNKNOWN
   }

inline
RCODE getWmiValueHelper( ::std::string &serial, const ::std::string &category, const ::std::wstring &valueName )
   {

    // Step 1: --------------------------------------------------
    // Initialize COM. ------------------------------------------

    //HRESULT hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 
    HRESULT hres =  CoInitialize(0);
    if (FAILED(hres))
       {
        return HR2RC(hres);
       }

    // Step 2: --------------------------------------------------
    // Set general COM security levels --------------------------
    // Note: If you are using Windows 2000, you need to specify -
    // the default authentication credentials for a user by using
    // a SOLE_AUTHENTICATION_LIST structure in the pAuthList ----
    // parameter of CoInitializeSecurity ------------------------

    hres =  CoInitializeSecurity(
        NULL, 
        -1,                          // COM authentication
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
        RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
        NULL,                        // Authentication info
        0, // EOAC_NONE,                   // Additional capabilities 
        NULL                         // Reserved
        );

    if (FAILED(hres) && hres!=RPC_E_TOO_LATE)
       {
        CoUninitialize();
        return HR2RC(hres);
       }

    // Step 3: ---------------------------------------------------
    // Obtain the initial locator to WMI -------------------------

    IWbemLocator *pLoc = NULL;

    hres = CoCreateInstance(
        CLSID_WbemLocator,             
        0, 
        CLSCTX_INPROC_SERVER, 
        IID_IWbemLocator, (LPVOID *) &pLoc);

    if (FAILED(hres))
       {
        CoUninitialize();
        return HR2RC(hres);
       }

    // Step 4: -----------------------------------------------------
    // Connect to WMI through the IWbemLocator::ConnectServer method

    IWbemServices *pSvc = NULL;
    
    // Connect to the root\cimv2 namespace with
    // the current user and obtain pointer pSvc
    // to make IWbemServices calls.
    hres = pLoc->ConnectServer(
         _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
         NULL,                    // User name. NULL = current user
         NULL,                    // User password. NULL = current
         0,                       // Locale. NULL indicates current
         NULL,                    // Security flags.
         0,                       // Authority (e.g. Kerberos)
         0,                       // Context object 
         &pSvc                    // pointer to IWbemServices proxy
         );

    if (FAILED(hres))
       {
        pLoc->Release();
        CoUninitialize();
        return HR2RC(hres);
       }

    // Step 5: --------------------------------------------------
    // Set security levels on the proxy -------------------------

    hres = CoSetProxyBlanket(
       pSvc,                        // Indicates the proxy to set
       RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
       RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
       NULL,                        // Server principal name 
       RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx 
       RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
       NULL,                        // client identity
       0 // EOAC_NONE                    // proxy capabilities 
    );

    if (FAILED(hres))
       {
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return HR2RC(hres);
       }

    // Step 6: --------------------------------------------------
    // Use the IWbemServices pointer to make requests of WMI ----

    // For example, get the name of the operating system
    IEnumWbemClassObject* pEnumerator = NULL;

    ::std::string selectQuery = ::std::string("SELECT * FROM ") + category;
    hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
        bstr_t(selectQuery.c_str()), // Win32_Processor, Win32_BaseBoard
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);

    if (FAILED(hres))
       {
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return HR2RC(hres);
       }

    // Step 7: -------------------------------------------------
    // Get the data from the query in step 6 -------------------
 
    IWbemClassObject *pclsObj;
    ULONG uReturn = 0;
   
    while (pEnumerator)
    {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, 
            &pclsObj, &uReturn);

        if(0 == uReturn)
        {
            break;
        }

        VARIANT vtProp;

        // Get the value of the SerialNumber property
        //hr = pclsObj->Get(L"ProcessorId", 0, &vtProp, 0, 0); // ProcessorId, SerialNumber
        hr = pclsObj->Get(valueName.c_str(), 0, &vtProp, 0, 0); // ProcessorId, SerialNumber
        
        //wcout << " OS Name : " << vtProp.bstrVal << endl;
        ::std::wstring serialW = vtProp.bstrVal;
        serial = MARTY_UTF::toUtf8(serialW);

        VariantClear(&vtProp);

        pclsObj->Release();
        pclsObj = 0;
    }

    // Cleanup
    // ========
    
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    if (pclsObj) pclsObj->Release();
    CoUninitialize();

    return EC_OK;

    // marty::winapi
    //getWinVer() // 0x0400;
    //isWinNt()
   }
Маньяк Робокряк колесит по городу
Re[4]: Привязка программы к компьютеру
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 03.11.11 06:07
Оценка:
Здравствуйте, CRT, Вы писали:

CRT>тогда возникает еще один вопрос. А если он через неделю еще раз попросит, а потом через неделю еще раз, потом еще раз. Что будешь делать?


Я над этой ситуацией размышлял, и пришел к выводу, что можно разрешить несколько регистраций (2-3) по одной покупке для разных HWID. Может он на дестоп и на ноут поставить хочет, или приятелю дать — пусть, я не жадный. Но файл активации все равно будет ему на емайл отсылаться, заданный при покупке — т.е. просто так раздавать ключик он не сможет, ему придется в этом участвовать каждый раз. Думаю, его задолбает быстро. Думаю также сделать страничку отмены регистрации с пересылкой подтверждения на его мыло — пусть сам отменяет регистрацию при смене железа. В принципе, отмену регистрации можно лимитировать, но это думаю не слишком актуально.
Маньяк Робокряк колесит по городу
Re[8]: Привязка программы к компьютеру
От: okman Беларусь https://searchinform.ru/
Дата: 03.11.11 09:10
Оценка:
Здравствуйте, byterus, Вы писали:

B>Обратите внимание на это:

B>Reg := TRegistry.Create(KEY_READ OR $0100);

Верно, был невнимателен.
Но MachineGuid все равно меняется после переустановки Windows, так что
привязкой к компьютеру это назвать нельзя.
Re[9]: Привязка программы к компьютеру
От: byterus Россия  
Дата: 03.11.11 09:21
Оценка:
Здравствуйте, okman, Вы писали:

O>Но MachineGuid все равно меняется после переустановки Windows, так что

O>привязкой к компьютеру это назвать нельзя.

Да, меняется, но мне кажется что для пользователя это более естественно чем изменение ID от воткнутой флешки.
А если процедура смены ID происходит без участия службы поддержки так это вообще не проблема.
MySQL stored procedure debugging
Re[3]: Привязка программы к компьютеру
От: Matrix_Failure http://matrixfailure.wordpress.com/
Дата: 03.11.11 10:59
Оценка:
Здравствуйте, okman, Вы писали:

O>У меня полно разнообразного софта, но ни один не привязывается к железу и не лезет ни на какие

O>серверы для всяких там своих проверок. И если бы каждая вторая прога при этом требовала перерегистрации, так ну в баню
O>такой софт — лучше найти альтернативные программы и не мучиться.

У меня вроде бы три программы привязаны к железу:
1. Windows
2. Delphi
3. Отечественный протектор

Больше всего волнуюсь за протектор — если перестанет работать сервер активации — не смогу его переустановить в случае переустановки винды.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.