Obfuskacja kodu to celowe przekształcenie kodu źródłowego tak, by był bardzo trudny do przeczytania i zrozumienia przez człowieka, ale nadal działał tak samo jak oryginał. Stosuje się ją, by utrudnić kopiowanie rozwiązań, analizę logiki aplikacji lub obejście zabezpieczeń licencyjnych. Najczęściej dotyczy kodu, który trafia do użytkownika w całości, czyli JavaScriptu w przeglądarce oraz aplikacji mobilnych i desktopowych.
Najczęstsze techniki obfuskacji
-
zmiana nazw zmiennych i funkcji na krótkie lub przypadkowe ciągi, np.
_0x3fa2, - kodowanie tekstów, czyli ukrycie napisów, adresów i kluczy w zakodowanej tablicy odczytywanej w trakcie działania,
- spłaszczanie przepływu sterowania, które zamienia czytelne warunki i pętle w jedną dużą instrukcję wyboru,
- wstawianie martwego kodu, który nigdy się nie wykonuje, ale utrudnia analizę,
- zabezpieczenia przed debugowaniem, które zmieniają działanie kodu po otwarciu narzędzi deweloperskich lub po jego sformatowaniu.
W aplikacjach na Androida podobną rolę pełni narzędzie R8, a w PHP stosuje się kodery, takie jak ionCube, które zamieniają kod w kod bajtowy.
Obfuskacja, minifikacja i szyfrowanie
| Technika | Cel | Czy da się odwrócić? |
|---|---|---|
| Minifikacja | mniejszy rozmiar pliku i szybsze ładowanie | formatowanie łatwo przywrócić, nazwy lokalne zostają skrócone |
| Obfuskacja | utrudnienie zrozumienia kodu | częściowo, kosztem czasu i pracy |
| Szyfrowanie | ukrycie danych przed osobami bez klucza | tylko z kluczem |
Kodu, który ma się wykonać w przeglądarce, nie da się zaszyfrować, bo przeglądarka musi go odczytać. Dlatego obfuskacja nigdy nie daje pełnej ochrony, tylko podnosi koszt analizy.
Czy obfuskacja jest zabezpieczeniem?
Obfuskacja nie chroni danych ani kluczy. Wszystko, co trafia do przeglądarki, łącznie z kluczami API i adresami usług, może zostać odczytane, choć z większym wysiłkiem. Prawdziwe zabezpieczenia, takie jak weryfikacja uprawnień czy limity zapytań, muszą działać na serwerze.
Obfuskacja ma też koszty: zwiększa rozmiar plików, spowalnia wykonywanie kodu i utrudnia analizę błędów zgłaszanych przez użytkowników. Ciekawostką jest to, że te same techniki stosują twórcy złośliwego oprogramowania, by ukryć działanie skryptów przed programami antywirusowymi.
Gdzie obfuskacja ma sens?
Uzasadnione zastosowania to płatne biblioteki i wtyczki sprzedawane z kodem, gry przeglądarkowe, mechanizmy wykrywania botów oraz fragmenty logiki, których skopiowanie dałoby konkurencji realną przewagę. Przy zwykłej stronie firmowej wystarcza minifikacja. Narzędzia, ustawienia i wpływ na wydajność opisuje poradnik o tym, jak zaciemnić kod JavaScript.
Zobacz w praktyce
Jak zaciemnić kod JavaScript i kiedy to ma sens
Jak bezpiecznie przechowywać hasła użytkowników w bazie danych
Jak naprawić błędy certyfikatu SSL i mixed content