8

Как защитить Python код от чтения пользователями?

21

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

Если мы будем распространять файлы .py или даже .pyc, будет легко (декомпилировать и) удалить код, который проверяет лицензионный файл.

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

Есть ли хорошее решение для этой проблемы?

5 ответ(ов)

3

Python — это не тот инструмент, который вам нужен

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

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

Обфускация действительно сложна

Даже скомпилированные программы можно подвергать реверс-инжинирингу, так что не думайте, что вы сможете полностью защитить какой-либо код. Можно анализировать обфусцированный PHP, взломать ключ шифрования Flash и так далее. Новые версии Windows постоянно взламываются.

Наличие юридического требования — это хороший подход

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

Защита кода переоценена

Сегодня бизнес-модели стремятся продавать услуги, а не продукты. Вы не можете скопировать услугу, украсть или ограбить её. Возможно, пришло время рассмотреть возможность следовать этому течению…

0

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

[ИЗМЕНИИ] Ответ на комментарий Ника:

Ничего не выиграно и ничего не потеряно. Клиент получил то, что хотел (и заплатил за это, так как изменения он сделал сам). Поскольку он не публикует изменения, для всех остальных это всё равно, что ничего и не происходило.

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

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

Опять же, у нас есть два случая: оригинальный клиент продал только несколько копий. Это значит, что они все равно не заработали много денег, так что зачем беспокоиться? Или они продали в больших объемах. Это значит, что у вас есть больше шансов узнать о том, что они делают, и предпринять какие-то действия.

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

0

Отгрузка файлов .pyc имеет свои проблемы: они несовместимы с версиями Python, отличными от той, для которой были созданы. Это означает, что вам необходимо знать, какая версия Python будет использоваться на системах, где будет работать ваш продукт. Это является значительным ограничивающим фактором.

0

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

Таким образом, проверки лицензий смогут выполняться с безопасностью вашего собственного серверного помещения.

0

Хотя нет идеального решения, можно предпринять следующие шаги:

  1. Перенести часть критически важного кода инициализации в нативную библиотеку.
  2. Обеспечить проверку лицензии в нативной библиотеке.

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

Хотя это решение не является кроссплатформенным и не полностью написано на Python, оно будет работать.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь