Jeśli nie podejmujesz środków ostrożności z kodem JavaScript, ułatwia życie dla każdego, kto chce go sklonować. Ale jeśli procesy programowania są więcej niż jednym kliknięciem, atakujący wolą klonować oprogramowanie konkurenta. Boty i inni błędniki czesają Internet dla AWS lub Azure Poświadczenia zazwyczaj nie przejmują się zaciemnionym kodem - informacje logowania następnej witryny mogą być również używane do mojego bitcoina i mogą być zbierane z mniejszym wysiłkiem.
Zaciemniający javascript używany do bycia złożonym. Jednak proces stał się znacznie łatwiejszy w ciągu ostatnich kilku lat. Dziś nawet małe firmy mogą i powinny chronić swój kod przed wrązu oczu. W niektórych przypadkach uzyskanie bezpiecznego jest wywołanie pakietu węzła.
Poniższe kroki wprowadzają powszechnie używany obfuspator JavaScript, a także spojrzeć na kilka innych tematów związanych z problemem pod ręką.
Nasz JavaScript Obfuscator mieszka w środowisku wykonawczego węzła. Zacznijmy, sprawdzając używane wersje. Poniższe dane wyjściowe zapewnia stan wersji znalezionych na stacji roboczej TREULY TRUTELOWE używane do następujących kroków:
Tamhan @ Tamhan-ThinkPad: ~ $ Node --version
V8.12.0.
Tamhan @ Tamhan-ThinkPad: ~ $ NPM --Version
6.4.1
JavaScript-Obfuscator powinien być zainstalowany w Globalnej pamięci podręcznej montażu swojej stacji roboczej. Wywołaj NPM za pomocą -sol Parametr i nie zapomnij dostarczyć praw nadzorujących - rzeczywisty proces wdrażania należy wykonać w ciągu kilku sekund.
Tamhan @ Tamhan-ThinkPad: ~ $ sudo NPM install -g
javascript-obfuscator.
[sudo] Hasło dla Tamhana:
. . .
+ [email protected].
Dodano 103 pakietów z 162 współpracowników
W 4,4s
Testowanie obfuszyjne działa najlepiej, jeśli mamy jakiś "prawdziwy" kodeks. Zacznijmy więc z małą stroną HTML. Ładuje plik JavaScript o nazwie pracownik.js, deklaruje przycisk i zawiera mały kawałek skryptów inline. Gdy zostanie załadowany w przeglądarce, kliknij przycisk, aby wyświetlić pola tekstowe.
HTML & GT;
& lt; body & gt;
& lt; skrypt SRC = "pracownik.js" & gt; & lt; / script & gt;
& lt; script & gt;
Pracownik funkcyjny () {
alert (Dotretrick ());
}
& lt; / script & gt;
& LT; przycisk Type = "Przycisk" OnClick = "Pracownik (
) "& GT; kliknij mnie! ° C: / Button & GT;
& lt; / body & gt;
& lt; / html & gt;
Worker.js rozpoczyna się z zmienną łańcuchową. Są klasycznym celem ataku - jeśli ma być zdekodowany ROM, asembler zwykle zaczyna się od szukania tabel zawierających sekwencje ciągów. Ponadto, szyfrowanie jest wykonywane za pomocą zestawu zmiennych o nazwach "mówienia".
var mytring = "cześć z przyszłego PLC"
Funkcja DotheTrick () {
var szyfr;
szyfr = rot13 (mystring);
zwrócić szyfr;
}
Ponieważ nie jest to przeznaczone jako szyfrowanie 101, powinniśmy osiedlić się na stosunkowo prostej szyfrowaniu podstawienia. Rot13 nie jest trudny, ale można go zaprogramować dość werbalnie. Realizacja Dsoares. Pochodzi z zestawem zmiennych "mówiących" i zapewnia dużo żywności dla naszego zaciemnienia.
Funkcja ROT13 (STR) {
var re = nowy regexp ("[a-z]", "i");
var min = 'a'.charcodeat (0);
var max = 'z'.charcodeat (0);
var współczynnik = 13;
var wynik = "";
str = str.tudcase ();
dla (var i = 0; str.length; i ++) {
Wynik + = (Re.test (Str [I])?
String.fromcharcode ((str.charcododeat
(i) - Min + współczynnik)% (MAX-MIN + 1)
+ min): ul [I]);
}
wynik zwrotu;
}
Wykonywanie obfuszyjnego biegania kodu jest proste. Odwołać się javascript-obfuscator. i przejść w kropce, aby powiedzieć programowi do pracy na wszystkich plikach znalezionych w bieżącym katalogu roboczym. Pokazuje to wynik na stacji roboczej IBM autora:
Tamhan @ Tamhan-ThinkPad: ~ / FureeObfuspate /
Kod $ JavaScript-Obfuscator.
Wypalanie plików bezpośrednio do folderu pojemnika jest nieefektywne, ponieważ nazwy muszą zostać zmienione przed ich użyciem. Lepszy sposób obejmuje użycie wynik parametr. Gdyby javascript-obfuscator. Znajduje go, program generuje podfolder w bieżącym katalogu roboczym i zrzuca wyniki swoich prac.
Tamhan @ Tamhan-ThinkPad: ~ / FureeObfuspiec / Code $
javascript-obfuscator. --Output ./obfusca
Zanurz się w folderze "Obfuspa" i otwórz nową wersję pracownika. Formatowanie kodu zostało zranione źle. Nazwy metod pozostały jednak takie same, jak są potrzebne do zewnętrznych inwokacji. Ponadto, ciągi siedzieć teraz w tablicy, w której atakujący może je wygodnie zbierać.
VAR A0_0XB9E2 = ['Hello \ x20FRM x20future
x20plc ',' [A-Z] ', "Test", "CharCodeat"];
JavaScript-Obyfuscator jest wyposażony w wybór algorytmów string-mangorytm, które można skonfigurować za pomocą - kodowanie tablicy . Należy
Tamhan @ Tamhan-ThinkPad: ~ / FureeObfuspiec / Code $
javascript-obfuscator. --output ./obfusca.
BASE64
W tym momencie nasze wyjście OBFUSCATOR wygląda inaczej - tablica na górze pliku jest teraz znacznie mniej czytelna. To jednak nie rozwiązuje wszystkich problemów. Jeśli wykonasz kilka cykli zaciemniających, w końcu skończysz z markiem podobnym do tego, który towarzyszy ten krok:
VAR A0_0X31E5 = ["BGVUZ3RO", "DGVZDA ==", "
ZNJVBUNOYXJDB2RL ', "Y2HHCKNVZGVBDA ==", "
DG9VCHBLCKNHC2U = '];
. . .
. . .
var mystring = 'hello x20 z x20future x20plc'
Naciemniacze pracują w polu ciśnieniowym między wysoką wydajnością a ochroną kodu. Jednym ze sposobów rozwiązania problemu obejmuje elementy "randomizacji". Obfruskatacje drogie drogowe wykonawcze nie są dodawane do wszystkich węzłów, ale tylko do podzbioru. Wykrywanie, czy węzły są dotknięte lub nie są zazwyczaj wykonywane za pomocą generatora liczb losowych, którego czułość może być dostrojona.
Wyżej wymieniony generator liczb losowych emituje liczby od zera do jednego. Jeśli liczba jest większa niż próg, modyfikacja nie nastąpi. Oprawa stringirRAyd. Do wartości jednego oznacza, że wszystkie liczby są mniejsze niż próg, zapewniając, że każdy ciąg zostanie zmęczony.
Tamhan @ Tamhan-ThinkPad: ~ / FureeObfuspiec / Code $
javascript-obfuscator. --output ./obfusca.
- Kodowanie tablicy bazowej64
--STRINGARRAYTHRESHOLD 1
Narzędzia do analizy, takie jak zysk Jsnice z posiadania małej bazy kodu. Biorąc pod uwagę, że JavaScript-Obfuscator przerywa kod w Ast Ast tak, nic nie mówi z wkładającym "kod na śmieci" w locie. Ponieważ ta funkcja dodaje znaczącą bród, deweloperzy muszą go aktywować ręcznie za pomocą dwóch parametrów pokazanych obok tego:
- CODY-CODE-CETER-CODE CHOOLEAN I LT;
- Próg wtrysku-CODE-CETER-CODE; Numer
Uruchamianie zaciemnij obfusor - Naprawdę wtryskiwanie kodu i - Napęd - próg wtrysku 1 Ustaw prowadzi do plikise o około 2,5 KB. Próba pominienia kodu prowadzi do niemal niezrozumiałej ściany głównie tautologicznego javascript.
Kod łamania do AST pozwala na głębokie transformacje. Ustawianie Controlflowflatting. Atrybut do true informuje program, który może wyłączyć połączenia funkcyjne. Prowadzi to do znaczącej ekspansji wygenerowanego kodu - pamiętaj, że wyniki mogą zająć 150-procentowe trafienie.
Artefakty z debugowania są największym na świecie prezentem hakerów. Kilka połączeń do konsoli.log () i jego przyjaciół mogą dać cenne informacje na temat atakującego informacji na temat tego, co dzieje się w programie - dobry przykład byłby pokazany fragment:
Funkcja Dotretrick ()
{
var szyfr;
Console.log ("Przygotowanie do szyfrowania
szyfr ");
szyfr = rot13 (mystring);
Console.log ("Powracający szyfr");
zwrócić szyfr;
}
Możemy spróbować ponownie zaciemnić program z poniższym poleceniem. Wyłącza funkcję buforowania łańcucha i powinien wyłączyć rejestrowanie konsoli za pomocą przekierowania.
Tamhan @ Tamhan-ThinkPad: ~ / Desktop /
Deaduff / 2018Nov / FureeObfuscate / Code $
javascript-obfuscator. --output ./obfusca.
- Dźwiękowy kodowanie fałszywych
--DisableConsoleOuterPut true
OBFUSCATOR i dostawcy przeglądarki walczą z długą i gorzką bitwą o funkcji debugera. Ze względu na to, "agresywne" środki, takie jak przekierowanie konsoli przetworzenia przepływów programowych, które pokazały towarzyszące temu etapowi, zwykle nie działają długo.
Debugmprotection: FAŁSZ,
DebugProtectionInterval: FAŁSZ,
Instalowanie całego pakietu węzła .Js do zaciemnienia jednego lub dwóch plików jest bezcelowy. Odwiedzić obfuscator.io. Aby uzyskać dostęp do wersji online programu, który mieszka w przeglądarce. Sprawdź i Comboboxes poniżej wejścia głównego pozwala modyfikować zachowanie programu zgodnie z powyższymi krokami.
Zespół deweloperski utrzymuje stosunkowo szczegółową dokumentację wyjaśniającą sposób, w jaki różnorodne parametry wiersza poleceń współdziałają ze sobą. Po prostu odwiedź Głowa tutaj Jeśli wyjście "krótkiej pomocy" pokazano powyżej, nie pomoże ci osiągnąć cel.
ETH Zurych zapewnia usługę de-obfuspieglą hostowaną jsnice.org. . Używa sieci neuronowych i bazy danych wiedzy składających się z istniejącego kodu w celu określenia nazw zmiennych. Stulując się, że formatowanie zwykle działa całkiem dobrze, niektóre nazwiska - takie jak Pixelsizetargetmax. W rutynie szyfrowania towarzyszącej temu kroku - może być raczej zabawny.
Funkcja ROT13 (PL 120) {
/ ** @type {! Regexp} * /
vuffipsitregexp = nowy regexp
(A0_0X395D ("0x1"), "I"); var.
Pixelsizetargetmax = "A" ["Charcodeat"] (0);
var zerosizeMax = "z" ["Charcodeat"] (0);
/ ** @type {Number} * /
var minh = 13;
/ ** @type {string} * /
var out = "";
Ten artykuł został pierwotnie opublikowany w wydaniu 283 Magazynu kreatywnego projektowania stron internetowych Projektant stron internetowych . Kup problem 283 tutaj lub Subskrybuj tutaj projektant stron internetowych .
Powiązane artykuły:
(Kredyt obrazu: przyszłość) W nowoczesnej projekcie internetowej i aplikacji często występują czasy, gdy intera..
Często to najprostsze skutki, które wyglądają najbardziej uderzającym, a neon tekst jest taki taki projekt. Znacznie łatwie..
Coraz częściej projektanci i deweloperzy uznają znaczenie projektowania ruchu w kontekście doświadczenie użytkownik..
Chaos Group Labs Dyrektor Chris Nichols będzie robią rozmowę o kluczu Wierzchołek , n..
Ci, którzy chcą stworzyć realistyczne projekty stworzenia za pomocą mieszanki oprogramowania - Zbrush, wspaniały proj..
Strona 1 z 2: Strona 1 Strona 1 Strona 2..
Kiedy postanowiłem być niepełnym wymiarze godzinowym ilustratorem i karikaturystom kilka lat temu, miałem mnóstwo programów..
Anatomia jest ogromnym tematem i wymaga mieszania informacji naukowej i praktyczności artystycznej. Na przykład potrzebny jest ..