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

Рейтинг: -2Ответов: 2Опубликовано: 18.08.2023

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

У нас есть идея зашифровать весь диск SSD мини-компьютера инструментами linux. Насколько это надежно?

Ответы

▲ 1

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

test.py:

print('helloword')

Компиляция:

$ cythonize -i test.py

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

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

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

▲ -1

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

Вот несколько практик и инструментов для обфускации кода на 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. Облачные вычисления: Если возможно, переместите критические части вашего приложения на серверную сторону. Таким образом, конечный пользователь никогда фактически не видит или не имеет доступа к этим частям кода.