Идея, с которой я играю, заключается в использовании нескольких серийных номеров или уникальных идентификаторов, связанных с оборудованием, и их объединении.
Вещи, которые будут улучшены:
-Объем памяти
-MAC (можно подделать, подключить USB-адаптеры и т. Д.)
Вещи, которые не обновляются часто:
-ЦПУ
-BIOS
-Motherboard
Использование WMIC может быть отличным способом получения некоторой информации, я бы начал с того, что в качестве первого и предпочтительного варианта выбрал бы вещи, которые не часто меняются, я хотел бы иметь возможность снять отпечатки пальцев как минимум с 2 серийных номеров или устройств, чтобы использовать для генерации регистрационного ключа.
wmic cpu get DeviceId /format:value
Это захватит идентификатор процессора, вы можете запустить эту команду для:
1 - ЦП (процессор: DeviceID)
2 - Материнская плата (базовая плата: серийный номер)
3 - BIOS (биос: серийный номер)
если вы не получите хотя бы 2 заполненных значения, тогда возьмите
4 - Сетевой адаптер - (ник: MACAddress)
5 - RAM - (мемфизический: серийный номер)
В зависимости от вашей бизнес-логики вы можете использовать первые два доступных серийных номера для создания своего регистрационного номера, и если вы всегда будете следовать одному и тому же порядку, то при повторной установке регистрационный номер все равно будет работать, однако, если устройство изменится или пользователь пытается установить на дополнительный компьютер изменение идентификатора, аннулирующее регистрационный номер. Чтобы уменьшить количество обращений в службу технической поддержки, наименьшее количество аппаратного обеспечения, которое вы снимаете с отпечатка пальца, даст наименьшее количество головных болей, а если вы попытаетесь выявить наименее вероятные элементы, которые необходимо обновить, это еще больше уменьшит головные боли. Я предпочитаю порядок выше.
Вы можете использовать схему обмена ключами Диффи-Хеллмана, чтобы пользователь генерировал пару секретных / импульсных ключей с идентификаторами своего оборудования в качестве полезной нагрузки, а затем передавал эту информацию на сервер регистрации, где сервер регистрации использовал бы открытый / закрытый ключ для расшифровки полезной нагрузки и вычисления регистрационного ключа для возврата конечному пользователю. Мне нравится использовать JWT, чтобы передавать вещи назад и вперед с помощью открытых ключей, включенных в полезную нагрузку JWT. Надеюсь, это поможет.
UUID был упомянут выше, и это отличная идея, которую вы можете получить, используя следующую команду из вашего windows cmd.exe:
wmic csproduct get UUID /format:value
Отказ от ответственности. Эти команды работают только для Windows, я думаю, 2000 и выше, но вам нужно проверить, возможно, они доступны для систем ниже 2000, но в этот момент я действительно стараюсь не поддерживать эти устройства. Удачи.
на Mac:
system_profiler | grep "Serial Number (system)"
В Linux (debian):
sudo dmidecode -t system | grep "Serial Number"
У dmidecode и system_profiler есть другие компоненты, с помощью которых они могут получать серийные номера, похожие на wmic в Windows. Я не работаю с macs, поэтому не могу подтвердить список точных спецификаций, но создание списка LCD (наименее общего знаменателя) серийных номеров для деталей, к которым имеют доступ все три команды, составлено и подготовлено к наименее вероятным части, которые будут модернизированы или изменены. Тогда комбинация из первых 2-3 хэшированных чисел может сделать уникальный идентификатор машины, который немного более надежным и позволяет кросс-платформенное приложение активироваться даже на устройстве с обновленной операционной системой.