Скрыть код на питоне на компьютере
Ситуация: Есть проект, написанный на питоне. Проект крутится на мини-компьютере, который размещается среди прочих контроллеров и устройств в шкафу. Проект коммерческий, и мы не хотим, чтобы пользователь, которому мы продадим шкаф, смог бы украсть код, либо внести туда изменения. Вопрос, как защитить код? У нас есть идея зашифровать весь диск 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:
- PyArmor: Это популярный инструмент для обфускации кода Python. Он может обфусцировать часть кода или весь проект, а также поддерживает многие платформы.
- Rename переменных и функций: Простейший способ обфускации — это переименование переменных, функций и классов в нечто неинформативное, например, из calculate_total в a1. Удаление комментариев и документации: Хотя это не делает код более трудным для анализа, это убирает полезную информацию, которая может помочь в понимании кода.
- Использование строковых операций: Вы можете динамически создавать и выполнять код с помощью функций eval() и exec(). Но будьте осторожны, так как это может создать уязвимости в безопасности.
- Упаковка кода: Существуют инструменты, такие как cx_Freeze или PyInstaller, которые позволяют упаковать ваш код в исполняемый файл. Это делает анализ исходного кода более сложным.
- Использование компиляции: Вы можете компилировать ваш код в байт-код с помощью модуля py_compile. Это создает файл .pyc, который труднее анализировать, чем исходный код.
- Интеграция с C/C++: Если у вас есть критические части кода, которые вы хотите защитить, вы можете реализовать их на C или C++ и вызывать из Python.
- Обфускация строк: Строки можно кодировать и декодировать на лету, чтобы их было труднее найти и понять.
- Использование ProGuard для Jython: Если вы используете Jython (Python для JVM), вы можете использовать инструменты обфускации Java, такие как ProGuard.
- Избегайте обфускации стандартных библиотек: Это может вызвать проблемы совместимости.
И нужно учитывать, что обфускация не делает ваш код полностью безопасным. Она лишь затрудняет его анализ. Если кто-то действительно хочет разобраться в вашем коде, он найдет способ это сделать. Обфускация — это лишь один из инструментов в вашем арсенале защиты.
Еще несколько практик, кроме обфускации которые могут вам помочь (или на что-то надоумить, т к у многих есть много условий и «за»/»против»:
- Использование байт-кода: Python автоматически компилирует исходный код в байт-код (файлы .pyc). Хотя байт-код можно декомпилировать, это добавляет дополнительный шаг в процесс анализа.
- Работа с лицензиями: Внедрите систему лицензирования, чтобы ограничить использование вашего продукта только лицензированными пользователями. (К примеры мы привязываемся к железу, т. к. нет выхода в сеть)
- Тампер-детекция: Внедрите механизмы, которые определяют, был ли изменен ваш код или исполняемый файл, и предпринимают соответствующие действия (например, завершают выполнение программы).
- Защита от отладки: Используйте методы и инструменты, которые обнаруживают попытки отладки вашего кода и прерывают выполнение или вводят злоумышленника в заблуждение.
- Криптографическая защита: Шифруйте чувствительные данные или ключевые части кода. Также можно использовать цифровые подписи для проверки целостности кода.
- Облачные вычисления: Если возможно, переместите критические части вашего приложения на серверную сторону. Таким образом, конечный пользователь никогда фактически не видит или не имеет доступа к этим частям кода.
Шифруемся — обфускация 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 кода онлайн-инструментами. Ссылки на все инструменты оставляем ниже:
- https://pyob.oxyry.com/
- 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]
Затем необходимо выполнить команду обфускации: