Тут было много тем как про кроссплатформенную шаровару, так и про защиту. Сейчас работаю над кроссплатформенной программой (.NET), надо будет прикручивать активацию. И если для Windows с hardware id все более-менее ясно, то с MacOS и Linux не очень понятно, как его получать.
Здравствуйте, Unhandled_Exception, Вы писали:
U_E>Всем привет,
U_E>Тут было много тем как про кроссплатформенную шаровару, так и про защиту. Сейчас работаю над кроссплатформенной программой (.NET), надо будет прикручивать активацию. И если для Windows с hardware id все более-менее ясно, то с MacOS и Linux не очень понятно, как его получать.
Не скажу за винду (я пользуюсь купленной защитой) и за линух (не использую)
А в мак оси — официальная рекомендация использовать MAK адрес. Вот ссылка на их инструкцию как Validate App Store Receipt
Compute the SHA-1 hash to match the local device with the device hash inside the App Store reciept. When computing the SHA-1 hash, use the platform-specific data source. The source of bytes for each platform is:
watchOS: Use the raw bytes from the uuid property of the UUID that identifierForVendor provides.
iOS, iPadOS, tvOS, and iOS apps running on a Mac with Apple silicon: Use the raw bytes from the uuid property of the UUID that identifierForVendor provides.
macOS and apps built with Mac Catalyst: Use the data that returns from copy_mac_address from the example code below.
Здравствуйте, Unhandled_Exception, Вы писали:
UE> Кто как делает?
На маке — получить серийный номер устройства, на линуксе собрать маки сетевых адаптеров, отсеяв юэсбишные, при необходимости (для линукса еще можно смотреть на machine-id, но он меняется одной командой). Повышенных привилегий это не требует. Есть еще самый крутой, кмк, идешник — хеш открытого ключа TPM-модуля, но из-под юзера до него не добраться Ну и, конечно, правило хорошего тона — идешниками напрямую не светить, только после хеша!
Здравствуйте, Unhandled_Exception, Вы писали:
UE> R>На куче материнок эти поля пустые или содержат что-то вроде: To Be Filled By O.E.M.
UE> Все эти поля могут такими оказаться?
Данные о биосе обычно есть, остальные могут быть пустыми или заглушкой. Кстати, поля с наиболее интересным содержимым (серийники материнки, шасси, например) из-под юзера недоступны.
Есть огромный опыт по этой теме, но только на Windows (десятки миллинов записей в БД, более 10 лет собирали), определяли по mac адресу и hdd.
Проблемы следующие:
1) mac адреса — есть одинаковые, постоянно вручную довносим такие адреса, что бы их исключать из опеределения.
2) hdd — так же бывают одинаковые (особенно виртуальные диски), так же довносим список hdd которые нужно исключать.
— ещё серийник по разному определяется в зависимости от версии Windows и прав (админ или обычный пользователь).
— ещё после обновления драйверов диска или перепрошики диска может по другому выдавать серийник.
— проблемы с определением серийника NVMe дисков. Пока не нашёл способа его определить без прав админа. Windows ерунду выдаёт заместо серийника.
Так же есть следующая проблема:
Если есть несколько дисков, то выбираем тот на котором стоит система. Но если есть несколько mac адресов, то не понятно какой из них выбрать.
1) например у пользователя 2 mac адреса, мы оба запоминаем, но допустим он перенёс сетевую карту или один диск во второй комп, и второй комп так же теперь идентифицируется как и первый (т.е. имееют одинаковый id).
2) если запоминать не все, а скажем брать первый (или самый меньший) mac адрес, то получается ерунда, так как пользователь может вытащить или воткнуть USB wi-fi адаптер или PCI сетевую карту и будет казаться, что это разные компы.
P.S. Сам готов заплатить за такое решение для Windows & Linux (должно работать без прав админа), если оно будет работать лучше чем моё.
Здравствуйте, maks1180, Вы писали:
M>P.S. Сам готов заплатить за такое решение для Windows & Linux (должно работать без прав админа), если оно будет работать лучше чем моё.
Здравствуйте, drVanо, Вы писали:
V> M>P.S. Сам готов заплатить за такое решение для Windows & Linux (должно работать без прав админа), если оно будет работать лучше чем моё.
V> VMProtectGetCurrentHWID
Текст на странице нужно сделать еще более бледным, а то его пока еще можно прочитать.
Здравствуйте, Unhandled_Exception, Вы писали:
U_E>Тут было много тем как про кроссплатформенную шаровару, так и про защиту. Сейчас работаю над кроссплатформенной программой (.NET), надо будет прикручивать активацию. И если для Windows с hardware id все более-менее ясно, то с MacOS и Linux не очень понятно, как его получать.
В общем случае -- никак. Если я постоянно апгрейдил компьютер и заменил, последовательно, матьплату, процессор,
жёсткие диски, ОЗУ, блок питания, сетевуху заменил на Wifi. И осталься только корпус. Компьютер "тот же самый".
И монитор тоже новый купил.
U_E>Кто как делает?
Аппаратный USB-ключ с уникальным серийником?
Re[2]: Hardware id для кроссплатформенной программы
Здравствуйте, fk0, Вы писали:
fk0> Если я постоянно апгрейдил компьютер и заменил, последовательно, матьплату, процессор, fk0> жёсткие диски, ОЗУ, блок питания, сетевуху заменил на Wifi. И осталься только корпус. Компьютер "тот же самый". fk0> И монитор тоже новый купил.
Просто нужно по-другому подходить к идентификации клиента. Идентификатор железа не должен быть идентификатором клиента. Идентификатором клиента должна служить запись в файле лицензии, который, помимо прочего, должен содержать идентификатор/идентификаторы железок. Изменились идентификаторы железок — требуется активация. В ситуации, когда файл лицензии хранит несколько идентификаторов железок можно даже предусмотреть вариант тихой переактивации, когда при смене одного идентификатора и неизменности других файл лицензии автоматически обновляется. Таким образом, постепенный апгрейд не приведет к ручной переактивации.