Deobfuskator JavaScriptu

Odszyfruj

Wklej fragment zaciemnionego JavaScriptu (ciągi z szesnastkowymi znakami ucieczki, nazwy _0x, tablica ciągów na początku, opakowanie eval lub packer), a narzędzie zdejmie kolejne warstwy: rozpakuje opakowanie, zdekoduje ciągi, podstawi odwołania do tablicy, obliczy stałe wyrażenia arytmetyczne, zmieni identyfikatory _0x na czytelne nazwy zastępcze i sformatuje wynik. Przydaje się do analizy podejrzanych fragmentów pobranych ze strony lub z 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ść

    Opakowania `eval` i packer są rozpakowywane, ciągi ze znakami ucieczki dekodowane, proste tablice ciągów podstawiane, a stałe wyrażenia obliczane. Formatowanie nigdy nie psuje ciągów, wyrażeń regularnych ani komentarzy.

  3. 3

    Zastosuj zmianę nazw

    Nazwy w stylu obfuskatorów, takie jak `_0x1a2b3c`, zmieniają się na `var1`, `var2` itd.: czytelne nazwy zastępcze, a nie oryginalne. Odznacz opcję, aby je zachować.

  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 czytana po indeksie Podstawić każde odwołanie arr[1] (tylko proste tablice, bez funkcji dekodujących)
Składanie stałych liczbowych 0x1F3 + 5 -> 504
Otoczki eval(...) Podniesienie wewnętrznego kodu na najwyższy poziom
Packer Deana Edwardsa eval(function(p,a,c,k,e,d)…) Odtworzyć słownik i rozpakować kod
Skróty !![], ![], !0 Zapisać je z powrotem jako true / false
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. Czyta kod jako tokeny (ciągi, wyrażenia regularne, komentarze) i statycznie przepisuje tekst. Czyste wyrażenia, takie jak 0x1F3 + 5, są obliczane, ale nic nie jest uruchamiane, więc nic nie dotyka sieci, plików cookie ani DOM. Spłaszczanie przepływu sterowania i funkcje dekodujące ciągi nie są odwracane.

Częściowo. Wynik bundlera jest zminifikowany, a nie celowo zaciemniony, więc dostajesz ten sam kod z nowymi wcięciami i czytelniejszy, z liczbami szesnastkowymi i skrótami typu !0 zapisanymi wprost; struktura modułów zostaje dokładnie taka, jaką zostawił bundler. Jednorazowo można wkleić do 500 000 znaków, więc duży bundle trzeba podzielić na części. Mapy źródeł (source maps), jeśli je masz, 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