Защита приложения на .Net от запуска на неавторизованной машине

Разрабатываю приложение для работы с зашифрованными данными для использования в приватном сообществе. Большая часть приложения уже готова. Написана на .Net c использованием паттерна MVVM ибо красиво и удобно. Передо мной стоит 2 задачи:

  1. Защитить используемые в приложении алгоритмы от любопытных глаз. Тут не до абсурда конечно. Просто сделать это крайне не удобным и не доступным для человека с dnSpy, ilSpy и т.д.
  2. Постараться минимизировать риск связанный с возможной утечкой приложения в паблик. То есть есть 100 машин на которых это приложение должно работать в офлайне. и если кто-то выкинет это приложение в паблик, то запуск на неавторизованной машине должен также быть не доступен человеку с dnSpy.Такое вот псевдолицензирование.

Мне бы хотелось использовать следующий подход. в моём понимании это должно помочь решить оба вопроса. Но у меня нет опыта разработки лицензионных приложений, от слова совсем.

  1. Оставляем приложение на .Net с MVVM. переносим все "чувствительные" к любопытным глазам алгоритмы на с++. То есть делаем либу на с++ с нужными функциями, передаём туда данные из .Net, внутри либы по приватным алгосам это всё считается и возвращает нам нужные данные. Благо все приватные алгоритмы работают с простыми данными типа int и byte.Так что думаю что здесь проблем не должно быть( ну кроме разных библиотек для 32 и 64 бита).
  2. В приложение .Net добавляем метод который вытаскивает HardwareId(тут вопрос 1-й). Далее этот hwid передается администратору этого приложения у которого есть генератор лицензий к примеру. На основе hwid генерируется файл или код который передаётся пользователю. Пользователь добавляет файл лицензии или вводит данные в приложение и данные сохраняются в реестре. Далее при вызове библиотеки с++ с нашими алгоритмами в функции передается hwid и ключ из реестра. внутри библиотеки с++ происходит проверка на валидность. если проверка прошла, то в .Net приложение возвращаются корректные данные, если проверка не проходит, то возвращается 0 или что-то дефолтное.

Теперь вопросы:

  1. Как лучше генерировать hwid на машине. или может использовать какой-то другой метод привязки к компьютеру? Тут в нескольких топиках читал гневные комментарии к привязке к машине по hwid, а-ля горите в аду такие разрабы))))
  2. Существуют ли какие-то стандартные для .Net способы лицензирования приложений?
  3. Есть ли какие-нибудь источники где можно почитать про стандартные способы лицензирования приложений? Где и как делать проверку. Как лучше не делать и тд.
  4. В общих чертах жизнеспособно ли такое решение?(GUI на .net, бизнес логика на с++) Может есть более правильный/простой способ. Как вы считаете?

Ps по поводу обфускаторов для .Net. Так как приложение не планируется продавать, то платные и функциональные версии мне не по карману. А простые варианты с изменением не очень-то и работают. то есть что и как делает алгоритм можно понять с большой долей вероятности.

Pss. Полностью осознаю тот факт что при желании и определённых навыках можно вытащить алгоритмы хоть из ассемблера. Поэтому и хочу сделать только защиту от рефлекторов.


Ответы (0 шт):