Pokud neberete preventivní opatření s vaším kódem JavaScript, děláte život pro každého, kdo se chce klonovat. Pokud však vaše programovací procesy jsou více než jedním kliknutím, útočníci budou raději klonovat konkurenční software. Bots a další miscantts česání internetu pro pověření AWS nebo Azure obvykle neobtěžují se zmateným kódem - přihlašovací údaje příští webové stránky mohou být také použity pro důlní bitcoin a mohou být sklizeny s menším úsilím.
Obfuscující JavaScript byl složitý. Proces se však v posledních letech stal výrazně jednodušší. Dnes mohou i malé společnosti chránit své kodex od zvědavých očí. V některých případech je zajištění je jen vyvolání obalu uzl.js pryč.
Následující kroky představují běžně používaný Javascript obfuscator a také se podívat na několik dalších témat souvisejících s problémem v ruce.
Nejlepší antivirový software
15 Základní nástroje JavaScriptu
01. Kontrola verze
Náš JavaScript obfuscator žije v uzlu runtime prostředí. Začněte se kontrolou použitých verzí. Níže uvedený výstup poskytuje stav verze nalezené na vaší pracovní stanici skutečně použité pro následující kroky:
JavaScript-obfuscator by měl být instalován do globální mezipaměti montáže vaší pracovní stanice. Vyvolejte NPM s
-G
Parametr a nezapomeňte poskytnout práva superuserů - skutečný proces nasazení by měl být proveden během několika sekund.
Tamhan @ Tamhan-ThinkPad: ~ $ sudo npm instalace -g
JavaScript-obfuscator
[sudo] heslo pro Tamhan:
. . .
+ [email protected]
Přidáno 103 balíků od 162 přispěvatelů
v 4,4s
03. Vytvořte vzorek
Testování obfuscation funguje nejlépe, pokud budeme mít nějaký "skutečný" kód. Dejme tedy s malou webovou stránkou HTML. Načtuje soubor JavaScript s názvem Worker.js, deklaruje tlačítko a obsahuje malý kousek inline skriptování. Když je načten do prohlížeče, klepněte na tlačítko pro zobrazení textového pole.
& lt; html & gt;
& lt; tělo & gt;
& lt; skript src = "worker.js" & gt; & lt; / script & gt;
& lt; scénář a gt;
funkční pracovník () {
výstraha (Dothetrick ());
}
& lt; / script & gt;
Tlačítko Type = "Tlačítko" Onclick = "Pracovník (
) "" & gt; klikněte na mě! & lt; / tlačítko & gt;
& lt; / tělo & gt;
& lt; / html & gt;
04. Přidat nějaký kód
Pracovník.JS začíná s proměnnou řetězce. Jedná se o klasický cíl útoku - Pokud má být ROM dekódován, assembler obvykle začíná hledáním stolů obsahujících řetězce. Kromě toho se šifrování provádí pomocí sady proměnných s velmi "mluvícími" jmény.
var mystring = "Ahoj z budoucího PLC"
Funkce Dothetrick () {
var šiffrat;
šiffrat = rot13 (mystring);
vrátit šiffrat;
}
05. implementovat šifrování
Vzhledem k tomu, že to není určeno jako šifrování 101, měli bychom se usadit na poměrně jednoduchém substituční šifře. Rot13 není obtížný, ale může být naprogramován docela verevně.
Implementace DSOARS
Dodává se s množstvím "mluvících" proměnných a poskytuje spoustu potravin pro náš obvoskce.
Funkce ROT13 (Str) {
var re = nový regexp ("[a-z]", "i");
var min = 'a'.charcodeat (0);
var max = 'z'.charcodeat (0);
varový faktor = 13;
var výsledky = "";
str = str.touppercase ();
pro (var i = 0; i & lt; str.length; i ++) {
výsledek + = (re.test (str [i])?
String.FromCharCode ((str.Charcodeat
(I) - min + faktor)% (max-min + 1)
+ min): str [i]);
}
Výsledek návratu;
}
06. První zmatka
Provádění obfuscation běh kódu je jednoduchý. Invoke
JavaScript-obfuscator
a projít v tečce, abyste program vyprávěli, aby pracoval na všech souborech nalezených v aktuálním pracovním adresáři. To ukazuje výsledek na pracovní stanici IBM autora:
Tamhan @ Tamhan-ThinkPad: ~ / FutingObfuscate /
kód $ javascript-obfuscator.
07. Přesměrování výstupu
Vypínání souborů přímo do složky kontejneru je neefektivní, protože názvy musí být změněny dříve, než mohou být použity. Lepší způsob zahrnuje použití
výstup
parametr. Li
JavaScript-obfuscator
Najít to, program vytváří podsložku v aktuálním pracovním adresáři a vylučuje výsledky svých pracovních programů.
Ponořte se do složky "obfusca" a otevřete novou verzi pracovníků.Js, aby vám hodil oči na ohavnosti, která je ukázána doprovázet tento krok. Formátování kódu bylo špatně zmírněno. Jména metod však zůstala stejná, protože jsou potřebné pro externí vyvolání. Kromě toho se řetězce nyní sedí v poli, kde je útočník může pohodlně sklízet.
VAR A0_0XB9E2 = ['HELLO X20FROM X20FURUCE
X20PLC ',' [A-Z] ',' Test ',' Charcodeat '];
09. Zabránit sklizni řetězci
JavaScript-obfuscator je dodáván s výběrem řetězců-manglingových algoritmů, které lze konfigurovat pomocí
- prostředění
. Mějte na paměti, že výstupní adresář musí být vyprázdněn před každým vyvoláním, protože zapomenout na to, že tak učiní, že tak učiní na "rekurzivní" zmatenost výstupních souborů z předchozího spuštění.
V tomto okamžiku se náš výstup obfuscator vypadá jinak - pole v horní části souboru je nyní mnohem méně čitelný. To však nevyřeší všechny problémy. Pokud provádíte několik obfuscation cyklů, nakonec skončíte se značkou podobným typu, který doprovází tento krok:
Obfuscátory pracují v tlakovém poli mezi vysoce výkonnou a ochranou kódů. Jedním ze způsobů, jak řešit problém zahrnuje prvky "Randomising". Runtime-drahé zmatky nejsou přidány do všech uzlů, ale pouze na podmnožinu. Detekce, pokud jsou uzly ovlivněny nebo nejsou obvykle prováděny přes generátor náhodného čísla, jehož citlivost lze naladit.
12. Jděte po strunech
Výše uvedené náhodné číslo generátoru vydává čísla od nuly na jednu. Pokud je číslo větší než prahová hodnota, modifikace se neuskuteční. Nastavení
StringarrayThreshold.
Na hodnotu jednoho znamená, že všechna čísla jsou menší než prahová hodnota, která zajistí, že každý řetězec se rozdíjejí.
Analysis nástroje, jako je zisk JSnice z mající malé kódové základny. Vzhledem k tomu, že JavaScript-obfuscator rozbije kód do AST stejně, nic mluví proti vložení "odpadkového kódu" na mouchu. Vzhledem k tomu, že tato funkce dodává významný bloat, vývojáři jej musí aktivovat ručně prostřednictvím dvou parametrů uvedených vedle tohoto:
- Dead-Code-injekce & lt; Boolean & GT;
-Dead-kód-injekce-prahová hodnota <45]
14. Užijte si chaos
Běh obfuscator s oběma
- Dead-code-injekce true
a
- Dead-Code-injekce-prahová hodnota 1
Sada vede k souborům asi 2,5kb. Pokus o napomáhání kódu vede k téměř nesrovnatelné stěně většinou tautologického JavaScriptu.
15. Agresivně modifikovat tok programu
Prolomentní kód do AST umožňuje hluboké transformace. Nastavení.
ControlFlowFlowFlowFlowing.
Atribut true sdělí program, který může de-inline funkční hovory. To vede k významnému rozšíření generovaného kódu - mějte na paměti, že výsledky mohou trvat 150% výkonu výkonu.
16. Obtěžujte ladicí program
Artefakty z ladění jsou největším světovým darem hackerům. Několik volání do konzoly.log () a jeho přátelé mohou poskytnout útočníkovi cenné informace o tom, co se děje uvnitř programu - dobrý příklad by byl ukázaný na úryvci:
Funkce Dothetrick ()
{
var šiffrat;
console.log ("Příprava na šifrování
šiffrat ");
šiffrat = rot13 (mystring);
console.log ("vracet šiffrat");
vrátit šiffrat;
}
17. Vyhodnotit technické problémy
Můžeme se pokusit znovu obfuscate program s příkazem níže. Zakáže funkci mezipaměti řetězce a měla by vypnout protokolování konzoly přes přesměrování.
Obfuscator a dodavatelé prohlížeče bojují o dlouhou a hořkou bitvu o funkci ladicího programu. Vzhledem k tomu, agresivní "opatření, jako je například přesměrování konzoly interruporů průtoků programů, ukázaly tento krok, obvykle nefungují dlouho.
Instalace celého balíčku node.js pro obfuscating jeden nebo dva soubory je zbytečné. Návštěva
obfuscator.io
Přístup k online verzi programu, který žije ve vašem prohlížeči. Kontrola a kombinování pod hlavním vstupem vám umožní upravit chování programu podle výše uvedených kroků.
Developer Team udržuje relativně podrobnou dokumentaci, která vysvětluje způsob, jakým různé parametry příkazového řádku vzájemně ovlivňují. Jednoduše navštívit
hlavu
Pokud je uvedeno výše "krátká nápověda", nepomůže vám dosáhnout svého cíle.
Eth Curych poskytuje službu de-obfuscation Service pořádaná na adrese
Jsnic.org.
. Využívá neuronové sítě a znalostní databáze tvořenou stávajícím kódem pro určení názvů proměnných. Při rozběhnutí formátování obvykle funguje docela dobře, některé jména - například
pixelsizetargetMax.
V šifrovací rutině doprovázející tento krok - může být spíše zábavná.
Funkce ROT13 (PL $ 120) {
/ ** @type {! regexp} * /
var insfittitelregexp = nový regexp
(A0_0x395d ("0x1"), "I"); var.
pixelsizetargetmax = "A" ["Charcodeat"] (0);
VAR Zerosizemix = "Z" ["Charcodeat"] (0);
/ ** @type {číslo} * /
var minh = 13;
/ ** @Type {String} * /
var out = "";
Pravděpodobně jste slyšeli, že byste měli používat relativní jednotky pro velikost písma. To je dobré pravidlo pro přístupný web design; Pokud uživatel změní výchozí velikos..
Naučit se míchat barevné tužky vám pomůže získat více z vašich nástrojů. Spíše než spoléhat se na jednotlivce, ploché barvě každé tužky, můžeme je smíchat dohromady, a..