Co to jest zaciemnianie JavaScript i dlaczego stanowi zagrożenie?

Odpowiedzi:

37

Zaciemnianie jest sposobem na „zaciemnienie” prawdziwego znaczenia i intencji twojego kodu javascript. Niektóre strony wykorzystują go jako przeszkodę dla osób, które chcą skopiować / pożyczyć swój kod. Inne strony używają go jako środka do ukrywania rzeczywistej intencji kodu.

Niektóre formy zaciemnienia:

  1. Automatyczna zmiana nazw zmiennych na krótkie bezsensowne nazwy, aby kod był mniej czytelny i trudniejszy do zrozumienia.
  2. Usuwa wszystkie dodatkowe białe spacje i podziały wierszy, aby kod był jedną wielką długą linią.
  3. Tworzenie części kodu samoczynnie generujących się, dzięki czemu przebiega pierwsze przejście kodu w celu utworzenia rzeczywistego kodu, który następnie uruchamia się w celu wykonania zamierzonej operacji.
  4. Używa kodów znaków i manipulacji ciągiem w połączeniu z eval, a nie normalnym kodem javascript, aby skonstruować rzeczywisty kod, który mógłby zostać uruchomiony.

Zacieranie się nie jest samo w sobie złem, ale może być użyte do ukrycia złych zamiarów i prawdopodobnie właśnie temu AVG się sprzeciwił. Wykrył tak wiele zaciemnienia, że ​​nie był w stanie stwierdzić, czy javascript próbuje zrobić coś, czemu chce zapobiec. Jako taki domyślnie zadeklarował kod jako niebezpieczny, ponieważ nie może zweryfikować poprawności kodu.

jfriend00
źródło
Tak myślałem, ale chciałem to zweryfikować. Dziękuję za wyjaśnienie.
L84
JEŻELI AVG blokuje dostęp do dobrze znanej, renomowanej strony internetowej, prawdopodobnie możesz to zmienić. Nie sugerowałbym tego, jeśli nie znasz przedstawiciela witryn.
uSlackr
4
Niektóre strony używają kompresji js, więc ładuje się szybciej (dobrze dla wszystkich), kod będzie wyglądał na zaciemniony.
jcubic
9
1i 2są również wykonywane przez kompresory javascript. Sprężarki zaciemniają kod jako efekt uboczny, ale nie jest to ich głównym celem; ich głównym celem jest zmniejszenie javascript, aby zmniejszyć przepustowość.
BlueRaja - Danny Pflughoeft
5. Służy również do kompresji plików JS w celu szybszego pobierania. Yahoo to zrobiło, odkąd są w Internecie, a narzędzia Google do tworzenia aplikacji internetowych również to robią (takie jak Gmail i Kalendarz).
Chloe,
12

Zaciemnianie odnosi się do ukrywania zamierzonego znaczenia czegoś.

W tym przypadku czytelny fragment kodu JavaScript, taki jak

window.onload = function() { alert("Hello " + username) };

można zastąpić

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

lub nawet

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

Wszystkie trzy fragmenty kodu robią dokładnie to samo, ale tylko czytanie pierwszego pozwoli ci łatwo zrozumieć jego intencje.

Najwyraźniej AVG próbuje zrozumieć cel kodu JavaScript przed umożliwieniem jego wykonania. Gdy kod jest zaciemniony, AVG prawdopodobnie zawiedzie. Stąd ostrzeżenie.

To powiedziawszy, niektóre strony zaciemniają swój JavaScript nie z powodu złych intencji, ale utrudniają kradzież ich pracy. Zaciemnianie jest zwykle bezużyteczne, jeśli jest używane do tego celu, ale chodzi o to, że zaciemnianie niekoniecznie oznacza złe intencje.

Dennis
źródło
3
Choć często znajdowałem, odszyfrowujący kod często pokazywał mi, że ukrywa źle napisany kod javascript, którego nie warto kraść. Jest to znak, że programista spędza więcej czasu martwiąc się o kradzież niż właściwą technikę programowania, a nawet nie jest w stanie naprawić problemu, więc łatwo go złamać. Jedynymi osobami, które poświęcają czas na uczynienie kodu naprawdę trudnym do usunięcia z bazy, są programiści szkodliwego oprogramowania, dlatego AVG zaznacza go jako naprawdę dobry powód do uniknięcia witryny.
Fiasco Labs
2
AVG to maszyna, a nie człowiek. Oczywiście, maszyna może zrozumieć kod, tak jak ten kod robi to samo. Co więcej, ludzie zwykle nie patrzą na Javascript podczas surfowania. Jest to po prostu przypadek „winy przez skojarzenie”. Niektóre niebezpieczne Javascript używa pewnych wzorców zaciemniania. Dlatego inne Javascript o podobnych wzorach jest podejrzane.
Kaz
@Kaz: To był tylko przykład, ale istnieją bardziej wyrafinowane metody zaciemniania, które wymagają zrozumienia silnika JavaScript. Ze względu na wydajność skanery złośliwego oprogramowania zwykle wyszukują określone wzorce zamiast wykonywać skrypty.
Dennis
bycie teoretycznie bezwartościowym i praktycznie bezwartościowym jest inne - teoretycznie zaciemnianie kodu jest bezużyteczne, uzgodnione. Ale jeśli koszt deobfuskacji jest podobny do kosztu stworzenia nowego kodu (lub nawet, koszt staje się wystarczająco wysoki, aby powstrzymać leniwych złodziei), wówczas zaciemnianie w celu zapobiegania kradzieży bezmyślnej może być korzystne.
Ronald
Dokładnie, tak to, co jest przedmiotem sporu nie jest zaciemniania per se , ale podobieństwo do kodu znanego złośliwego kodu.
Kaz