Как защитить Python-код от модификации?







Многие задаются вопросом - как скрыть исходный код написанных на питоне скриптов, чтобы затем можно было например продавать эти скрипты. В своё время и мы задались этим вопросом, в следствии чего со временем нашли его решение.
Можно было бы просто отдавать клиентам байт-код, который создает python при первом запуске скрипта. Например, запустили test.py, рядом появился test.pyc, его и продаем. Однако в сети есть скрипты, которые восстанавливают из него исходный код с точностью до байта.
Поэтому, чтобы закрыть сорцы скрипта - его надо скомпилировать. Для этого, с помощью расширения cython его можно перевести в Си код, который и скомпилировать обычными инструментами, вроде make.
Рассмотрим решение пошагово:
- Конвертируем python-скрипт в Си:cython -3 СКРИПТ.py
Получаем СКРИПТ.c - это исходный код python-модуля, который выполняет то же самое что и питон-скрипт.
- Компилируем полученный Си-файл:
gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include/python3.3m -c СКРИПТ.c -o СКРИПТ.oПолучаем объектный файл СКРИПТ.о
Осталось слинковать его в бинарник. Так как примеры выполняются на линуксе, он будет иметь расширение .so:
На Windows расширение будет .pyd
link = gcc -pthread -shared СКРИПТ.o -o СКРИПТ.soТаким образом мы имеем новый модуль для питона "СКРИПТ.so", который можно импортировать в код других скриптов:
import СКРИПТ ....
Этим способом мы компилируем все наши скрипты для социальных сетей, работы с FTP и имейлами, входящие в состав программного продукта Fream. Ознакомиться с ним вы можете на сайте http://www.freedomscripts.org
На нашем сервере стоит скрипт, который каждую ночь пересобирает все наши программы для Linux, Windows и Freebsd, благодаря чему мы имеем в git-репозитории свежие бинарные версии каждой из них.
Продажа скомпилированных программ позволила реализовать привязку к железу - скрипты связаны с общим сервером авторизации и сообщают ему параметры компьютера, на котором их запускают, проверяя валидность купленной лицензии. Мы не делаем секрета из используемых нами технологий. Пишите нам по контактам на сайте и мы с радостью ответим на ваши вопросы об устройстве наших программ.
Молодцы!
Люблю когда не скрывают применяемые методы.
А с библиотеками что?