Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?
Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.
02.11.11 08:32: Перенесено модератором из 'Delphi & Builder' — больше соответствует теме. H_D. — Hacker_Delphi
LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться? LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда? LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.
Тебе лучше к шароварщикам обратится. Основные места привязки: материнские платы, винты, система. Винты — не всегда можно точно привязаться — информация, доставаемая через GetVolumeInformation() может быть легко изменена. То же самое относится к системе (Windows ID) — переставили систему — все уехало. Доступ к ID материнки — отдельная песня. Я бы не заморачивался и сделал бы шифрованный ключевой файл. Файл есть и его содержимое корректно — работаем, если нет — прошу на регистрацию, работаем в демо режиме.
P.S. Можно использовать и навесную защиту и комбинацию разных защит — все зависит от того, что программа делает.
Здравствуйте, LupakovO, Вы писали:
LO>Здравствуйте.
LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться?
Только HDD (HDDSN) и Монитор (EDID) имеют реально уникальный ID, который производитель обязан "заполнить".
Так же есть ID в:
1) сетевых картах (во встроенных можно в биосе менять значение MAC, поэтому не уникален)
2) планках памяти (не во всех и встречаются дубликаты);
3) материнских платах (не во всех и встречаются дубликаты).
Все эти идентификаторы можно при помощи спец. утилит поменять (кроме HDDSN).
LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда?
Только Pentium III первых ревизий содержал ID (да и то можно было в биосе отключить его определение).
Материнские платы штампуют китайцы и им всё равно (дорогие платы конечно содержат всякие ID и т.п.).
LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.
Жёский диск служит в среднем 5 лет. Да и сам комп живёт не больше (апгрейды и т.п.).
ЗЫ. Все выше упомянутые ID можно проэмулировать (перехватить и изменить) ... умельцев на это хватает.
Здравствуйте, 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 и т.п.
В общем, пуд соли обеспечен, а выгоды туманны.
Здравствуйте, DarkMaster, Вы писали:
DM>Я бы не заморачивался и сделал бы шифрованный ключевой файл. Файл есть и его содержимое корректно — работаем, если нет — прошу на регистрацию, работаем в демо режиме.
Может, я чего-то недопонимаю.
А что помешает недобросовестному юзеру выложить этот ключевой файл на всеобщее пользование?
Здравствуйте, de Niro, Вы писали:
DM>>Я бы не заморачивался и сделал бы шифрованный ключевой файл. Файл есть и его содержимое корректно — работаем, если нет — прошу на регистрацию, работаем в демо режиме. DN>Может, я чего-то недопонимаю. DN>А что помешает недобросовестному юзеру выложить этот ключевой файл на всеобщее пользование?
Мы продаем так софт больше 10 лет. Случаев выкладывания серийника или кейфайла было всего несколько. Софт популярный и известный в определенных кругах.
ИМХО если цена приложения невелика (<500$) и продажи массовые а не адресные, и приложению не нужен всегда интернет, то нет смысла в привязке к машине. Больше потеряете потенциальных покупателей чем выиграете. Однако, это всего лишь мое мнение, буду рад услышать сакскесс-стори про то как перешли на регистрацию с привязкой к железу и продажи выросли хотя бы на 10%.
Здравствуйте, Nonmanual Worker, Вы писали:
DM>>>Я бы не заморачивался и сделал бы шифрованный ключевой файл. Файл есть и его содержимое корректно — работаем, если нет — прошу на регистрацию, работаем в демо режиме. DN>>Может, я чего-то недопонимаю. DN>>А что помешает недобросовестному юзеру выложить этот ключевой файл на всеобщее пользование?
NW>Мы продаем так софт больше 10 лет. Случаев выкладывания серийника или кейфайла было всего несколько. Софт популярный и известный в определенных кругах.
У меня опыт противоположный. Но вопрос был не об этом. Каков смысл этого ключевого файла по сравнению с серийником, тоже не привязанным к железу? Выложить могут и то, и то. Отличие только в размере?
Здравствуйте, de Niro, Вы писали:
DN>У меня опыт противоположный. Но вопрос был не об этом. Каков смысл этого ключевого файла по сравнению с серийником, тоже не привязанным к железу? Выложить могут и то, и то. Отличие только в размере?
Верно, если ключ длинный и его рассылать в письме текстом, то находятся трудные юзеры которые его нормально скопипастить не могут.
Я привязываюсь к виндовому идентификатору, у каждой инсталляции он свой.
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;
Здравствуйте, okman, Вы писали:
O>Здравствуйте, LupakovO, Вы писали:
O>Наиболее реальный вариант — использовать WMI и CPUID.
Это наиболее НЕ реальный вариант.
WMI сервис может быть не запущен, могут настройки COM быть неправильные, может нехватать прав и тд
Здравствуйте, LupakovO, Вы писали:
LO>Здравствуйте.
LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться? LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда? LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.
Надо привязываться к нескольким параметрам и делать так, что-бы изменение одного-двух не влияло на результат.
Использовать параметры ОС для привязки, помимо собственно железа.
Здравствуйте, LupakovO, Вы писали:
LO>Здравствуйте.
LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать?
Лучше взять готовое решение из подписи чем изобретать очередной велосипед.
Здравствуйте, Nonmanual Worker, Вы писали:
NW>Верно, если ключ длинный и его рассылать в письме текстом, то находятся трудные юзеры которые его нормально скопипастить не могут.
Ваш аттач с ключевым файлом могут антивирусники порезать.
Здравствуйте, _AND, Вы писали:
_AN>Это [WMI и CPUID] наиболее НЕ реальный вариант. _AN>WMI сервис может быть не запущен, могут настройки COM быть неправильные, может нехватать прав и тд
Привязка к оборудованию — это вообще сомнительный вариант, об этом я уже писал, на этом
форуме и не только. Тут столько всяких "но" и "если", что самое время задуматься о
разумности и целесообразности этого пути. Про WMI я в курсе, как и про другие методы — сам
занимался такой защитой вплотную. Еще варианты — приобретать апробированные технические
решения и библиотеки у сторонних компаний, но они имеют приличную стоимость, либо
распостраняются по очень неудобным лицензиям.
Здравствуйте, LupakovO, Вы писали:
LO>Здравствуйте.
LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться? LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда? LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.
а как ты будешь поступать когда пользователь поменяет железо и обратится к тебе c просьбой сделать так чтобы его ключ работал на новом железе?
Здравствуйте, CRT, Вы писали:
CRT>Здравствуйте, LupakovO, Вы писали:
LO>>Здравствуйте.
LO>>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться? LO>>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда? LO>>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.
CRT>а как ты будешь поступать когда пользователь поменяет железо и обратится к тебе c просьбой сделать так чтобы его ключ работал на новом железе?
Сбросить его регистрацию и попросить перерегистрировать с тем же ключом?
CRT>>а как ты будешь поступать когда пользователь поменяет железо и обратится к тебе c просьбой сделать так чтобы его ключ работал на новом железе?
_AN>Сбросить его регистрацию и попросить перерегистрировать с тем же ключом?
тогда возникает еще один вопрос. А если он через неделю еще раз попросит, а потом через неделю еще раз, потом еще раз. Что будешь делать?
Здравствуйте, LupakovO, Вы писали:
LO>Здравствуйте.
LO>Написал программу на Delphi. Хочу сделать привязку к конкретному компьютеру, подскажите, как лучше реализовать? К чему привязываться? LO>Я вроде слышал 3 года назад, что теперь процессоры и материнские платы не содержат уникального ID. Это правда? LO>Кто-то советует к жесткому диску, но вроде жесткие диски содержат движущиеся части и ломаются чаще. Поэтому прошу совета у специалистов.
Еще 15 лет назад наши классики шаровары вроде Каталова писали что привязка к железу — плохая идея.
Найдите статьи, почитайте.