@proger6789

Как можно защитить проект на Java от простого копирования?

Доброго времени суток!

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

До этого никогда не сталкивался с ситуацией когда сам пытаюсь продать свои результаты труда и как-то защитить их от свободного распространения.
Подскажите, пожалуйста, какие есть методики защиты подобного программного обеспечения?
Была мысль арендовать себе vps и добавить в серверное ПО обязательный периодический коннект на данный vps с целью подтвердить возможность законного использования данной копии ПО и в случае если доступа к серверу нет некоторое время, то блокировать работу ПО.

И есть ли возможность скомпилировать jar-файл как-то так чтобы его нельзя было декомпилировать?
  • Вопрос задан
  • 1122 просмотра
Решения вопроса 3
@Finies
Обычно подразумевается, что если вы делаете заказную разработку, и заказчик её оплачивает, то вы передаёте ему исключительные права на получившийся программный код, соответственно он вправе копировать и передавать его кому угодно и как угодно. В этом ключе собственно и стоит действовать, тогда и защищать не придётся.

Но если всё же необходимость защитить есть, то к вам в копилку могу подкинуть ещё 1 вариант:
- генерите аппаратный ID машины (не уверен, что можно напрямую из Java, но наверняка есть варианты, например, на C++ с возможность прокинуть их в Java)

а дальше уже варианты:
1) Можно просто каждый раз проверять ID машины и запускать если он тот же, в противном случае блокировать запуск
2) Можно предложить пользователю передать вам ID машины, для того, чтобы вы сообщили ему ключ активации (ключ может быть получен каким-либо преобразованием ID-машины).

Но помните, что в любом случае абсолютной защиты не бывает, вопрос по большому счёту только во времени и желании эту защиту взломать.
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Прежде всего надо понимать, что абсолютной защиты не существует. Чем выше разница между ценой программы и затратами на взлом, тем быстрее её сломают. Соответственно, вы можете только затруднить процесс взлома, увеличивая этим затраты на него и снижая интерес взломщика. Но это обоюдоострое лезвие, разработка защиты процесс тоже дорогостоящий.

Затруднить декомпиляцию программы можно воспользовавшись AOT-компилятором, но это снизит переносимость программы и в некоторых сценариях использования может снизить её производительность.

Просто коннектится на какой-то адрес мало. Админа школьного класса хватит, чтобы обнаружить подключения и завернуть трафик на поддельный сервер. Надо чтобы сервер отвечал асимметрично зашифрованным сообщением, которое клиент будет расшифровывать публичным ключом. Публичный ключ, естественно, надо хранить не в ресурсах, а в момент запуска каким-либо образом собирать в GuardedString. Полезно так же зашить в код уникальный идентификатор сборки и передавать его при запросе на сервер лицензирования.
Ответ написан
Комментировать
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Признаюсь, этот вопрос интересует меня так же.
Если бы мне пришлось реализовывать подобное, то я:
- решил бы вопрос юридически
- провел бы обфускацию кода ( https://www.guardsquare.com/en/products/proguard )
- для использования софта использовал бы активацию на собственном сервере
- при активации софта учитывал бы определенные системные параметры (id железа и т.д.) и сохранил бы на своем сервере при активации софта.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Вопрос обычно в юридической плоскости, не думаю, что кто-то в здравом уме будет выдавать чужой продукт за собственный и продавать его. Ведь всегда есть лицензия или договор на продажу, или что-то типа этого...
В технической : обфусцировать код и добавить ключ активации.
Сильно защищать смысла нет.
Ибо, всегда можно показать в споре исходники. Всегда нужна поддержка, а без разработчика её очень трудно сделать.
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
@proger6789 Автор вопроса
Всем спасибо большое за ценные советы и рекомендации!
С юридическими моментами пока не готов сталкиваться, потому буду пытаться реализовать технически.
Увлекшись мыслями о том как защитить, даже и не подумал что в принципе то украсть это одно дело, но без технической поддержки может быть довольно неудобно далее пользоваться этим всем если что-то вдруг пойдет не так.
Решил более пристально посмотреть в сторону привязки к ID машины (либо интерфейса) в комбинации с периодическим шифрованным обменом с сервером верификации.
Также натолкнули на мысль что можно делать уникальные сборки под каждого потребителя с уникальными идентификаторами-подписями.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы