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
Wklej zaciemnione źródło
Zminifikowane, spakowane albo wygenerowane przez narzędzia w stylu `javascript-obfuscator.io`.
-
2
Pozwól parserowi je przejść
Tablice ciągów są dekodowane, sekwencje liczbowe wyliczane, a martwe gałęzie kodu przycinane.
-
3
Zastosuj zmianę nazw
Jednoliterowe zmienne `a`/`b`/`c` dostają nazwy `var1`, `var2` itd. czytelne zastępniki, niekoniecznie znaczące nazwy.
-
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
userEmailzostanie zmienione naa, ż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
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
- 자바스크립트 디오프스버커 [KO]
- Déobfuscateur JavaScript [FR]
- Desofuscador de JavaScript [PT]
- Trình giải mã mã JavaScript (JavaScript Deobfuscator) [VI]
- JavaScriptデオブファスカータ [JA]
- JavaScript-deobfuscator [NL]
- أداة إزالة التشفير في لغة جافا سكريبت (JavaScript Deobfuscator) [AR]
- JavaScript-Deobfuscator [DE]
- Deobfuscator JavaScript [ID]
- เครื่องถอดรหัส JavaScript [TH]
- Desofuscador de JavaScript [ES]
- JavaScript-deobfuscator [SV]
- JavaScript Deobfuscator [EN]
- Deobfuscator JavaScript [IT]
- JavaScript-деобфускатор [RU]
- JavaScript Deobfuscator [TR]
- JavaScript反混淆工具 [ZH]