Защита программного обеспечения шифрованием - PullRequest
13 голосов
/ 23 октября 2008

Для нашего программного обеспечения мы используем аппаратные ключи для защиты программного обеспечения. Защита не идеальна, но это коммерческое решение доступно и позволяет честным людям оставаться честными (как упоминалось в другой ветке). Преимущество - это 128-битный ключ, который хранится в «нечитаемом» ключе оборудования.

Мы хотим удалить этот аппаратный ключ и начать использовать защиту программного обеспечения. По сути, мы можем использовать коммерческий продукт, но, с другой стороны, он также не будет ломким. Я не знаю много о шифровании, и поэтому я публикую это. Как сохранить на компьютере Windows ключ, который невозможно будет прочитать с помощью Reflector или чего-то еще? Однако я должен иметь доступ к ключу для проверки кода лицензии.

Мне бы хотелось простое решение, которое нельзя взломать, просто используя Reflector.

Или я задаю очень глупый вопрос?


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

Большое спасибо !!

Ответы [ 14 ]

17 голосов
/ 23 октября 2008

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

13 голосов
/ 23 октября 2008

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

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

Итак, как мы лицензируем?

Мы генерируем случайный номер лицензии с каждой новой установкой (число от 10K до 99K прекрасно работает). Затем у нас есть алгоритм для генерации совпадающего числа (все, что нетривиально будет делать). Кстати, мы используем случайное число, поэтому любая попытка переустановки на другом компьютере приводит к разным номерам лицензий / совпадений.

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

Я говорю, что иметь их по телефону нам важно, потому что мы используем это как возможность поговорить с ними об их настройке, ответить на любые вопросы и дать им понять, что они имеют дело с реальными людьми. Очень немногие люди имеют смелость попытаться позвонить и выдать себя за другую компанию (мы ищем их и сравниваем их информацию с нашей базой данных покупок). Обратите внимание, что наш пакет стоит около $ 2K, поэтому телефонные звонки разумны. Если ваш пакет стоит дешевле и имеет больший объем, вы можете сделать это по электронной почте. Наконец, мы используем вызов, чтобы сообщить пользователям, как получить обновления и техническую поддержку с их новой лицензией.

Наконец, мы храним ключ в базе данных приложения (локально установленная база данных MSDE / SQL Express), так что любая попытка скопировать приложение будет A) нетривиальной и B) перенести много данных, специфичных для организация, которая сначала купила законную версию (что делает их менее вероятными для обмена). Лицензионный ключ зашифрован и «разбит» на два разных ключа, которые хранятся в двух разных таблицах. Таким образом, простое «найти ключ и ввести его в пиратской версии» не получится.

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

10 голосов
/ 23 октября 2008

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

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

Чтобы защитить сам код и обойти его защиту, запутайте:

В целом, вы можете получить лучшее преимущество от упакованного решения.

3 голосов
/ 02 ноября 2008

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

3 голосов
/ 23 октября 2008

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

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

1 голос
/ 23 октября 2008

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

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

  • Безопасное хранение ключа
  • Проверка лицензии
  • Запутывание во время компиляции (чтобы было сложнее разобрать ваше приложение)

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

1 голос
/ 23 октября 2008

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

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

0 голосов
/ 02 ноября 2008

Пожалуйста, позвольте мне добавить несколько мыслей к Вашему вопросу:

  • Требуется ли Вашему программному обеспечению какое-либо подключение к Интернету?
    • Если ответ «да», вы можете отслеживать использование. (Сообщите клиенту об этой функции!)
    • Если ответ «нет», Вы по-прежнему можете отслеживать использование в большинстве случаев, но не можете принудительно установить соединение с вашими серверами, чтобы продукт работал.
  • Хотите добавить защиту от копирования в свое программное обеспечение? Это не риторический вопрос, потому что
    • некоторое программное обеспечение должно быть настроено компанией-разработчиком программного обеспечения или ее партнерами. Если кто-то делает копию программного обеспечения, которое должно быть настроено экспертами, он просто не будет ему полезен.
    • например. если сотрудник вашего клиента хочет использовать ваше высокопроизводительное программное обеспечение для проектирования схем для своих частных проектов у себя дома, и вы даете ему разрешение на это, то у вас на сайте ваших клиентов будет кто-то, кто будет голосовать за ваш продукт на каждом решение о покупке.
    • усилия по защите рабочей копии могут быть выше, чем потери, вызванные неавторизованными копиями. (Помните, вы можете включить его в следующую версию.)
0 голосов
/ 23 октября 2008

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

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

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

0 голосов
/ 23 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...