Можно ли извлечь исходный код python, выполненный с использованием PyRun_SimpleString?

#python #security #embed

#python #Безопасность #Внедрить

Вопрос:

Я разрабатываю программное обеспечение на основе встроенных Python и C . Я хочу обезопасить часть своего кода на python и запретить людям копировать его.

На данный момент я использую PyRun_SimpleString для выполнения кода python, и строка генерируется с использованием моего кода на C .

Если я использую этот метод, защитит ли он код Python от копирования?

Ответ №1:

Итак, насколько я понимаю, фактическая программа не будет существовать в исполняемом файле ни в исходной форме python, ни в «упорядоченной» форме (в основном .pyc image), ни в скомпилированной форме, хотя я предполагаю, что она будет существовать в некоторой зашифрованной или запутанной форме, которая преобразуется в исходный код python во время выполнения.

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

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

Возможно, вы захотите изучить средство «замороженный модуль», которое находится в исходном коде python. Это в основном позволяет компилировать изображения ‘.pyc’ в виде массивов байтов и импортировать во время выполнения путем их отмены сортировки. Таким образом, никогда не существует простого текстового источника, но есть изображение .pyc, которое достаточно легко проанализировать, если вы найдете его на изображении. Сделайте еще один шаг вперед и запутайте изображение pyc — теперь злоумышленнику необходимо проанализировать или проследить за де-запутыванием, и он все равно не увидит простой исходный код.

Комментарии:

1. То есть вы имеете в виду, что в любом случае, если хакер перехватит вызов PyRun_SimpleString, он сможет удалить весь код python? В этом случае, я думаю, что возможным средством является только компиляция в байтовый код.

2. Сейчас я пытаюсь найти «Замороженный модуль» в Python. Все еще нужно найти хороший пример. Опубликую его, как только мне удастся это сделать.