Перейти к содержимому

Как зашифровать код python

  • автор:

Скрыть код на питоне на компьютере

Ситуация: Есть проект, написанный на питоне. Проект крутится на мини-компьютере, который размещается среди прочих контроллеров и устройств в шкафу. Проект коммерческий, и мы не хотим, чтобы пользователь, которому мы продадим шкаф, смог бы украсть код, либо внести туда изменения. Вопрос, как защитить код? У нас есть идея зашифровать весь диск SSD мини-компьютера инструментами linux. Насколько это надежно?

Отслеживать
задан 18 авг 2023 в 9:49
Артур Гильметдинов Артур Гильметдинов
73 6 6 бронзовых знаков
если у пользователя есть доступ к работающему диску, то чем поможет шифрование?
18 авг 2023 в 9:51
Изучайте это направление
18 авг 2023 в 10:05
закинь в докер и держи приложуху там
18 авг 2023 в 10:21

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

18 авг 2023 в 10:27
@Ruslan а при чём тут докер, что-то помешает выковырять код программы из докера?
18 авг 2023 в 10:27

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Самый простой и надежный способ — это скомпилировать ключевые места в сишный модуль через cython .

print('helloword') 
$ cythonize -i test.py 

Получится файлик test.cpython-311-x86_64-linux-gnu.so . Теперь исходники можно удалить из проекта:

$ rm test.py test.c $ python -c "import test" helloword 

Но у пользователя остаётся возможность вызывать функции в вашем коде.

Отслеживать
ответ дан 20 авг 2023 в 19:05
34.2k 3 3 золотых знака 27 27 серебряных знаков 61 61 бронзовый знак

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

Вот несколько практик и инструментов для обфускации кода на Python:

  1. PyArmor: Это популярный инструмент для обфускации кода Python. Он может обфусцировать часть кода или весь проект, а также поддерживает многие платформы.
  2. Rename переменных и функций: Простейший способ обфускации — это переименование переменных, функций и классов в нечто неинформативное, например, из calculate_total в a1. Удаление комментариев и документации: Хотя это не делает код более трудным для анализа, это убирает полезную информацию, которая может помочь в понимании кода.
  3. Использование строковых операций: Вы можете динамически создавать и выполнять код с помощью функций eval() и exec(). Но будьте осторожны, так как это может создать уязвимости в безопасности.
  4. Упаковка кода: Существуют инструменты, такие как cx_Freeze или PyInstaller, которые позволяют упаковать ваш код в исполняемый файл. Это делает анализ исходного кода более сложным.
  5. Использование компиляции: Вы можете компилировать ваш код в байт-код с помощью модуля py_compile. Это создает файл .pyc, который труднее анализировать, чем исходный код.
  6. Интеграция с C/C++: Если у вас есть критические части кода, которые вы хотите защитить, вы можете реализовать их на C или C++ и вызывать из Python.
  7. Обфускация строк: Строки можно кодировать и декодировать на лету, чтобы их было труднее найти и понять.
  8. Использование ProGuard для Jython: Если вы используете Jython (Python для JVM), вы можете использовать инструменты обфускации Java, такие как ProGuard.
  9. Избегайте обфускации стандартных библиотек: Это может вызвать проблемы совместимости.

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

Еще несколько практик, кроме обфускации которые могут вам помочь (или на что-то надоумить, т к у многих есть много условий и «за»/»против»:

  1. Использование байт-кода: Python автоматически компилирует исходный код в байт-код (файлы .pyc). Хотя байт-код можно декомпилировать, это добавляет дополнительный шаг в процесс анализа.
  2. Работа с лицензиями: Внедрите систему лицензирования, чтобы ограничить использование вашего продукта только лицензированными пользователями. (К примеры мы привязываемся к железу, т. к. нет выхода в сеть)
  3. Тампер-детекция: Внедрите механизмы, которые определяют, был ли изменен ваш код или исполняемый файл, и предпринимают соответствующие действия (например, завершают выполнение программы).
  4. Защита от отладки: Используйте методы и инструменты, которые обнаруживают попытки отладки вашего кода и прерывают выполнение или вводят злоумышленника в заблуждение.
  5. Криптографическая защита: Шифруйте чувствительные данные или ключевые части кода. Также можно использовать цифровые подписи для проверки целостности кода.
  6. Облачные вычисления: Если возможно, переместите критические части вашего приложения на серверную сторону. Таким образом, конечный пользователь никогда фактически не видит или не имеет доступа к этим частям кода.

Шифруемся — обфускация Python кода

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

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

В этом нам поможет инструмент «обфускатор». Он шифрует код и делает его недоступным для других людей.

Таких инструментов достаточно много, давайте посмотрим основные. Некоторые из них есть в online версии, т.е сайт

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

import requests

for i in range(100):

r = requests.get(«https://google.com»)

r = r.text.split(«<")

while True:

Давайте посмотрим, как его преобразит наш инструмент.

Вставляем код в поле, предварительно удалив старый и нажимаем кнопку «OBFUSCATE»

Видим зашифрованный результат:

Как мы можем увидеть — инструмент наделил код пробелами, лишней табуляцией и напрочь зашифровал переменные.

Это достаточно сильный инструмент, однако всегда найдется рыбка покрупнее!

Переходим к обфускатору, уже больее серьезного типа.

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

Как видите — данный инструмент уже требует загрузку файла, и результат так же выдает в файловом формате.

После сохранения кода в файл — загрузим его и следом нажмем кнопку Obfuscate
Код в нашем файле обфусцирован (зашифрован). Скачаем его и проверим это.
Наш код зашифрован надежнейшим образом

В этой статье мы наглядно увидели обфускацию Python кода онлайн-инструментами. Ссылки на все инструменты оставляем ниже:

  1. https://pyob.oxyry.com/
  2. https://development-tools.net/python-obfuscator/

С вами были E7! Всем удачи и увидимся в следующих постах!

Шифрование набора инструментов Python

По умолчанию набор инструментов Python ( .pyt ) – это текстовой файл, который можно редактировать в любом текстовом редакторе или в среде разработки Python IDE. Однако в некоторых случаях может потребоваться скрыть исходный код набора инструментов Python.

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

Внимание:

Шифрование набора инструментов Python производится непосредственно для самого файла, и исходный незашифрованный файл будет переписан. Создание резервной копии исходного набора инструментов Python рекомендуется на случай, если вы забудете пароль.

Чтобы зашифровать набор инструментов Python, щелкните на нем правой кнопкой мыши и выберите Зашифровать .

Также имеются функции ArcPy EncryptPYT и DecryptPYT для шифрования и расшифровки наборов инструментов Python.

PyArmor: как запутать код, чтобы защитить программное обеспечение

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

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

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

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

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

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

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

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

pip install pyarmor

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

pip install pyarmor—webui

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

В первую очередь необходимо создать отдельную папку, в которой будет храниться скрипт с кодом «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]

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *