JavaScript deobfuscator online: zaciemniony kod w czytelnej postaci
JavaScript deobfuscator cofa sztuczki, które utrudniają czytanie kodu. Ten rozpakowuje proste tablice ciągów, wylicza wyrażenia stałe, dekoduje sekwencje hex i Unicode oraz zmienia nazwy w stylu _0x, a potem wypisuje wynik z wcięciem o szerokości 2 spacji. Robi to, czytając kod, a nie uruchamiając go: twój JavaScript nigdy nie jest wykonywany ani wysyłany, a część zaciemnienia, opisana niżej, zostaje bez zmian.
Jak użyć JavaScript deobfuscator online
- Wklej kod do pola Zaciemniony kod JavaScript. Dopóki nic nie wkleisz, pole pokazuje „Wklej tutaj zaciemniony kod JavaScript…”. Limit wynosi 5 000 000 znaków.
- Wybierz Opcje deobfuskacji, aby otworzyć cztery pola wyboru, domyślnie wszystkie włączone: Rozpakuj tablice ciągów, Oblicz stałe, Zdekoduj sekwencje hex i Unicode oraz Zmień nazwy zmiennych hex. Odznacz każdy krok, którego nie chcesz.
- Naciśnij Deobfuskuj. Ekran Kod po deobfuskacji pokazuje wynik jako podświetlony kod tylko do odczytu.
- Przeczytaj etykiety nad kodem. Mówią, co się zmieniło, na przykład „3 odwołania do tablicy zastąpione”, „5 wyrażeń uproszczonych”, „2 literały zdekodowane” albo „Zmieniono nazwy 4 zmiennych”. Jeśli nic nie zostało zastosowane, etykieta brzmi „Nic tu nie wymagało rozpakowania ani uproszczenia, więc kod został tylko sformatowany.”
- Naciśnij Kopiuj (przycisk zmieni się w Skopiowano) albo Pobierz .js, aby zapisać kod jako po-deobfuskacji.js.
- Wybierz Edytuj kod, aby wrócić do swojego tekstu i uruchomić go ponownie z innymi opcjami.
Jeśli tekst nie jest poprawnym kodem JavaScript, zobaczysz „To nie jest poprawny kod JavaScript: błąd składni w wierszu N, kolumna M.” z prawdziwym wierszem i kolumną, a nic nie zostanie zmienione.
Co robi każda opcja
- Rozpakuj tablice ciągów:
var a = ['x', 'y']; log(a[1]);(albo'x|y'.split('|')) zmienia się wlog("y");. Tablica jest usuwana, gdy nic już jej nie odczytuje. - Oblicz stałe:
1 + 2 * 3,'a' + 'b',!![],!0iobj['key']zmieniają się w7,"ab",true,trueiobj.key. - Zdekoduj sekwencje hex i Unicode:
'\x68\u0069'i0x1fzmieniają się w"hi"i31. - Zmień nazwy zmiennych hex:
_0x1a2bi_0x3c4dzmieniają się wvar1,func1alboarg1, zależnie od tego, jak nazwa jest zadeklarowana.
Kroki działają w tej kolejności, więc odwołanie do tablicy można najpierw rozpakować, a potem połączyć z sąsiadami przy obliczaniu stałych. Nazwy właściwości, etykiety oraz nazwy importów i eksportów nigdy nie są zmieniane, a linia shebang na początku skryptu zostaje zachowana.
Przykład krok po kroku
To wejście zawiera tablicę ciągów, nazwę w stylu hex, właściwość w cudzysłowie i sumę:
var _0x1a2b = ['hello', 'world', '\x68\x69']; function _0x3c(_0x4d) { console['log'](_0x1a2b[0] + ' ' + _0x1a2b[1], _0x4d, _0x1a2b[2]); } _0x3c(1 + 2 * 3);
A oto wynik:
function func1(arg1) { console.log("hello world", arg1, "hi"); } func1(7);
Etykiety brzmią „3 odwołania do tablicy zastąpione”, „5 wyrażeń uproszczonych”, „1 literał zdekodowany” i „Zmieniono nazwy 2 zmiennych”. Prawdziwy wynik jest rozłożony na kilka wierszy z wcięciem o szerokości 2 spacji.
Co da się cofnąć, a co nie
Narzędzie nigdy nie uruchamia twojego kodu, więc może cofnąć tylko to, co widać w tekście. Wszystko, co wymaga wcześniejszego wykonania programu, zostaje bez zmian, zamiast być zgadywane.
- Obsługiwane: proste tablice ciągów (
var a = ['x', 'y']i'x|y'.split('|')) odczytywane wyłącznie stałym indeksem. - Zostaje bez zmian: tablica obracana przy starcie, sztuczka
push(shift())z obfuscator.io. - Obsługiwane: stałe obliczenia, sklejone ciągi,
!![]i!0, sekwencje hex i Unicode, liczby szesnastkowe oraz nazwy w stylu _0x, takie jak w wynikach obfuscator.io. - Zostaje bez zmian: ciągi dekodowane przez funkcję wyszukującą, ciągi
evallubFunction, które ukrywają właściwy kod, spłaszczanie przepływu sterowania i zaciemnianie oparte na maszynie wirtualnej. - Układ: kod jest drukowany od nowa z wcięciem o szerokości 2 spacji. Komentarze są usuwane, a oryginalnych nazw zmiennych nie ma w pliku.
To pomoc w czytaniu, a nie skaner bezpieczeństwa. Narzędzie nie sprawdza, czy kod jest szkodliwy, i nie uczyni nieznanego kodu bezpiecznym. Jeśli skrypt pochodzi ze źródła, któremu nie ufasz, nie uruchamiaj go tylko dlatego, że wynik wygląda schludnie.
Dlaczego obracana tablica ciągów zostaje na miejscu
Wiele obfuskatorów przesuwa elementy tablicy ciągów krótką pętlą przed pierwszym odczytem, więc list[0] nie jest pierwszym elementem, który widzisz w źródle. Wstawienie widocznych elementów umieściłoby w twoim kodzie zły tekst.
Dlatego narzędzie rozpakowuje tablicę tylko wtedy, gdy każde jej użycie to list[3] z liczbą w zakresie albo list.length. Jeśli tablica jest przekazywana do funkcji, rozszerzana przez push, przypisywana od nowa albo odczytywana indeksem, którego narzędzie nie potrafi wyliczyć, zostaje dokładnie taka, jak ją zapisano.
JavaScript unminify online tool i duże pliki
Zminifikowany kod, który nie jest zaciemniony, wraca sformatowany od nowa z wcięciem o szerokości 2 spacji, a etykieta mówi, że zmienił się tylko układ. Tak działa tu JavaScript unminify online: krótkie nazwy, jak a i b, nie są zmieniane, bo nie mają stylu hex, a oryginalne nazwy przepadły. Aby sformatować kod, który jest już czytelny, albo upiększyć też JSON, HTML i CSS, użyj narzędzia Formatowanie kodu. Do ponownego zmniejszania arkuszy stylów służy Minifikator CSS, a do zdekodowania ciągu Base64 znalezionego w skrypcie Konwerter Base64.
Wszystko działa w Web Worker, więc strona pozostaje responsywna przy dużych plikach. Bardzo długie lub głęboko zagnieżdżone wyrażenia mogą być dla strony zbyt duże, a wtedy pojawia się komunikat, że kod jest zbyt duży lub zbyt głęboko zagnieżdżony, by przetworzyć go tutaj.
Najczęstsze pytania
Jak działa JavaScript deobfuscator?
Wklej kod do „Zaciemniony kod JavaScript” i naciśnij „Deobfuskuj”. Kod jest zamieniany na drzewo składni, tablice ciągów są rozpakowywane, stałe obliczane, sekwencje dekodowane, nazwy _0x zmieniane, a drzewo jest drukowane z powrotem jako kod z wcięciami. Skopiuj go albo naciśnij „Pobierz .js”, aby zapisać po-deobfuskacji.js.
Czy jest JavaScript deobfuscator online?
Tak, ta strona nim jest. Działa w karcie twojej przeglądarki: kod jest analizowany w Web Worker i nigdy nie jest wysyłany ani uruchamiany. Obsługuje proste tablice ciągów, wyrażenia stałe, sekwencje hex i Unicode oraz nazwy w stylu _0x. Nie cofa każdego rodzaju zaciemnienia, a lista tego, co zostaje bez zmian, jest na tej stronie.
Czy poradzi sobie z kodem z obfuscator.io?
Tylko z tymi częściami, które nie wymagają uruchamiania kodu. Sekwencje hex i Unicode są dekodowane, stałe obliczane, a nazwy _0x zmieniane na var1, func1 i arg1. Tablica ciągów, którą obfuscator.io obraca przy starcie przez push(shift()), oraz ciągi pobierane przez funkcję dekodującą zostają bez zmian, bo ich cofnięcie oznaczałoby uruchomienie kodu.
Jak zdekodować ciągi hex w zaciemnionym JavaScript?
Zostaw zaznaczone „Zdekoduj sekwencje hex i Unicode” w „Opcje deobfuskacji”. Ciąg taki jak \x68\u0069 zmieni się w hi, a liczba szesnastkowa taka jak 0x1f w 31. Dekodowane są tylko sekwencje zapisane w samym kodzie; ciąg hex, który program składa dopiero podczas działania, nie.
Czy działa też jako JavaScript unminify online?
Tak, wynik jest zawsze drukowany od nowa z wcięciem o szerokości 2 spacji, więc zminifikowany kod staje się czytelny, nawet gdy nie było nic do rozpakowania. Wtedy wynik pokazuje „Nic tu nie wymagało rozpakowania ani uproszczenia, więc kod został tylko sformatowany.” Komentarze z wejścia są usuwane. Zminifikowanych nazw zmiennych, takich jak a i b, nie da się odzyskać.
Czy narzędzie uruchamia mój JavaScript?
Nie. Kod jest tylko czytany i przepisywany jako tekst. Nie ma eval, wywołania Function ani wykonania na stronie czy w Web Worker, dlatego obracane tablice i funkcje dekodujące zostają bez zmian. To też nie jest kontrola bezpieczeństwa: wynik czyta się łatwiej, ale skaner albo werdykt w sprawie złośliwego oprogramowania to inna praca.
Dlaczego tablica ciągów została w wyniku?
Tablica jest rozpakowywana tylko wtedy, gdy każde jej użycie to stały indeks, jak list[3] albo list.length. Jeśli kod dodatkowo ją obraca, przekazuje do funkcji, rozszerza przez push albo odczytuje obliczonym indeksem, tablica zostaje w całości nietknięta, bo zastąpienie odczytów mogłoby tam dać zły ciąg.
Co robi „Zmień nazwy zmiennych hex”?
Nadaje czytelną nazwę nazwom takim jak _0x1a2b: var1 dla zmiennych, func1 dla funkcji i arg1 dla parametrów. Każde użycie jest zmieniane razem, żadna nazwa, która już jest w programie, nie jest używana ponownie, a nazwy właściwości i etykiety nigdy nie są ruszane. Nie odzyska oryginalnych nazw, bo nie ma ich w pliku.
Jak duży może być kod i co, gdy zawiera błąd?
Do 5 000 000 znaków. Jeśli kod nie jest poprawnym JavaScript, zobaczysz „To nie jest poprawny kod JavaScript: błąd składni w wierszu N, kolumna M.” z prawdziwymi numerami, a nic nie zostanie zmienione; twój tekst zostaje w polu, więc możesz poprawić to miejsce.
Czy mój kod jest gdzieś wysyłany?
Nie. Parsowanie, przepisywanie i drukowanie odbywają się w twojej przeglądarce, w Web Worker, a nic nie jest wysyłane na serwer. Kod nigdy też nie jest uruchamiany.
Polecane
-
Zaślepka kamery CloudValley (2 szt.)Zasuń ją, gdy czytasz skrypt, któremu nie ufasz, a kamera pozostanie prywatna.
-
Klucz bezpieczeństwa YubiKey 5C NFCKlucz sprzętowy do kont, które chronisz, grzebiąc w cudzym kodzie.
-
Szyfrowany pendrive Kingston IronKey Vault Privacy 50Trzymaj zapisane podejrzane próbki na szyfrowanym pendrivie zabezpieczonym PIN-em.
Pomaga utrzymać narzędzia za darmo. ✨
Zdjęcia poglądowe. Jestem Partnerem Amazon i otrzymuję wynagrodzenie z tytułu określonych zakupów dokonywanych za moim pośrednictwem.