Защита от копирования статической библиотеки
Я скоро отправлю платную статическую библиотеку, и мне интересно, можно ли создать какую-либо форму защиты от копирования, чтобы предотвратить копирование библиотеки разработчиками.
В идеале я хотел бы вообще запретить связывание библиотеки в исполняемый файл, если (и только если!) библиотека была незаконно скопирована на компьютер разработчика. Возможно ли это?
В качестве альтернативы может быть приемлемо, если приложения связаны с нелегитимной копией библиотеки просто не сработало; однако очень важно, чтобы это не накладывало никакой нагрузки на пользователей этих приложений (например, ввод лицензионного ключа, использование донгла или даже требование подключения к интернету).
Библиотека написана на языке C++ и предназначена для ряда платформ, включая Windows и Mac.Есть ли у меня какие-либо варианты?
8 ответов:
Я согласен с другими ответами, что защита от дураков просто невозможна. Однако в качестве нежного толчка ...
Если ваша библиотека предварительно скомпилирована,вы можете препятствовать чрезмерному незаконному использованию, требуя пользовательской информации о лицензии в API.
Измените функцию следующим образом:
jeastsy_lib::init()
Кому:
jeastsy_lib::init( "Licenced to Foobar Industries", "(hex string here)" );
, где первый параметр идентифицирует клиента, а второй параметр является MD5 или другим хэшем первого параметра с соль.
Когда ваша библиотека будет приобретена, вы предоставите заказчику оба этих параметра.
Чтобы быть ясным , это легко предотвращаемая защита для кого-то достаточно умного и амбициозного. Считайте это лежачим полицейским на пути к пиратству. Это может убедить потенциальных клиентов, что покупка вашего программного обеспечения-самый простой путь вперед.
Статическая библиотека C++ - это ужасно плохой распространяемый файл.
Это бот тангенциальный, но здесь следует упомянуть ИМО. Существует множество параметров компилятора, которые должны соответствовать вызывающему объекту:
- Ansi / Unicode,
- статическое / динамическое связывание ЭЛТ,
- обработка исключений включена / отключена,
- представление указателей функций-членов
- LTCG
- Debug / Release
Это до 64 конфигураций!
Также они не являются переносимость между платформами, даже если ваш код C++ не зависит от платформы - они могут даже не работать с будущей версией компилятора на той же платформе! LTCG создает огромные .файлы lib. Таким образом, даже если вы можете опустить некоторые из вариантов, у вас есть огромный размер сборки и дистрибутива, а также общая Пита для пользователя.
Это главная причина, по которой я бы не стал покупать что-либо, что поставляется только со статическими библиотеками, а тем более что-то, что добавляет защиту от копирования любого рода.
Идеи реализации
Я не могу придумать лучшего фундаментального механизма, чем предложение Шмоопти.Вы можете дополнительно "пометить" свои сборки, так что если вы обнаружите библиотеку "в дикой природе", вы сможете определить, кому Вы ее продали. (Впрочем, что вы собираетесь делать? Писать гневные письма потенциально невинному клиенту?) Кроме того, это требует некоторых усилий, использование легко локализуемой последовательности байтов, не влияющей на выполнение, не поможет много.
Вам нужно защитить себя от инструментов LIB "unpacker". Однако компоновщик все равно должен иметь возможность удалять неиспользуемые функции.
Общие мысли
Реализация достойного механизма защиты требует большой осторожности и некоторого творчества, и я еще не видел ни одного, который не создавал бы дополнительных затрат на поддержку и требовал бы жестких социальных решений. Каждый час, потраченный на защиту от копирования, - это час, не потраченный на улучшение вашего продукта. То рынок C++ кода не так уж велик, я вижу, что ваши клиенты должны платить за большую работу.Когда я покупаю код, я с радостью плачу за документацию, поддержку, исходный код и другие признаки "будущей корректности". Не так уж много для получения лицензии.
В идеале я хотел бы вообще запретить связывание библиотеки в исполняемый файл, если (и только если!) библиотека была незаконно скопирована на компьютер разработчика. Возможно ли это?
Как бы вы определили, была ли ваша библиотека "незаконно скопирована"во время ссылки?
Помните, что ни один из ваших кодов не выполняется, когда компоновщик выполняет свою работу.
Итак, учитывая, что ни один из ваших кодов не выполняется, мы ничего не можем сделать при компиляции или время связи. Остается попытаться определить, была ли библиотека незаконно скопирована на связующую машину с совершенно не связанной целевой машины. И я все еще не вижу никакого способа сделать эти две ситуации различимыми, даже если бы Вы были готовы возложить бремя, такое как "требуется доступ в интернет" на конечного пользователя.
Мой вывод заключается в том, что предложение fuzzy lollipop "сделать что-то настолько полезным, что люди захотят его купить" является лучшим способом "защиты от копирования" вашего кода библиотека.
Защита от копирования и в этом случае защита исполнения по определению "возлагает бремя на пользователя". этого никак не обойти. лучшая форма защиты от копирования-написать что-то настолько полезное, что люди чувствуют себя вынужденными купить его.
Вы не можете делать то, что хотите (идеальная защита от копирования, которая не обременяет никого, кроме людей, незаконно копирующих работу).
Вы не можете запустить код во время компоновки со стандартными компоновщиками, поэтому нет способа определить, все ли у вас в порядке.
Это оставляет время выполнения, и это означало бы, что конечные пользователи должны каким-то образом проверить, что вы уже определили, не является стартером.
Ваши единственные варианты: отправить его как есть и надеюсь, разработчики не копируют его слишком много, или напишите свой собственный компоновщик и попытайтесь заставить людей использовать его (просто на случай, если это не очевидно: это не сработает. Ни один разработчик в здравом уме не собирается покупать библиотеку, которая требует специального компоновщика).
Если вы планируете опубликовать дорогостоящий фреймворк, вы можете использовать FLEXlm.
Я не связан с ними, но видел это в различных дорогостоящих фреймворках, часто ориентированных на аппаратное обеспечение Silicon Graphics.
Пара идей... (у них есть некоторые основные недостатки, хотя это должно быть очевидно)
Во время компиляции: Поместите файл библиотеки в общий ресурс и предоставьте ему права доступа только для разработчиков, которым вы его продали.
Для во время выполнения: скомпилируйте библиотеку для работы только на определенных машинах, например. проверьте UIDs или MAC ids или что-то еще
Правильный ответ на ваш вопрос: Не беспокойтесь о защите от копирования, пока не докажете, что она вам нужна.Скоро я отправлю платную статическую библиотеку
Вы говорите, что " скоро будете поставлять платную статическую библиотеку.- Пока вы не докажете, что у вас есть люди, готовые украсть вашу технологию, внедрение защиты от копирования не имеет значения. Тревожное чувство, что "есть люди, которые украдут его", не является доказательством этого. будут украдены.
Самая трудная часть запуска бизнеса-это создание продукта, за который люди будут платить. Вы еще не доказали, что сделали это; следовательно, защита от копирования не имеет значения.Я не говорю, что ваш продукт не имеет никакой ценности. Я говорю, что пока вы не попытаетесь продать его, вы не будете знать, имеет ли он ценность или нет.
И тогда, даже если вы его продадите,вы не будете знать, крадут его или нет.В этом разница между тем, чтобы быть хорошим программист и хороший владелец бизнеса.
Во-первых, докажите, что кто-то хочет украсть ваш продукт. Затем, если кто-то хочет украсть его, добавьте защиту от копирования и продолжайте улучшать свой продукт.