Как я могу защитить свой код, используя уникальный аппаратный идентификатор в Ruby? - PullRequest
0 голосов
/ 13 февраля 2019

Я собираюсь продать свое приложение Ruby под Windows и хочу защитить свое программное обеспечение от кражи или копирования.Я не буду публиковать его, поэтому он должен быть связан с машиной.

Мне нужен мой код для получения MAC-адреса любого компьютера при запуске и сравнения его с файлом, хранящимся на моем сервере.Я попытался создать уникальный последовательный код из MAC-адреса, но гем 'macaddr' возвращает ошибку на некоторых компьютерах.Этот код не будет работать на некоторых компьютерах:

require 'macaddr'
mac = Mac.addr
puts mac
# >> NoMethodError: undefined method 'pfamily' for nil:NilClass

Как я могу получить некоторые уникальные системные идентификаторы и создать последовательный код из них?Есть ли другой способ получить уникальный идентификатор оборудования с компьютера в Ruby?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я решил, вызвав эти команды cmd из Ruby:

system('wmic nic get "MACAddress" |more >> mac.txt')
# >> Will print all MAC addresses inside "mac.txt" file

system('wmic csproduct get "UUID"')
# >> Will print an unique UUID

Может быть, есть лучшие способы, но я не эксперт, и это решило мою проблему.
Я на Windows 10Pro 64bit и моя версия Ruby:

C:\>ruby -v
# >> ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
0 голосов
/ 13 февраля 2019

Во-первых, я бы порекомендовал вам НЕ использовать MAC-адреса.Это может быть очень легко подделано.

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

Вместо этого я бы порекомендовал какую-то систему входа в систему, отправил имя пользователя и хэш (пароль) на сервер, вернул UUID.Каждый раз, когда кто-то использует программное обеспечение (или каждый час, в зависимости от того, что больше подходит вашему программному обеспечению), отправляйте ping на сервер с помощью uuid, чтобы убедиться, что пользователь не вошел в систему на другом компьютере.Будьте щедры в том, как вы справляетесь со случаем, когда ваше программное обеспечение не получает ответа, не блокируйте программное обеспечение немедленно - подождите час, может даже день.Если это уместно для вашего программного обеспечения, появится маленькое предупреждение о том, что программное обеспечение будет заблокировано, если оно не обнаружит интернет-соединение в течение X минут.

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

...