Я работаю в компании, продающей защищенное программное обеспечение Java.
Я не буду комментировать схему аутентификации пользователя, но могу прокомментировать онлайн-проверку лицензии.
Не заставляйте его даже «работать в течение двух дней»: именно так я пиратую большую часть программного обеспечения ... Виртуальная машина настроена «вовремя» и внешне защищена, чтобы больше не «звонить домой» (то есть Только 30-дневная пробная версия (или двухдневная пробная версия) стала пожизненной пробной версией: разрешение только один раз связаться с сервером, чтобы получить пробный ключ), всегда обновляется с момента, когда программное обеспечение было установлено заново и после бинго. Почему я это делаю? Конечно, чтобы узнать, как лучше защитить наше приложение;) (хорошо, хорошо, я делаю это просто для удовольствия)
В нашем коммерческом программном обеспечении Java мы проверяем лицензию при каждом запуске.
У нас есть сотни клиентов, и никто никогда не жалел об этом. Ни разу. Мы генерируем уникальный класс при каждом запуске, который отличается при каждом запуске, который зависит как от того, что уникально для этого запуска на стороне клиента, так и от того, что было сгенерировано один раз на стороне сервера.
В дополнение к тому, что приложение связывается с вашим сервером при каждом запуске, это отличный способ сбора аналитики: соотношение загрузки к пробной версии, среднее количество запусков nb на пробную версию и т. Д. И это не так уж и плохо, чем использование JavaScript-трекера Urchin / Google на каждой веб-странице противно.
Просто дайте людям понять, что ваше программное обеспечение выполняет онлайн-проверку лицензии: мы установили огромный флажок, включающий или выключающий следующее: «Проверка онлайн-лицензии: OK / Failed». И это все. Люди знают, что есть чек. Если им не нравится это, они идут использовать продукты конкурента, и жизнь хороша.
Люди привыкли жить в проводном мире.
Как часто вы можете не получать доступ к GMail, потому что ваше интернет-соединение не работает? Как часто вы можете не получать доступ к FaceBook или SO, потому что ваше интернет-соединение не работает?
Суть в том, чтобы сделать как можно больше вычислений в зависимости от серверной стороны:
- проверка лицензии
- сохранить настройки пользователя
- резервное копирование данных, сгенерированных вашим приложением
- и т.д.
Никто не будет жаловаться. У вас будет 0,1% жалоб от вашего пользователя, и в любом случае вы не хотите, чтобы эти пользователи: именно они будут жаловаться на другие вещи и публиковать отрицательные отзывы о вашем приложении в Интернете. Вам лучше, чтобы они вообще не использовали ваше программное обеспечение и жаловались на тот факт, что для этого требуется постоянное подключение к Интернету (что составляет 99,99% от вашей целевой аудитории и, следовательно, они не будут заботиться о жалобе), а не на самом деле, чтобы они использовали его. приложение, и жаловаться на другие вещи, связанные с вашим приложением.
Что касается декомпиляции, то .class обычно можно декомпилировать обратно в .java, если только вы не используете обфускатор потока кода, который генерирует действительный байт-код, но который невозможно сгенерировать из файла .java (следовательно, невозможно вернуть верный файл .java).
Обфускатор строк помогает усложнить понимание.
Обфускатор исходного кода помогает усложнить понимание.
Обфускатор байт-кода, такой как бесплатный Proguard, усложняет (и производит более быстрый код, особенно заметный в мобильном мире), чтобы выяснить.
Если вы поставляете только Windows / Linux, то вы можете использовать конвертер Java-to-native, такой как Excelsior Jet (не бесплатный и довольно дорогой для стартапов, но он производит собственный код, из которого вы просто не можете найти .java файлы обратно).
В качестве забавного примечания вы увидите, как люди пытаются связываться с вашим онлайн-сервером ... Приблизительно у 30 бета-тестеров у нас уже были люди (которые, как мы знаем, участвуем в испытании), пытающиеся поднять наши онлайн-сервера.