Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как установить лицензионную защиту кода на Pyth...

Как установить лицензионную защиту кода на Python и обезопасить данные с помощью HASP?

Как подружить C/C++ и Python с помощью Cython
Как передавая ПО на Python не отдавать исходники
Как использовать зашифрованные модели из Python

Moscow Python Meetup

February 04, 2023
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Решение https://ru.wikipedia.org/wiki/Cython “Cython — язык программирования, упрощающий написание модулей С/C++

    кода для Python. Кроме стандартного синтаксиса Python, поддерживаются: • прямой вызов функций и методов C/C++ из кода на Cython; • строгая типизация переменных, классов, атрибутов классов. Код Cython преобразуется в C/C++ код для последующей компиляции и впоследствии может использоваться как расширение стандартного Python или как независимое приложение со встроенной библиотекой выполнения Cython.”
  2. Возможности Cython • Ситонизация – трансляция Python кода в C/C++

    • Интеграция нативных библиотек в Python • Ускорение критичных участков Python кода
  3. Ситонизация Любой (почти) код на Python можно транслировать в C/C++,

    собрать из него бинари и поставлять их вместо скриптов. Как именно работает трансляция? Cython гененирует код на C/C++ на основе кода на Python используя его C- API
  4. Интеграция нативных библиотек в Python Cython позволяет довольно легко интегрировать

    библиотеку на нативном языке в Python. Для этого нужны: • Заголовочный файл .h • Библиотека .so | .a • Или исходники библиотеки на C/C++ • Обертка на Cython
  5. Ускорение критичных участков Python кода Python def fib(n: int) ->

    int: if n == 0: return 0 if n == 1: return 1 return fib(n-1) + fib(n-2) fib(35) # 2.5 seconds
  6. Ускорение критичных участков Python кода Cython cpdef int fib(int n):

    if n == 0: return 0 if n == 1: return 1 return fib(n-1) + fib(n-2) fib(35) # 0.02 seconds
  7. Сборка Cython расширения. setup.py from setuptools import setup, Extension from

    Cython.Build import cythonize setup(language_level='3', ext_modules=cythonize(Extension( 'fib', sources=['fib.pyx'], ))) $ python setup.py build_ext --inplace
  8. Python int != Cython int Python int – unlimited Cython

    int, фактически C int – 2^31-1 на типовых платформах
  9. Альтернативы • ctypes – A foreign function library for Python

    • Nuitka – Nuitka is a source-to-source compiler which compiles Python code to C source code • CFFI – C Foreign Function Interface for Python • Numba – Numba is an open-source JIT compiler that translates a subset of Python and NumPy into fast machine code using LLVM
  10. HASP (Hardware Against Software Piracy) — мультиплатформенная аппаратно- программная система

    защиты программ и данных от незаконного использования и несанкционированного распространения
  11. Почему именно HASP? • Аппаратная защита • Подсчет ресурсов. Лимиты

    • Защита от взлома бинарников • Средства для управления лицензиями
  12. Sentinel HASP Задачи: • Шифруем данные (модели) на этапе сборки

    • Встраиваем в код расшифровку данных • Защищаем бинари от взлома
  13. Шифрование данных Средства Sentinel SDK позволяют шифровать данные которые можно

    расшифровать только при наличии действующей лицензии
  14. Встраиваем в код расшифровку данных. 1 Создаем библиотеку на C++

    с функцией расшифровки данных Вставляем в нужные Python файлы следующий кусок на Cython cdef extern from "sentinel.h": vector[unsigned char] sentinel_decrypt(const string& path) except +
  15. Встраиваем в код расшифровку данных. 2 def sentinel_open(path: Union[str, bytes,

    os.PathLike], mode: str, **kwargs) Создаем класс для чтения данных с расшифровкой на замену io.FileIO class SentinelFileIo Переименовываем .py → .pyx Полный исходник можно посмотреть в статье на Хабр
  16. Сборка • Генерируем с помощью Cython код на C++ •

    Компилируем и линкуем с нативной библиотекой
  17. Защита В состав Sentinel SDK входит утилита Envelope: • Шифрует

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

    зашифрованными моделями • Защитили бинарные исполняемые файлы • Привязались к железу