Chroń swoje skrypty w Pythonie przed inżynierią wsteczną dzięki Pyarmor

Photo of author

By maciekx

Python, znany ze swojej czytelności i szerokiego zastosowania, stwarza pewne ryzyko. O ile łatwość jego odczytu sprzyja współpracy, o tyle otwiera furtkę dla nieuprawnionego dostępu i nadużyć. Konkurenci lub osoby o złych zamiarach mogą skopiować Twoje algorytmy i unikalne rozwiązania bez odpowiednich zabezpieczeń. Może to negatywnie wpłynąć na integralność Twojego oprogramowania i zaufanie użytkowników.

MUO WIDEO DNIA

PRZEWIŃ, ABY DOWIEDZIEĆ SIĘ WIĘCEJ

Wprowadzenie solidnych mechanizmów ochronnych, takich jak zaciemnianie kodu i weryfikacja licencji, wzmacnia oprogramowanie przeciwko potencjalnym zagrożeniom. Ochrona skryptów Pythona to nie tylko praktyka, ale kluczowa strategia zapewniająca poufność Twoich innowacji oraz utrzymanie zaufania użytkowników w dynamicznym środowisku cyfrowym.

Zrozumienie Pyarmora

Pyarmor to narzędzie w formie biblioteki działającej z poziomu wiersza poleceń. Jego zadaniem jest zabezpieczanie i zaciemnianie skryptów oraz pakietów Pythona. Przekształca on oryginalny kod w postać znacznie trudniejszą do zrozumienia, przy jednoczesnym zachowaniu jego pełnej funkcjonalności. Proces zaciemniania polega na zmianie nazw zmiennych, funkcji i klas na nazwy pozbawione znaczenia. Usuwane są także komentarze i restrukturyzowany jest kod. Wszystko to sprawia, że analiza wsteczna, modyfikowanie lub kopiowanie kodu staje się bardzo utrudnione.

Pyarmor skutecznie zabezpiecza zarówno pojedyncze skrypty Pythona, jak i całe pakiety. Pozwala także na włączenie weryfikacji licencji do Twojego kodu.

Instalacja biblioteki Pyarmor

Pyarmor jest dostępny w Python Package Index (PyPI). Aby go zainstalować, użyj pip, wpisując w konsoli następujące polecenie:

 pip install pyarmor

Nie musisz instalować Pyarmora w tym samym katalogu, gdzie znajduje się Twój projekt. Możesz zainstalować go w dowolnej lokalizacji na Twoim komputerze i z jego pomocą zabezpieczać skrypty Pythona z różnych katalogów.

Jednakże, jeśli chcesz uruchamiać zabezpieczone skrypty bez konieczności instalowania Pyarmora na maszynie docelowej, musisz umieścić go w tym samym katalogu, w którym znajduje się Twój projekt. Wynika to z faktu, że zabezpieczone skrypty będą odwoływać się do środowiska uruchomieniowego Pyarmora, które musi być dostępne, aby skrypty mogły być poprawnie wykonywane.

Ochrona pojedynczych skryptów Pythona

Zabezpieczenie pojedynczego skryptu przy użyciu Pyarmora jest bardzo proste. Jako przykład posłuży nam skrypt dodający dwie liczby:

 def add_numbers(num1, num2):
   result = num1 + num2
   print("Suma liczb {} i {} wynosi: {}".format(num1, num2, result))


num1 = float(input("Wprowadź pierwszą liczbę: "))
num2 = float(input("Wprowadź drugą liczbę: "))
add_numbers(num1, num2)

Przejdź za pomocą wiersza poleceń do folderu, w którym zainstalowałeś Pyarmora. Następnie uruchom poniższe polecenie, aby zakodować i zaciemnić skrypt. Zamiast main.py wstaw nazwę swojego skryptu.

 pyarmor gen --output dist main.py

Po wykonaniu tego polecenia, Pyarmor utworzy nowy folder o nazwie dist, w którym znajdziesz swój zabezpieczony skrypt.

Otwórz zabezpieczony skrypt, aby zobaczyć jego zawartość.

Powyższy zrzut ekranu prezentuje rezultat zaciemnienia prostego skryptu dodawania przy użyciu Pyarmora. Na pierwszy rzut oka nie sposób odgadnąć, jakie operacje wykonuje ten skrypt.

Aby uruchomić zabezpieczony skrypt, otwórz terminal lub wiersz poleceń i przejdź do lokalizacji, gdzie znajduje się katalog dist. Następnie wprowadź poniższe polecenie, aby uruchomić skrypt:

 python dist/main.py 

Pamiętaj, aby zamiast main.py wpisać nazwę swojego skryptu. Skrypt powinien działać tak samo, jak przed zaciemnieniem. Przetestuj go dokładnie, aby upewnić się, że wszystkie funkcje działają zgodnie z oczekiwaniami.

Ochrona całych pakietów Pythona

Pakiety mogą składać się z wielu modułów, nawet setek, w zależności od ich złożoności. Zabezpieczanie każdego modułu oddzielnie może być uciążliwe. Na szczęście Pyarmor umożliwia zabezpieczenie całego pakietu bez potrzeby ręcznego wskazywania każdego modułu.

Załóżmy, że masz prosty pakiet Pythona o nazwie sample_package, który ma następującą strukturę:

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

Możesz oczywiście utworzyć dowolną liczbę modułów.

Aby zakodować i zaciemnić pakiet, otwórz wiersz poleceń lub terminal i przejdź do katalogu, w którym znajduje się pakiet. Następnie wprowadź następujące polecenie:

 pyarmor gen -O dist -r -i sample_package 

Zastąp sample_package nazwą swojego pakietu. To polecenie zakoduje i zaciemni cały folder z pakietem, a zabezpieczone pliki zostaną zapisane w katalogu dist. Możesz używać tak zabezpieczonego pakietu, tak jak każdego innego pakietu Pythona.

Na przykład, aby użyć pakietu z powyższego przykładu, utwórz nowy skrypt w folderze dist:

 from my_package import module1, module2

module1.say_hello()
module2.do_something()

Po uruchomieniu tego kodu, pakiet powinien działać identycznie, jak przed zabezpieczeniem.

Kontrolowanie dostępu do skryptu

Może pojawić się potrzeba ograniczenia czasu, w którym użytkownik może korzystać z Twojego skryptu. Na przykład w okresie próbnym.

Aby ograniczyć czas działania skryptu, użyj poniższego polecenia podczas jego zaciemniania:

 pyarmor gen -O dist -e 30 main.py 

Zamiast 30 wpisz liczbę dni, przez które skrypt ma pozostać aktywny. Możesz także wprowadzić konkretną datę. Po upływie tego terminu skrypt wygaśnie.

Możesz przetestować tę funkcję, ustawiając datę z przeszłości. Spowoduje to, że próba uruchomienia skryptu zakończy się błędem. Użyj poniższego polecenia, aby zaciemnić skrypt z datą wygaśnięcia:

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

Następnie spróbuj uruchomić zabezpieczony skrypt.

Błąd informuje, że klucz licencyjny stracił ważność, co uniemożliwia uruchomienie skryptu.

Równowaga między bezpieczeństwem a wydajnością

Mimo że Pyarmor oferuje solidne mechanizmy zaciemniania, które zwiększają bezpieczeństwo Twojego kodu, istotne jest, aby zachować równowagę pomiędzy środkami bezpieczeństwa a wydajnością oprogramowania. Możesz to osiągnąć poprzez:

  • Analizę potrzeby zaciemniania: jeśli Twój kod zawiera chronione algorytmy, poufne dane lub unikalne rozwiązania biznesowe, zaciemnianie jest bardzo korzystne. Jednak w przypadku skryptów typu open source, gdzie ochrona własności intelektualnej nie jest kluczowa, warto rozważyć kompromis na rzecz wydajności.
  • Ocenę wpływu na wydajność: zaciemnianie wprowadza dodatkowe obciążenie w czasie wykonywania kodu ze względu na dodatkowe operacje i transformacje. Ten wpływ jest pomijalny w przypadku małych skryptów, ale staje się bardziej istotny w przypadku większych projektów. Z tego względu należy dokładnie ocenić wpływ zaciemniania na wydajność i przeprowadzić testy, aby upewnić się, że oprogramowanie pozostaje responsywne i wydajne.
  • Regularne aktualizacje i konserwację: Regularnie aktualizuj zaciemniony kod, licencje oraz mechanizmy bezpieczeństwa, aby wyprzedzać potencjalne luki. Musisz przy tym zachować równowagę, aby minimalizować utrudnienia dla użytkowników.

Czy ktoś może złamać zaciemniony kod?

Łamanie oprogramowania to proces usuwania mechanizmów ochrony przed kopiowaniem lub licencjonowaniem aplikacji, który pozwala uzyskać nieuprawniony dostęp do wszystkich jej funkcji bez ponoszenia opłat. Należy pamiętać, że zaciemnianie oprogramowania nie stanowi całkowitej ochrony przed hakerami.

Dysponując wystarczającą determinacją i zasobami, zaciemniony kod może zostać złamany. Z tego powodu powinieneś dążyć do regularnego aktualizowania i konserwacji, w celu załatania wszelkich potencjalnych luk w zabezpieczeniach.


newsblog.pl