Как доставить Java-программу клиенту? - PullRequest
5 голосов
/ 14 октября 2009

Я написал программное приложение на Java. Теперь я хочу доставить его своим клиентам. Но перед этим я хочу сделать что-то на этом программном обеспечении, которые упомянуты ниже. Вы можете ответить на любой или все следующие вопросы:

Я хочу:

  1. Зашифруйте все файлы .class, чтобы никто не смог их декомпилировать. Как я могу зашифровать это?
  2. После шифрования я хочу запутать этот код, чтобы повысить безопасность. Как я могу это сделать?
  3. Добавьте некоторую функциональность «серийный ключ», чтобы программное обеспечение работало только после регистрации его с помощью предоставленного мной ключа. Это очень важно для предотвращения многопользовательского использования моего программного обеспечения. Как я могу добавить эту ключевую функциональность и как я могу генерировать ключи. И как я могу ограничить это программное обеспечение для работы только на одном компьютере.
  4. Файл jar можно разархивировать и увидеть файл .class. Есть ли способ обернуть файл jar во что-нибудь, чтобы никто не смог распаковать этот файл.
  5. Я не хочу просить клиента сначала установить java для запуска моего приложения. Таким образом, есть ли способ, с помощью которого, если кто-нибудь установит мое программное обеспечение, java автоматически устанавливается на его / ее компьютер, не сообщая ему, что java устанавливается на его компьютер. Если это возможно, то разрешено ли использовать программное обеспечение Java таким образом.
  6. Измените значок файла JAR навсегда.
  7. Реализация кода, который проверяет мой сайт на наличие доступных обновлений.

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

Ответы [ 7 ]

9 голосов
/ 14 октября 2009

В произвольном порядке:

2 - Есть продукты, которые выполняют обфускацию. Обычно они переименовывают классы / переменные / методы в одно буквенные имена. Это затрудняет определение ошибок, о которых сообщают пользователи. Следы стека, показывающие, что исключение происходит в a.b.c, не особенно полезны.

1,3,4 - Вы не можете полностью избежать этого риска, если вы распространяете Java. Ваш код должен быть распакован и загружен в какой-то момент. Если кто-то заменит rt.jar в jvm, он может заменить загрузчик классов верхнего уровня и выгрузить ваши классы таким образом. Запутывание делает это менее полезным для них, но смотрите вышеупомянутое предостережение.

5 - Распространение "частного jre". По сути, у вас есть jre в папке с вашей программой. Ваш скрипт запуска запускает его. Увеличивает размер вашего дистрибутива.

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

7 - Использовать Java Web Start? В противном случае просто поместите файл на свой сервер с последней версией, загрузите файл и сравните с установленной версией.

Для 1,2,4 и 5 вы также можете посмотреть компиляцию в нативный код, используя gcj или аналогичный. Остерегайтесь проблем совместимости, если вы делаете это, хотя.

7 голосов
/ 14 октября 2009

Зашифруйте все файлы .class, чтобы никто не смог их декомпилировать. Как может Я шифрую это?

Ты не можешь. Если никто не может декомпилировать его, как вы ожидаете, что целевая JVM будет?

После шифрования я хочу запутать этот код, чтобы добавить дополнительные безопасность. Как я могу это сделать?

Я хочу добавить "серийный ключ" функциональность, так что программное обеспечение работает только после регистрации в ключ, предоставленный мной. Это очень важно, чтобы предотвратить многопользовательский использование моего программного обеспечения. Как я могу добавить что ключевая функциональность и как я могу генерировать ключи. И как я могу ограничить это программное обеспечение для работы только на одном компьютер.

Есть несколько способов сделать это, но самый простой - с помощью криптографии с открытым ключом:

  • Ваше программное обеспечение генерирует случайный идентификатор запроса или идентификатор запроса на основе атрибутов машины, и ваш пользователь отправляет его вам.
  • Вы подписываете идентификатор запроса своим закрытым ключом и отправляете его обратно пользователю.
  • Пользователь предоставляет идентификатор подписанного запроса программному обеспечению, которое подтверждает, что оно было подписано вами.

Файл jar можно разархивировать и увидеть файл .class. Есть любой способ, чтобы обернуть файл JAR в что-то, чтобы никто не мог распаковать этот файл.

нет

Нет

Я не хочу указывать клиенту сначала установить Java для запуска моего приложение. Так есть ли способ который, если кто-нибудь установит мое программное обеспечение, Java автоматически устанавливается на своем компьютере без уведомления ему, что Java загружается в его компьютер. Если это возможно, то Законно ли использовать программное обеспечение Java в вот так.

Попробуйте создать установщик NSIS для вашего приложения, которое обнаруживает / устанавливает Java и вашу программу.

4 голосов
/ 14 октября 2009

Постройте лучшие доверительные отношения со своими клиентами.

Затем вы можете потратить дополнительное время (не выполняя задачи 1-5), чтобы внести улучшения, исправить ошибки и т. Д., Что, в свою очередь, улучшает отношения с вашими клиентами.

3 голосов
/ 14 октября 2009

Вы можете скомпилировать его с помощью GCJ , который скомпилирует ваше приложение в обычный исполняемый файл Windows / Linux (.exe). Затем вы можете создать установку, используя программу типа InstallShield .

1 голос
/ 14 октября 2009

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

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


Что касается 6 : вы можете использовать JSmooth или аналогичный инструмент для создания оболочки exe для вашего приложения. Это позволит вам изменить значок, и у ваших клиентов будет exe-файл, который они могут дважды щелкнуть без необходимости связываться с файловыми ассоциациями для jar-файлов.
Заметьте, однако, что сгенерированный exe не будет содержать Java или ваши файлы jar. Однако, если Java недоступна, будет напечатано приятное сообщение об ошибке.

0 голосов
/ 19 октября 2009

Кто ваш клиент? Piratebay.org? Серьезно, каждая крупная компания в США платит за программное обеспечение. Риск того, что клиент выйдет и вызовет их, слишком высок. Вам нужна достаточная защита, чтобы программисту было проще совершать покупки для оплаты продукта, чем обходить защиту от копирования.

0 голосов
/ 14 октября 2009

Просто добавьте другие ответы здесь:

1 и 4 : Вы могли бы сделать это, если бы вы изменили JVM и предварительно запаковали его с вашей установкой, но это противоречит лицензионному соглашению Java распространять модифицированную JVM, не платя Sun, как миллиард долларов .

...