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
Tabela ASCII
Pełna tabela ASCII od 0 do 127 z zapisem dziesiętnym, szesnastkowym, ósemkowym i binarnym oraz notacją numerycznych odwołań HTML, w tym kodami sterującymi NUL, LF i DEL.
Referencja znaków HTML
Przeszukiwalna lista encji HTML wraz z ich kodami nazwanymi i liczbowymi oraz kopiowaniem jednym kliknięciem specjalnych znaków i symboli.
Skróty klawiaturowe
Wyszukuj udokumentowane skróty domyślne VS Code, Chrome i Bash z GNU Readline w macOS, Windows i Linux.
Generator EditorConfig
Wygeneruj plik .editorconfig z własnymi regułami stylu i rozmiaru wcięć, końca linii, kodowania i białych znaków, aby uzyskać spójne formatowanie w różnych IDE i edytorach.
Walidator adresów e-mail
Zweryfikuj adres e-mail: sprawdzenie składni RFC 5322, sprawdzenie rekordu MX w czasie rzeczywistym oraz szczegóły dotyczące części lokalnej, domeny i długości. Żadna wiadomość nie jest wysyłana.
Formatowanie HTML
Formatuj HTML lokalnie w przeglądarce, używając wcięć dwóch lub czterech spacji. HTML nie jest wysyłany ani walidowany.
Narzędzie jest dostępne w innych językach
- JavaScript 난독화 도구 [KO]
- Obfuscateur JavaScript [FR]
- Ofuscador de JavaScript [PT]
- Trình làm rối mã JavaScript [VI]
- JavaScript難読化ツール [JA]
- JavaScript-obfuscator [NL]
- مُبهِّم JavaScript [AR]
- JavaScript-Obfuscator [DE]
- Obfuscator JavaScript [ID]
- เครื่องมือปิดบังโค้ด JavaScript [TH]
- Ofuscador de JavaScript [ES]
- JavaScript-obfuskerare [SV]
- JavaScript Obfuscator [EN]
- Offuscatore JavaScript [IT]
- Обфускатор JavaScript [RU]
- JavaScript Kod Gizleme Aracı [TR]
- JavaScript混淆器 [ZH]