Создание коммерческого программного обеспечения Java (DRM)

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

  1. Соединитесь с сервером и обеспечьте лицензирование информации и своего рода аппаратной информации о сводке
  2. Если все прекрасно, сервер возвращается, некоторые решающие недостающие части программы, связанной с тем определенным ПК наряду с пределом использования, говорят 2 дня
  3. Тот решающий материал не сохраняется к жесткому диску, таким образом, он загружается каждый раз, когда программа запускается, если программа выполняет больше чем 2 дня, данные загружаются снова
  4. Если та же информация используется от различных компьютеров, приостановите клиентский счет

Что Вы думаете об этом? Это может казаться немного строгому, но я должен заставить меньше продаж сначала затем в конечном счете видеть мое драгоценное приложение-приманку, загруженное бесплатно. Так или иначе сначала мне нужна некоторая основная теория/учебные руководства/руководства о том, как удостовериться, что пользователь только использует определенное приложение Java, если он заплатил за нее, поэтому предложите некоторых.

Спасибо

17
задан Fluffy 17 October 2010 в 19:40
поделиться

14 ответов

Я работаю в компании, продающей защищенное программное обеспечение Java.

Я не буду комментировать схему аутентификации пользователей, но могу прокомментировать онлайн-проверку лицензии.

Не заставляйте ее даже «работать в течение двух дней»: именно так я пиратую большую часть программного обеспечения ... Виртуальная машина установлена ​​«назад во времени» и имеет внешний брандмауэр, чтобы она больше не «звонила домой» (то есть : позволяя ему связаться с сервером только один раз, чтобы получить пробный ключ), всегда переизображение с момента, когда программное обеспечение было недавно установлено и бинго, 30-дневная пробная версия (или двухдневная пробная версия) превратилась в пожизненную пробную версию. Зачем я это делаю? Чтобы узнать, как лучше защитить наше приложение, конечно;) (хорошо, хорошо, я тоже делаю это просто для удовольствия)

В нашем коммерческом программном обеспечении Java мы проверяем лицензию при каждом запуске.

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

В дополнение к тому, что приложение связывается с вашим сервером при каждом запуске, это отличный способ собрать аналитические данные: соотношение загрузок к пробной версии, среднее количество запусков за пробную версию и т. Д. И это не более неприятно, чем наличие трекера JavaScript Urchin / Google на каждой веб-странице неприятно.

Просто дайте понять людям, что ваше программное обеспечение выполняет онлайн-проверку лицензии: у нас есть огромный флажок, в котором говорится: «Онлайн-проверка лицензии: ОК / Ошибка». Вот и все. Люди знают, что есть чек.Если им это не нравится, они идут на продукцию худших конкурентов, и жизнь идет хорошо.

Люди привыкли жить в проводном мире.

Как часто вы не можете получить доступ к GMail из-за отсутствия подключения к Интернету? Как часто вы можете не получить доступ к FaceBook или SO из-за отсутствия подключения к Интернету?

Суть в следующем: сделайте как можно больше вычислений в зависимости от стороны сервера:

  • проверка лицензии
  • сохранить пользователя настройки
  • резервное копирование данных, созданных вашим приложением
  • и т. д.

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

Что касается декомпиляции, .class обычно можно декомпилировать обратно в .java, если только вы не используете обфускатор потока кода, который создает действительный байт-код, но его невозможно сгенерировать из файла .java (следовательно, невозможно вернуть действительный .java файл).

Обфускатор строк помогает усложнить понимание.

Обфускатор исходного кода помогает усложнить понимание.

Обфускатор байт-кода, такой как бесплатный Proguard, усложняет понимание (и позволяет создавать более быстрый код, что особенно заметно в мире мобильных устройств).

Если вы поставляете только Windows / Linux, вы можете использовать конвертер Java-to-native, такой как Excelsior Jet (платный и довольно дорогой для стартапов, но он создает собственный код, из которого вы просто не можете ] найти файлы .java обратно).

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

16
ответ дан 30 November 2019 в 11:17
поделиться

Это одни из самых жестких DRM, о которых я когда-либо слышал, вашим пользователям это не понравится.

Также имейте в виду, что существует множество хороших декомпиляторов Java из-за природы языка, и кто-то достаточно решительный может просто найти области программы, связанные с вашим DRM, и обойти / отключить его , а затем перекомпилируйте его ( согласно этому перекомпиляция была бы нереалистичной) ... так что вам даже придется изо всех сил реализовать свой код как можно сложнее, чтобы помешать хакеру добиться успеха . (Это можно сделать с помощью одного из тех инструментов обфускации кода, которые у них могут быть.)

0
ответ дан 30 November 2019 в 11:17
поделиться

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

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

1
ответ дан 30 November 2019 в 11:17
поделиться

Мне жаль, что я отказал вам, но сначала вы должны иметь представление о том, что вы хотите построить; тогда вы должны доказать , что ваша идея не только работает, но и нравится пользователям до такой степени, что они хотят пиратство. В-третьих, вы должны убедиться, что время, потраченное на его «безопасность», действительно стоит ценности приложения.

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

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

10
ответ дан 30 November 2019 в 11:17
поделиться

Я понятия не имею, как защитить его от взлома и распространения как варез.

Во-первых, вам лучше выбрать другой язык, кроме Java, если это вызывает беспокойство. Вот почему C ++ все еще жив и процветает в мире коммерческих приложений. Если вы не собираетесь использовать настоящий компилятор Java для собственного exe, я бы пересмотрел Java по причинам защиты IP.

В этом отношении даже C ++ не защищен от взлома, но защита IP и взлом - две отдельные важные проблемы.

2
ответ дан 30 November 2019 в 11:17
поделиться

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

Например, если я могу захватить трафик, который идет на ваш сервер, и просто каждый раз воспроизводить его обратно в мою программу, я все еще в порядке. Например, я мог бы создать свой собственный «веб-сервер» и гарантировать, что программа попадет на него, а не на ваш сервер.

0
ответ дан 30 November 2019 в 11:17
поделиться

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

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

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

1
ответ дан 30 November 2019 в 11:17
поделиться

Я бы посмотрел на негативную реакцию игры Spore, прежде чем выбирать схему лицензирования. У них был домашний телефон, и разрешалось только очень много установок и т.д. и т.п. Вы говорите, что хотите иметь меньше продаж, чем видеть, как люди используют его бесплатно, но вы можете быть осторожны с тем, о чем просите. Я действительно с нетерпением ждал появления Spore (как и мои дети), но я никогда не покупал его из-за схемы DRM.

Что бы вы ни делали, она будет взломана в очень короткие сроки, особенно если программа действительно чего-то стоит.

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

1
ответ дан 30 November 2019 в 11:17
поделиться

Я вижу конкретную слабость в вашем примере, помимо комментария, который уже было сделано большинством людей, о том, что DRM трудно (невозможно) реализовать и часто просто обойти.

Во втором пункте:

Если все в порядке, сервер возвращает некоторые важные недостающие части программы, привязанной к этому определенному компьютеру вместе с данными об использовании ограничение в 2 дня

Это ограничение в 2 (или X) дня, скорее всего, будет чрезвычайно просто обойти, это займет всего несколько минут, чтобы найти и исправить (взломать).

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

Прежде чем попробовать что-либо из этого, обязательно прочтите Использование программного обеспечения , и вы дважды подумаете, прежде чем пытаться применить DRM.

1
ответ дан 30 November 2019 в 11:17
поделиться

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

3
ответ дан 30 November 2019 в 11:17
поделиться

Перефразируя г-на Джеффа Этвуда, лучше упростить для вашего клиента оплату вам, чем взломать ваше приложение. Другими словами, я думаю, вы решаете не ту проблему. Сделайте покупку вашего продукта ДЕЙСТВИТЕЛЬНО простой, и тогда ваши клиенты не будут чувствовать, что им нужно прилагать усилия для его взлома.

1
ответ дан 30 November 2019 в 11:17
поделиться

Не беспокойтесь.

Игровая индустрия десятилетиями борется с пиратством. Для сетевых многопользовательских игр с центральным сервером обычно требуется подписка. Эта модель довольно устойчива к пиратству.Практически все другие игры сильно пиратские, несмотря на бесчисленные попытки DRM.

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

6
ответ дан 30 November 2019 в 11:17
поделиться

Вам следует прочитать «Тайное программное обеспечение» от Коллберга и Нагры. Эта книга действительно хороша, чтобы помочь вам понять, как работают механизмы защиты программного обеспечения (такие как обфускация кода, водяные знаки, родимые пятна и т. Д.).

Как сказал Лоренцог, тотальной безопасности не существует, а безопасность программного обеспечения подобна постоянной гонке между поставщиками программного обеспечения и пиратами.

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

Если вы хотите повысить безопасность, вы можете поставить родимые метки на свои алгоритмы и поставить водяные знаки на свои копии, чтобы узнать, кто утек ваше творение. Но даже если вы это сделаете, это не означает, что ваше программное обеспечение защищено на 100%. К тому же время, которое вы потратите на добавление этих механизмов, может не окупиться.

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

0
ответ дан 30 November 2019 в 11:17
поделиться

Если бы у меня было достаточно очков репутации, я бы отклонил этот вопрос. Защита коммерческого программного обеспечения - это пустая трата времени, денег и усилий по многим причинам. Сконцентрируйтесь на создании программного обеспечения, которое стоит покупать. Если ваше программное обеспечение достаточно популярно, чтобы поддерживать широкое распространение пиратов, вы, вероятно, достаточно успешны на этом этапе, чтобы даже не беспокоиться о пиратстве. Как бы то ни было, взломщики взламывают защиту программного обеспечения в основном ради развлечения. Чем сильнее ваша защита, тем лучше она бросает вызов и тем сильнее они хотят ее взломать. Ваши лучшие усилия будут стоить вам тысяч, займут месяцы и будут взломаны всего за несколько дней.

0
ответ дан 30 November 2019 в 11:17
поделиться
Другие вопросы по тегам:

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