Как защитить исходный код Python?

можно ли распространять только версию байт-кода (.pyc-файл) скрипта Python вместо оригинала .файл py? Мое приложение встраивает интерпретатор Python и вызывает PyImport_Import для загрузки скрипта. Как я могу сказать ему искать .pyc файл и импортировать его?

5 ответов


Я сделал это, создав .py библиотека и простой .программа py, которая использует эту библиотеку. Затем я скомпилировал библиотеку .pyc и распространяется: программа as .py источник и библиотека в скомпилированном виде .пыць.


использовать заморозить инструмент, который включен в исходное дерево Python как инструменты/заморозки. Он преобразует байтовый код Python в массивы C; с помощью компилятора C вы можете встроить все свои модули в новую программу, которая затем связана со стандартными модулями Python.

обратите внимание, что freeze требует компилятора C.

прочие услуги:

1- PyInstaller

2- Py2Exe

3- сжать

4- cx_freeze

подробнее о effbot.org


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

поскольку вы используете PyImport_Import, вы можете написать свой собственный __import__ hook для импорта модулей не из файла ,а из буфера памяти, поэтому ваше преобразование.файл pyc может произойти все в памяти, без понятного кода Python на диске вообще.


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

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

однако уровень защиты исходного кода может быть не очень высоким.


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

$ echo 'print "hello"' > test.py
$ python -m compileall .
$ rm test.py
$ python -m test
hello
$

Не могли бы вы просто попробовать, если это работает так же с API?

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

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