Понадобятся файлы
скрипт настройки окружения cython и автоматической компиляции кода | |
пример исходного кода на Python, в котором проводятся вычисления и вызываются функции Guardant | |
| run_cython.pyx | пример исходного кода с измененными прототипами функций для Cython. По сути тот же код на Python, но с явно указанными типами |
| simple_test.py | пример простого приложения, которое вызывает защищенные функции/функции API |
Защита Python-приложения с использованием Cython в Debian 11
Шаг 1. Установить cython и нужные ему пакеты
sudo apt-get install -y build-essential python3-dev sudo apt install -y python3-pip sudo apt install -y cython3 pip3 install setuptools pip3 install requests
Если при использовании pip возникает ошибка вида "error: externally-managed-environment" дополнительно выполнить команды для создания окружения.
sudo apt install -y python3-venv python3 -m venv myenv source myenv/bin/activate
И затем повторить.
pip3 install setuptools pip3 install requests
Шаг 2. Установить Guardant SLK из tar.gz архива
tar -xf ./GuardantSLK-.tar.gz
Шаг 3. Создать рабочую папку
mkdir mydirname
Шаг 4. Поместить в рабочую папку файлы
setup.py
run_cython.pyx
run_python.py
simple_test.py
grdlic_python.py <--- лежит по пути .../Software Licensing Kit/api/wrappers/python
libgrdlic.a <--- лежит по пути .../Software Licensing Kit/api/lib/linux/x86_64
libgrdlic.so <--- лежит по пути .../Software Licensing Kit/api/lib/linux/x86_64
Шаг 5. Активировать DL или подключить аппаратный ключ Sign
Не важно, какие продукты и компоненты записаны в ключ, для логина будет выбран последний имеющийся компонент.
Шаг 6. Сгенерировать код на С и скомпилировать расширение
Для генерации нужно выполнить команду:
python3 setup.py build_ext --inplaceВ одной директории с исходными файлами, будут созданы новые:
run_cython.c
run_cython.cpython-39-x86_64-linux-gnu.so
Можно использовать run_cython.cpython-39-x86_64-linux-gnu.so для выбора функций для защиты, пропустить шаги 7-9, а на шаге 10 не указывать .map файл.
Однако для больших проектов рекомендуется .map файл указывать. Для его получения в нужном формате надо выполнить шаги 7-9.
Шаг 10. Подготовить проект защиты
Открыть Protection Studio, авторизоваться, выбрать файл "run_cython.so" из шага выше для защиты и указать компонент (любой из имеющихся в ключе).
При наличии выбрать .map файл, созданный на шаге 8.
В окне выбора функций для защиты, ввести в строку поиска "factorial" и выбрать "__pyx_pw_10run_cython_1factorial"
Шаг 11. Запустить защиту
Дождаться завершения процесса защиты.
Шаг 12. Скопировать защищенный run_cython.so и libprotectstorage64.so в рабочую папку
Шаг 13. Очистить от лишних файлов директорию с защищенными
Удалить, переименовать или переместить в другую папку файлы (чтобы убедиться в работе защищенного run_cython.so):
run_cython.c
run_cython.pyx
*run_cython.cpython-39-x86_64-linux-gnu.so (если run_cython.so был скомпилирован вручную для получения .map файла)
Шаг 14. Запустить simple_test.py
python3 simple_test.pyЗапустится простой тест, который посчитает факториал от пяти и выполнит вызовы функций API.
Подробнее процесс работы с Cython описан в его документации:
https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html