Защита от копирования статической библиотеки - PullRequest
3 голосов
/ 11 января 2010

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

В идеале, я бы хотел вообще запретить связывание библиотеки с исполняемым файлом, если (и только если!) Библиотека была незаконно скопирована на компьютер разработчика. Это возможно?

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

Библиотека написана на C ++ и предназначена для ряда платформ, включая Windows и Mac.

Есть ли у меня варианты?

Ответы [ 9 ]

8 голосов
/ 11 января 2010

Я согласен с другими ответами, что надежная защита просто невозможна.Однако, как нежный толчок ...

Если ваша библиотека предварительно скомпилирована, вы можете препятствовать чрезмерному незаконному использованию, запрашивая пользовательскую информацию о лицензии в API.функция как:

jeastsy_lib::init()

до:

jeastsy_lib::init( "Licenced to Foobar Industries", "(hex string here)" );

Где первый параметр идентифицирует клиента, а второй параметр - MD5 или другой хеш первого параметра с солью .

Когда вы приобретете вашу библиотеку, вы предоставите оба этих параметра покупателю.

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

7 голосов
/ 11 января 2010

Статическая библиотека C ++ ужасно плохо распространяется;

Это бот тангенциальный, но здесь нужно упомянуть IMO. Есть много опций компилятора, которые должны соответствовать вызывающей стороне:

  • Ansi / Unicode,
  • статическая / динамическая связь ЭЛТ,
  • обработка исключений включена / отключена,
  • представление указателей на функции-члены
  • LTCG
  • Debug / Release

Это до 64 конфигураций!

Кроме того, они не переносимы между платформами, даже если ваш код C ++ не зависит от платформы - они могут даже не работать с будущей версией компилятора на той же платформе! LTCG создает огромные .lib файлы. Таким образом, даже если вы можете опустить некоторые варианты, у вас огромный размер сборки и распространения, а также общий PITA для пользователя.

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


Идеи реализации

Я не могу придумать ни одного лучшего фундаментального механизма, чем предложение Шмуопти.

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

Вам необходимо защитить себя от инструментов LIB "unpacker". Однако компоновщик должен иметь возможность удалять неиспользуемые функции.


Общие мысли

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

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

4 голосов
/ 11 января 2010

В идеале, я бы хотел вообще запретить связывание библиотеки с исполняемым файлом, если (и только если!) Библиотека была незаконно скопирована на компьютер разработчика. Возможно ли это?

Как бы вы определили, была ли ваша библиотека "незаконно скопирована" во время ссылки?

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

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

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

2 голосов
/ 11 января 2010

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

0 голосов
/ 14 марта 2019

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

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

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

Преимущества этого метода в моих глазах:

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

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

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

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

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

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

0 голосов
/ 05 февраля 2016

Я скоро отправлю платную статическую библиотеку

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

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

Самая трудная часть запуска бизнеса - это создание продукта, за который люди будут платить. Вы еще не доказали, что сделали это; Защита от копирования ergo не имеет значения.

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

И тогда, даже если вы продадите его, вы не узнаете, украдут ли его люди или нет.

В этом разница между хорошим программистом и хорошим владельцем бизнеса.

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

0 голосов
/ 11 января 2010

Пара идей ... (хотя у них есть некоторые существенные недостатки, которые должны быть очевидны)

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

Для во время выполнения: скомпилировать библиотеку для работы только на определенных машинах, например. проверьте UID или MAC-идентификаторы или что-то еще

0 голосов
/ 11 января 2010

Если вы планируете опубликовать дорогостоящий фреймворк, вы можете использовать FLEXlm .

Я не связан с ними, но видел это в различных дорогих фреймворках, часто нацеленных на аппаратное обеспечение Silicon Graphics.

0 голосов
/ 11 января 2010

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

Нет способа запустить код во время компоновки со стандартными компоновщиками, поэтому в этот момент невозможно определить, в порядке ли вы.

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

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

...