Deobfuskator JavaScriptu
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
Wklej zaciemnione źródło
Zminifikowane, spakowane albo wygenerowane przez narzędzia w stylu `javascript-obfuscator.io`.
-
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
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
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
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. 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
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
- Déobfuscateur JavaScript [FR]
- Deobfuscator JavaScript [ID]
- JavaScriptデオブファスカータ [JA]
- Trình giải mã mã JavaScript (JavaScript Deobfuscator) [VI]
- أداة إزالة التشفير في لغة جافا سكريبت (JavaScript Deobfuscator) [AR]
- Desofuscador de JavaScript [PT]
- JavaScript-deobfuscator [SV]
- เครื่องถอดรหัส JavaScript [TH]
- JavaScript-Deobfuscator [DE]
- 자바스크립트 디오프스버커 [KO]
- Desofuscador de JavaScript [ES]
- JavaScript-deobfuscator [NL]
- JavaScript Deobfuscator [EN]
- Deobfuscator JavaScript [IT]
- JavaScript-деобфускатор [RU]
- JavaScript Deobfuscator [TR]
- JavaScript反混淆工具 [ZH]