Obfuskator JavaScript
Obfuskacja zwiększa koszt czytania kodu źródłowego JavaScript, nie całkowicie (żadna obfuskacja po stronie front-endu nie jest nie do złamania), ale na tyle, by zniechęcić do pobieżnego zaglądania i spowolnić automatyczne scrapowanie. To narzędzie stosuje kodowanie tablic ciągów, zaciemnianie identyfikatorów, spłaszczanie przepływu sterowania oraz opcjonalne wstrzykiwanie martwego kodu, przy czym każdą opcję można wybrać w zależności od tego, jak agresywnie chcesz działać.
Jak zaciemnić kod JavaScript
-
1
Wklej kod źródłowy
Dowolny poprawny kod JS. Jeśli opiera się on na konkretnych nazwach właściwości globalnych ze strony hosta, ustaw je jako zarezerwowane.
-
2
Wybierz techniki
Kodowanie ciągów (hex / base64), zaciemnianie identyfikatorów, spłaszczanie przepływu sterowania, wstrzykiwanie martwego kodu, samobroniący się wrapper.
-
3
Wybierz profil docelowy
Przeglądarka (bezpieczny dla ES5, bez API Node), Node.js (zezwala na `require`, `Buffer`) lub niski (głównie minifikacja).
-
4
Zaciemnij
Narzędzie zwraca przekształcony kod wraz z różnicą rozmiaru. Agresywne ustawienia mogą sprawić, że wynik będzie 3–5 razy większy od źródła.
Techniki i to, ile Cię kosztują
| Technika | Zwiększa wysiłek atakującego | Koszt w czasie działania | Koszt rozmiaru |
|---|---|---|---|
| Zmiana nazw zmiennych | Niski | Pomijalny | Mniejszy (efekt uboczny minifikacji) |
| Kodowanie tablic ciągów | Średni | Znikomy (jedno wyszukanie na ciąg) | +10–30% |
| Spłaszczanie przepływu sterowania | Wysoki | Mierzalny (~2–5%) | +50–150% |
| Wstrzykiwanie martwego kodu | Niski (pozorne bezpieczeństwo) | Mały | +20–50% |
| Samobroniący się wrapper | Średni | Jednorazowe sprawdzenie | +5–10% |
| Ochrona przed debugowaniem | Średni (wykrywa DevTools) | Jednorazowe sprawdzenie | +5% |
| VM / wirtualizacja (premium) | Bardzo wysoki | Duży (5–20x) | +300–500% |
Czego obfuskacja nie chroni
- Sekretów. Każdą stałą w kodzie źródłowym front-endu da się odczytać, mając dość czasu. Klucze API, sekrety uwierzytelniania, logika cenowa, nigdy nie polegaj na obfuskacji, by je ukryć. Przenieś je na serwer.
- Algorytmów o obserwowalnym wyniku. Jeśli przeglądarka potrafi to uruchomić, atakujący z debuggerem może obserwować każde wejście i wyjście. Obfuskacja to spowalnia; nie zatrzymuje.
- Automatycznego scrapowania na dużą skalę. Ochrona przed scrapowaniem opiera się na wykrywaniu zachowań (fingerprinting, limity częstości, CAPTCHA), a nie na obfuskacji kodu źródłowego.
Kiedy obfuskacja się opłaca
- Ochrona przed manipulacją we wbudowanych SDK (licencjonowanie, SDK reklamowe, klienty gier).
- Podniesienie kosztu łatwego skopiowania konkurencyjnej implementacji metodą kopiuj-wklej.
- Utrudnienie automatycznej klasyfikacji skryptów dla scraperów o szerokim zasięgu.
Kiedy przynosi odwrotny skutek
- Masz już bundler. Webpack + Terser w trybie produkcyjnym już minifikuje i zaciemnia zmienne lokalne. Dodanie drugiego przebiegu obfuskacji daje niewiele i rozdyma rozmiar bundla.
- Optymalizujesz pod First Paint / Core Web Vitals. Agresywna obfuskacja potraja bundel, co szkodzi FCP i LCP.
- Musisz debugować na produkcji. Ciężka obfuskacja czyni ślady stosu z Sentry niemal bezużytecznymi bez pasującej mapy źródeł, a wysłanie mapy źródeł niweczy obfuskację.
Częste błędy
- Traktowanie obfuskacji jako równoważnej szyfrowaniu. Nią nie jest, to tylko przeszkoda spowalniająca.
- Wysyłanie mapy źródeł razem z zaciemnionym bundlem na produkcję. To całkowicie neutralizuje obfuskację.
- Obfuskowanie bibliotek zewnętrznych wczytanych już z CDN. Ponosisz karę rozmiaru bez żadnej korzyści.
Najczęściej zadawane pytania
Nie. Obfuskacja to przeszkoda, a nie zamek. Zdeterminowany analityk z debuggerem odtworzy logikę. Podnosi koszt na tyle, by zniechęcić pobieżne przeglądanie i większość automatycznych scraperów, ale to nie jest zabezpieczenie.
Jeśli sięgasz po właściwości dynamicznie (obj["field_name"], Object.keys(obj)) lub polegasz na konkretnych nazwach funkcji/klas dla strony hosta, dodaj je do listy zarezerwowanych. Bez tego zmiana nazw właściwości może zepsuć integracje zewnętrzne.
Zachowaj oryginalny kod źródłowy. Obfuskator to przekształcenie jednokierunkowe; nie odtworzysz dokładnie oryginału z zaciemnionego wyniku, a jedynie czytelne przybliżenie.
Lekka obfuskacja dodaje ~10–30%. Spłaszczanie przepływu sterowania wraz z tablicami ciągów dodaje 50–150%. Najcięższe ustawienia mogą potroić rozmiar. Przed wysyłką sprawdź licznik rozmiaru wyniku.
Powiązane narzędzia
Generator konfiguracji webpack
Utwórz plik webpack.config.js dla webpacka 5 do czystego JavaScriptu, Reacta lub Vue: TypeScript, Babel, CSS lub Sass, obrazy, HtmlWebpackPlugin, serwer deweloperski i polecenie npm install.
Generator kolorów analogicznych
Twórz pięciokolorowe palety analogiczne z dowolnego koloru bazowego: klasyczną trójkę, dwie zewnętrzne barwy oraz wartości hex, RGB i HSL.
Generator fikcyjnych numerów telefonu
Generuj do 50 fikcyjnych numerów z oficjalnie zastrzeżonych zakresów w pięciu krajach.
Walidator XSD
Waliduj dokument XML wobec schematu XSD i zgłaszaj niezgodności elementów i typów z dokładnymi numerami wierszy.
Kod na obraz
Wklej kod, ustaw motyw, kolory, rozmiar czcionki, odstępy, nagłówek i numery wierszy, sprawdź podgląd canvas i pobierz PNG. Renderowanie zwykłego tekstu, bez podświetlania składni.
Dekoder Protocol Buffers
Dekoduj lokalnie bajty Protobuf z zapisu hex, Base64, Base64URL, tekstu lub pliku, analizuj pola i eksportuj prywatny raport.
Narzędzie jest dostępne w innych językach
- مُبهِّم JavaScript [AR]
- JavaScript難読化ツール [JA]
- JavaScript-Obfuscator [DE]
- JavaScript-obfuskerare [SV]
- Ofuscador de JavaScript [PT]
- JavaScript 난독화 도구 [KO]
- Obfuscateur JavaScript [FR]
- JavaScript-obfuscator [NL]
- เครื่องมือปิดบังโค้ด JavaScript [TH]
- Trình làm rối mã JavaScript [VI]
- Ofuscador de JavaScript [ES]
- Obfuscator JavaScript [ID]
- Обфускатор JavaScript [RU]
- JavaScript Kod Gizleme Aracı [TR]
- JavaScript混淆器 [ZH]
- JavaScript Obfuscator [EN]
- Offuscatore JavaScript [IT]