Deobfuskator JavaScriptu

Wklej kawałek zaciemnionego JavaScriptu, ciągi kodowane szesnastkowo, jednoliterowe nazwy zmiennych, pętlę dekodera na górze, a narzędzie odkrywa kolejne warstwy: odkodowuje ciągi, wstawia tablicę wyszukiwania w miejscu, zmienia nazwy zmiennych na czytelne zastępniki, spłaszcza trywialne otoczki i upiększa wynik. Przydatne do analizy podejrzanych fragmentów wyciągniętych ze strony lub z wklejonego linku pastebin.

Jak deobfuskować JavaScript

  1. 1

    Wklej zaciemnione źródło

    Zminifikowane, spakowane albo wygenerowane przez narzędzia w stylu `javascript-obfuscator.io`.

  2. 2

    Pozwól parserowi je przejść

    Tablice ciągów są dekodowane, sekwencje liczbowe wyliczane, a martwe gałęzie kodu przycinane.

  3. 3

    Zastosuj zmianę nazw

    Jednoliterowe zmienne `a`/`b`/`c` dostają nazwy `var1`, `var2` itd. czytelne zastępniki, niekoniecznie znaczące nazwy.

  4. 4

    Upiększ

    Dodaj wcięcia i nowe linie oraz wygeneruj kod, który faktycznie da się przeczytać i zrozumieć.

Techniki, które deobfuskator odwraca

Zaciemnienie Odwrócenie
Literały ciągów z ucieczkami hex Dekodowanie \x48\x69 z powrotem do "Hi"
Identyfikatory z ucieczkami Unicode \u006E\u0061\u006D\u0065 -> name
Tablica ciągów + funkcja dekodera Wstawienie tablicy, wywołanie dekodera w czasie parsowania
Składanie stałych liczbowych 0x1F3 + 5 -> 504
Otoczki eval(...) Podniesienie wewnętrznego kodu na najwyższy poziom
Spłaszczenie przepływu (maszyna stanów) Wykrycie switch-case, rekonstrukcja przepływu
Martwy kod / bezużyteczne ternary Usunięcie gałęzi, które nigdy się nie wykonują
Nazwy w stylu _0x1a2b3c() Zamiana na rosnące var1, var2

Ograniczenia: czego narzędzie nie robi

  • Odzyskanie oryginalnych nazw zmiennych. Gdy userEmail zostanie zmienione na a, żadne narzędzie tego nie odgadnie. Otrzymujesz czytelną strukturę, a nie oryginalną semantykę.
  • Rozpakowanie własnych wirtualizatorów. Ciężkie komercyjne obfuskatory (JScrambler, korporacyjne wersje Obfuscator.io) wprowadzają własną maszynę wirtualną, która interpretuje bajtkod. Pokonanie ich wymaga ręcznej inżynierii wstecznej.
  • Uruchamianie dowolnego kodu. Deobfuskator statycznie wylicza czyste wyrażenia. Nie pobiera zdalnych zasobów, nie tworzy elementów DOM ani nie rozmawia z siecią.

Typowe zastosowania

  • Badania bezpieczeństwa: rozkładanie na części podejrzanego skryptu, który przyszedł w e-mailu albo był serwowany przez przejęty CDN.
  • Archeologia kodu: odzyskiwanie starszego kodu, gdzie jedynym ocalałym artefaktem jest zminifikowany bundle.
  • Nauka: zrozumienie, co właściwie robi pod spodem zaciemnienie na poziomie poradnika.

Bezpieczeństwo i etyka

Nigdy nie uruchamiaj niezaufanego JavaScriptu w karcie przeglądarki zalogowanej do czegokolwiek ważnego, kod może odczytać ciasteczka, wywołać wewnętrzne API i wykraść stan. Sam deobfuskator operuje na źródle jako tekście; nie wykonuje kodu, który wklejasz.

Deobfuskuj tylko kod, który masz prawo analizować. Inżynieria wsteczna licencjonowanego oprogramowania może być ograniczona w Twojej jurysdykcji.

Najczęściej zadawane pytania

Nie. Gdy obfuskator zmieni nazwę userEmail na _0x1a2b3c, oryginalna nazwa jest stracona. Deobfuskator daje Ci czytelne zastępniki (var1, var2) i poprawną strukturę, ale nie oryginalne nazwy semantyczne.

Nie. Parsuje kod jako AST i stosuje statyczne transformacje. Czyste wyrażenia (jak 0x1F3 + 5) są składane, ale nic nie dotyka sieci, ciasteczek ani DOM.

Tak, ale wyjście bundlera jest raczej zminifikowane niż celowo zaciemnione, więc wynikiem jest po prostu upiększony kod z przywróconymi otoczkami modułów. Mapy źródeł, jeśli są dostępne osobno, dają znacznie lepsze nazwy.

Ciężkie narzędzia komercyjne (korporacyjny JScrambler, własne maszyny wirtualne) wprowadzają interpreter bajtkodu, którego analiza statyczna nie rozwinie. Narzędzie zdejmie warstwę powierzchniową, ale rdzeń logiki pozostaje nieprzejrzysty bez ręcznego odwracania.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach