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

Действительно ли возможно распределить только bytecode версию (.pyc файл) сценария Пайтона вместо оригинального .py файла? Мое приложение включает переводчика Пайтона и называет PyImport_Import, чтобы загрузить сценарий. Как я могу сказать этому искать .pyc файл и импорт это?

10
задан Nathan Osman 13 January 2010 в 08:30
поделиться

5 ответов

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

5
ответ дан 3 December 2019 в 15:52
поделиться

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

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

Другие утилиты:

1- Pyinstaller

2- PY2EXE

3- Сожмите

4- CX_FREEZE

Дополнительная информация о почерре. org

13
ответ дан 3 December 2019 в 15:52
поделиться

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

Так как вы используете Pyimport_import, вы можете написать свой собственный __ Import __ крюк для импорта модулей не из файла, а из буфера памяти, поэтому ваше преобразование в файл. Pyc может произойти все в памяти, с Нет понятного кода Python на диске вообще.

5
ответ дан 3 December 2019 в 15:52
поделиться

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

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

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

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

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

2
ответ дан 3 December 2019 в 15:52
поделиться

Как работает шахматный алгоритм?

создать дерево «плата-позиция» пять или 10 или 20 движется в будущее. Если предположить, что их около 20 возможные перемещения для любого положения платы, пятиуровневое дерево содержит 3 200 000 положения платы. 10-уровневое дерево содержит приблизительно 10 000 000 000 000 (10 триллион) позиций. Глубина дерево, которое компьютер может вычислить управляется скоростью компьютер, играющий в игру. Самый быстрый шахматные компьютеры могут генерировать и оценить миллионы позиций платы в секунду.

После создания дерева компьютер должен "оценить плату должности ". То есть компьютер имеет чтобы посмотреть на части на доске и решить, является ли эта договоренность куски - «хорошо» или «плохо». Чем путь это делает это с помощью оценки функция. Простейший из возможных функция может просто считать число частей, которые каждая сторона имеет. Если компьютер играет белый и определенное положение платы имеет 11 белых куски и девять черных кусков, простейшей функцией оценки может быть:

  11 - 9 = 2

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

Источник .

Для создания собственного javascript 'engine', который способен играть в шахматы на базовом уровне проверить Шаг за шагом Javascript Chess с CPU oppo

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

Некоторые полезные ресурсы:

-121--1329331-

Получается, что достойное решение заключается в том, чтобы обернуть обратный вызов в setTimeout () , с задержкой в 0 миллисекунд,чтобы сделать его асинхронным.

Мой новый код:

var urlField = $('#url');
urlField.bind('paste', function(e) {
    setTimeout(function() {
        alert(urlField.val());
    }, 0); // note the 0 milliseconds
});

Благодаря маскированному плагину ввода DigireBush , он использует этот метод во всем источнике.

-121--3303000-

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

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

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

2
ответ дан 3 December 2019 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: