Время прочтения: 5 мин.

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

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

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

Разработчики скриптов знают, что код на Python поддерживает анализ байт-кода, позволяющий ускорять работу интерпретатора и сам код на Python очень сложно защитить от нежелательного просмотра третьими лицами. Даже новички в разработке скриптов на Python могут заполучить исходный скрипт .py из файла .exe.

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

Библиотека PyArmor имеет несколько вариантов работы – через консоль, а также с использованием localhost GUI – графического пользовательского интерфейса.

Установка и использование библиотеки pyarmor

В консоли необходимо выполнить следующую команду, чтобы установить модуль:

pip install pyarmor

Для того, чтобы начать работу с графическим интерфейсом библиотеки необходимо сперва его установить, выполнив следующую команду:

pip install pyarmorwebui

Библиотеки успешно установлены, теперь можно приступить непосредственно к самому шифрованию скрипта.

В первую очередь необходимо создать отдельную папку, в которой будет храниться скрипт с кодом «my_script.py».

В качестве примера скрипта возьму самый простейший скрипт с математическими функциями и с определением функции вывода (функция вывода довольно проста и не нуждается в каких-либо пояснениях):

def math_primer1(x, y):
   return x + y * x * y
def math_primer2(x, y):
   return x * y ** (x + y)
if __name__ == "__main__":
   result1 = math_primer2(2, 3)
   result2 = math_primer1(1, 2)
   print(result1, result2)

Теперь зашифрую этот код, выполнив в консоли несколько команд.

Для начала необходимо изменить путь до директории в которой лежит файл через:

cd [Полный путь до файла my_script.py]

Затем необходимо выполнить команду обфускации:

pyarmor obfuscate –restrict=0 [Полный путь до файла my_script.py] — (путь до нашего файла — скрипта)

Команда выполнена успешно – obfuscate 1 scripts Ok.

Теперь в исходной папке появилась новая директория dist, в которой содержится папка pytransform и зашифрованный скрипт my_script.py, при открытии которого на первый взгляд совершенно невозможно понять какой код там содержится.

Теперь можно проверить функцию вывода зашифрованного скрипта my_script.py – выполним его с помощью консоли python и увидим, что действительно зашифрованный скрипт работает и выводит верный результат подсчета математической функции.

python [Путь до зашифрованного скрипта] >> enter

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

Если после запуска скрипта программа выдает сообщение об ошибке «Дата действия лицензии истекла», то это означает, что встроенная дата (после которой программа не запустится) уже прошла.

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

            Реализация шифрования может быть выполнена в разных операционных системах, например, Windows, Ubuntu.

                GUI библиотеки

         Что касается работы с графическим пользовательским интерфейсом библиотеки pyarmor, необходимо выполнить команду в консоли:

pуаrmorwеbui

Выполнение команды откроет локальный хост графического пользовательского интерфейса localhost.

Нажимаю раздел «Obfuscаte Script Wizаrd», выбираю исходный путь — path до скрипта и указываю название скрипт, нажимаю «Далее».

Нажимая «obfuscate» появляется аналогичная папка dist с зашифрованным в ней скриптом.

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

Успехов в кодинге 😊