Решение https://ru.wikipedia.org/wiki/Cython “Cython — язык программирования, упрощающий написание модулей С/C++ кода для Python. Кроме стандартного синтаксиса Python, поддерживаются: ● прямой вызов функций и методов C/C++ из кода на Cython; ● строгая типизация переменных, классов, атрибутов классов. Код Cython преобразуется в C/C++ код для последующей компиляции и впоследствии может использоваться как расширение стандартного Python или как независимое приложение со встроенной библиотекой выполнения Cython.”
Ситонизация Любой (почти) код на Python можно транслировать в C/C++, собрать из него бинари и поставлять их вместо скриптов. Как именно работает трансляция? Cython гененирует код на C/C++ на основе кода на Python используя его C- API
Интеграция нативных библиотек в Python Cython позволяет довольно легко интегрировать библиотеку на нативном языке в Python. Для этого нужны: ● Заголовочный файл .h ● Библиотека .so | .a ● Или исходники библиотеки на C/C++ ● Обертка на Cython
Альтернативы ● 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
HASP (Hardware Against Software Piracy) — мультиплатформенная аппаратно- программная система защиты программ и данных от незаконного использования и несанкционированного распространения
Встраиваем в код расшифровку данных. 1 Создаем библиотеку на C++ с функцией расшифровки данных Вставляем в нужные Python файлы следующий кусок на Cython cdef extern from "sentinel.h": vector[unsigned char] sentinel_decrypt(const string& path) except +
Встраиваем в код расшифровку данных. 2 def sentinel_open(path: Union[str, bytes, os.PathLike], mode: str, **kwargs) Создаем класс для чтения данных с расшифровкой на замену io.FileIO class SentinelFileIo Переименовываем .py → .pyx Полный исходник можно посмотреть в статье на Хабр
Защита В состав Sentinel SDK входит утилита Envelope: ● Шифрует ресурсы исполняемых файлов ● Предотвращает отладку с помощью дебагера ● Привязывает исполняемый файл к железу через лицензию