You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Понадобятся файлы


setup.py

скрипт настройки окружения cython и автоматической компиляции кода 

run_python.py

пример исходного кода на 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.

Шаг 7.

При компиляции таким способом не создается .map файл. Чтобы его получить, необходимо установить английский язык для генерации map-файла (это требуется для корректного парсинга протектором)

export LANG=en_US.UTF-8

Шаг 8. Посмотреть версию python3, используемую в системе

python3 --version

В консоли будет указана версия, которую надо использовать в следующем шаге, например: Python 3.11.2 .

Шаг 9. Скомпилировать код из run_cython.c и создать .map файл

gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing \
     -I/usr/include/python3.11 -o run_cython.so run_cython.c -Xlinker -Map=output.map 

Компилятор создаст файлы: 
run_cython.so
output.map 

Шаг 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






  • No labels