Захистіть свої сценарії Python від зворотного проектування за допомогою Pyarmor

Мова Python відома своєю легкістю читання та широким спектром застосувань. Однак, ця особливість, що сприяє співпраці, водночас створює ризик несанкціонованого доступу та зловживань. Конкуренти або зловмисники можуть відтворювати ваші алгоритми та унікальну логіку, якщо не вживати належних заходів безпеки. Це може підірвати цілісність вашого програмного забезпечення та довіру користувачів.

МУО ВІДЕО ДНЯ

ПРОКРУТІТЬ, ЩОБ ПРОДОВЖИТИ

Застосування надійних заходів безпеки, таких як обфускація коду та перевірка ліцензій, захищає ваше програмне забезпечення від потенційних загроз. Захист сценаріїв Python — це не лише важлива практика, а й ключова стратегія для збереження конфіденційності ваших інновацій та зміцнення довіри користувачів у цифровому світі.

Знайомство з Pyarmor

Pyarmor – це інструмент командного рядка, який допомагає захищати та обфускувати сценарії та пакети Python. Він трансформує вихідний код Python у форму, яка є складнішою для розуміння, зберігаючи при цьому його функціональність. Процес обфускації включає перейменування змінних, функцій та класів на невиразні імена, видалення коментарів та зміну структури коду. Це ускладнює зворотне проєктування, фальсифікацію або копіювання вашого коду.

Pyarmor здатний захистити як окремі сценарії Python, так і цілі пакети, а також додати перевірку ліцензій до вашого коду.

Інсталяція бібліотеки Pyarmor

Pyarmor є доступним у списку пакетів Python (PyPI). Для його встановлення скористайтеся pip, виконавши наступну команду:

 pip install pyarmor

Встановлювати Pyarmor у тому ж каталозі, де знаходиться ваш проєкт, не є обов’язковим. Ви можете встановити його в будь-якій частині комп’ютера і захищати сценарії Python з будь-якої папки.

Однак, якщо ви хочете запускати захищені сценарії без встановлення Pyarmor на цільовому комп’ютері, вам потрібно встановити його в тій же папці, де розташований ваш проєкт. Це пов’язано з тим, що захищені сценарії посилаються на середовище виконання Pyarmor, яке повинно бути доступним для їх запуску.

Захист окремих скриптів Python

Захист окремих сценаріїв за допомогою Pyarmor є досить простим. Розглянемо, наприклад, сценарій, що додає два числа.

 def add_numbers(num1, num2):
   result = num1 + num2
   print("The sum of {} and {} is: {}".format(num1, num2, result))


num1 = float(input("Enter the first number: "))
num2 = float(input("Enter the second number: "))
add_numbers(num1, num2)

За допомогою командного рядка перейдіть до каталогу, де встановлено Pyarmor. Потім виконайте команду нижче, щоб зашифрувати та обфускувати свій сценарій. Замініть `main.py` на назву вашого сценарію.

 pyarmor gen --output dist main.py

Після виконання цієї команди Pyarmor створить нову папку під назвою `dist`, де буде розміщено захищений сценарій.

Відкрийте захищений сценарій, щоб побачити його вміст.

На зображенні вище показано результат обфускації та шифрування простого скрипта додавання за допомогою Pyarmor. Тепер неможливо зрозуміти, що робить цей сценарій, просто переглянувши його код.

Щоб запустити захищений сценарій, відкрийте термінал або командний рядок і перейдіть до папки, де знаходиться каталог `dist`. Використовуйте таку команду для запуску:

 python dist/main.py 

Замініть `main.py` на назву вашого сценарію. Сценарій повинен працювати так само, як і до обфускації. Перевірте його роботу, щоб переконатися, що все функціонує правильно.

Захист цілих пакетів Python

Пакети можуть містити кілька або сотні модулів залежно від їхньої мети. Захист кожного модуля окремо може бути виснажливим. На щастя, Pyarmor має можливість захистити цілий пакет без необхідності окремого вказування кожного модуля.

Припустимо, у вас є простий пакет Python під назвою `sample_package` з такою структурою:

 sample_package/
|-- __init__.py
|-- module1.py
|-- module2.py

Ви можете створити стільки модулів, скільки потрібно.

Для шифрування та маскування пакета, відкрийте термінал або командний рядок і перейдіть до каталогу, де знаходиться ваш пакет. Потім виконайте команду:

 pyarmor gen -O dist -r -i sample_package 

Замініть `sample_package` на назву вашого пакета. Ця команда зашифрує та маскує ваш каталог пакета та збереже захищений вихід у папку `dist`. Використовуйте захищений пакет так само, як і будь-який інший пакет Python.

Наприклад, щоб скористатися прикладом пакету, створіть новий сценарій у каталозі `dist`:

 from my_package import module1, module2

module1.say_hello()
module2.do_something()

Після запуску цього коду, пакет повинен функціонувати так само, як і до його захисту.

Контроль доступу до вашого сценарію

Ви можете обмежити час виконання сценарію користувачем. Наприклад, на час пробного періоду.

Щоб обмежити час виконання скрипта, використайте наступну команду під час обфускації:

 pyarmor gen -O dist -e 30 main.py 

Замініть `30` на кількість днів, протягом яких сценарій повинен бути активним. Також можна вказати точну дату. Після закінчення терміну, сценарій стане неактивним.

Ви можете перевірити цю функцію, встановивши минулу дату. Це повинно викликати помилку при запуску сценарію. Використайте команду нижче, щоб обфускувати сценарій із застарілою датою:

 pyarmor gen -O dist -e 2022-01-01 main.py

Потім запустіть захищений сценарій.

Помилка показує, що термін дії ліцензійного ключа закінчився, і сценарій не може бути запущений.

Баланс між безпекою та ефективністю

Хоча Pyarmor забезпечує надійні механізми обфускації для підвищення безпеки вашого коду, важливо збалансувати заходи безпеки з підтримкою продуктивності та ефективності вашого програмного забезпечення. Для цього варто:

  • Оцінити необхідність обфускації: якщо ваше програмне забезпечення включає власні алгоритми, конфіденційні дані або унікальну бізнес-логіку, обфускація є дуже корисною. Однак, для сценаріїв з відкритим вихідним кодом та мінімальними питаннями інтелектуальної власності, компроміс між безпекою та продуктивністю варто спрямувати на користь ефективності.
  • Оцінити вплив на продуктивність: обфускація створює додаткові витрати на час виконання через додаткові операції та перетворення, застосовані до коду. Цей вплив може бути незначним для невеликих скриптів, але стає більш відчутним для великих проєктів. Слід ретельно оцінити наслідки обфускації для продуктивності та провести тестування, щоб переконатися, що ваше програмне забезпечення залишається швидким і ефективним.
  • Проводити регулярні оновлення та обслуговування: Регулярно оновлюйте свій обфускований код, ліцензії та механізми безпеки, щоб випереджати потенційні вразливості. Важливо збалансувати це з необхідністю мінімізувати перерви в роботі для ваших користувачів.

Чи можна зламати обфускований код?

Злом програмного забезпечення – це дія видалення захисту від копіювання або механізмів ліцензування програми для отримання несанкціонованого доступу до її повного функціоналу без оплати. Важливо пам’ятати, що обфускація вашого програмного забезпечення не є повним захистом від зломщиків.

За наявності достатньої наполегливості та ресурсів, обфускований код може бути зламано. Тому важливо проводити регулярні оновлення та технічне обслуговування, щоб виправити будь-які можливі вразливості.