Domanda

Voglio creare un'applicazione JavaScript che non sia open source e quindi desidero imparare come offuscare il mio codice JS?È possibile?

È stato utile?

Soluzione

Offuscazione:

Tentativo Compressore YUI.È uno strumento molto popolare, creato, migliorato e gestito dal team dell'interfaccia utente di Yahoo.

Puoi anche utilizzare:

Dati stringa privata:

Mantenere privati ​​i valori delle stringhe è una preoccupazione diversa e l'offuscamento non sarà di grande beneficio.Naturalmente, confezionando la tua fonte in un pasticcio confuso e minimizzato, hai una versione leggera di sicurezza Attraverso oscurità.Nella maggior parte dei casi, è l'utente che visualizza l'origine e i valori di stringa sul client sono destinati al suo utilizzo, quindi questo tipo di valore di stringa privato spesso non è necessario.

Se avessi davvero un valore che non avresti mai voluto che un utente vedesse, avresti un paio di opzioni.Innanzitutto, potresti eseguire una sorta di crittografia, che viene decrittografata al caricamento della pagina.Questa sarebbe probabilmente una delle opzioni più sicure, ma richiederebbe anche molto lavoro e potrebbe non essere necessario.Probabilmente potresti codificare in base64 alcuni valori di stringa e sarebbe più semplice..ma qualcuno che volesse davvero quei valori di stringa potrebbe farlo decodificarli facilmente.La crittografia è l’unico modo per impedire veramente a chiunque di accedere ai tuoi dati e la maggior parte delle persone ritiene che sia più sicura del necessario.

Nota a margine:

È noto che l'offuscamento in Javascript causa alcuni bug.Gli offuscatori stanno migliorando un po', ma molti gruppi decidono di trarne abbastanza beneficio minimizzante E gzip, e l'ulteriore risparmio di offuscamento non sempre ne vale la pena.Se stai cercando di proteggere la tua fonte, forse deciderai che ne vale la pena, solo per rendere il tuo codice più difficile da leggere. JSMin è una buona alternativa

Altri suggerimenti

Sono sorpreso che nessuno abbia menzionato il Compilatore di chiusura di Google. Non si limita a minimizzare / comprimere, analizza per trovare e rimuovere il codice inutilizzato e riscrive per la massima minimizzazione. Può anche eseguire il controllo del tipo e avviserà degli errori di sintassi.

JQuery recentemente è passato dal compressore YUI al compilatore di chiusura e ha visto un " un solido miglioramento <> quot;

L'offuscamento non può mai funzionare davvero. Per chiunque voglia davvero ottenere il tuo codice, è solo un dosso. Peggio ancora, impedisce ai tuoi utenti di correggere i bug (e di rispedirti le correzioni) e rende più difficile la diagnosi dei problemi sul campo. È una perdita di tempo e denaro.

Parla con un avvocato della legge sulla proprietà intellettuale e quali sono le tue opzioni legali. " Open Source " non significa " ; le persone possono leggere la fonte " ;. Invece, Open Source è un particolare modello di licenza che concede l'autorizzazione per utilizzare e modificare liberamente il codice. Se non concedi tale licenza, le persone che copiano il tuo codice sono in violazione e (nella maggior parte del mondo) hai opzioni legali per fermarli.

L'unico modo in cui puoi davvero proteggere il tuo codice è non spedirlo. Sposta l'importante codice lato server e chiedi al tuo codice Javascript pubblico di effettuare chiamate Ajax.

Vedi la mia risposta completa sugli offuscatori qui.

Puoi offuscare la fonte javascript tutto quello che vuoi, ma sarà sempre retroingegnerizzabile solo in virtù della richiesta di tutto il codice sorgente per essere effettivamente eseguito sul computer client ... l'opzione migliore che mi viene in mente è avere tutto l'elaborazione effettuata con il codice lato server e tutto il codice client javascript fa è inviare richieste per l'elaborazione al server stesso. Altrimenti, chiunque sarà sempre in grado di tenere traccia di tutte le operazioni eseguite dal codice.

Qualcuno ha citato base64 per mantenere le stringhe al sicuro. Questa è un'idea terribile. Base64 è immediatamente riconoscibile dai tipi di persone che vorrebbero decodificare il codice. La prima cosa che faranno è di decodificarlo e vedere di cosa si tratta.

Esistono numerosi strumenti di offuscamento JavaScript disponibili gratuitamente; tuttavia, penso sia importante notare che è difficile offuscare JavaScript al punto da non poter essere retroingegnerizzato.

A tal fine, ci sono diverse opzioni che ho usato in una certa misura negli straordinari:

  • YUI Compressor . Il compressore JavaScript di Yahoo! fa un buon lavoro di condensazione del codice che migliorerà il suo tempo di caricamento. C'è un piccolo livello di offuscamento che funziona relativamente bene. In sostanza, Compressor cambierà i nomi delle funzioni, rimuoverà gli spazi bianchi e modificherà le variabili locali. Questo è quello che uso più spesso. Questo è uno strumento open source basato su Java.

  • JSMin è uno strumento scritto da Douglas Crockford che cerca di minimizzare il tuo Fonte JavaScript. Nelle stesse parole di Crockford, & Quot; JSMin non offusca, ma brutta. & Quot; Il suo obiettivo principale è ridurre al minimo le dimensioni della fonte per un caricamento più rapido nei browser.

  • Obfuscator JavaScript gratuito . Questo è uno strumento basato sul Web che tenta di offuscare il codice codificandolo effettivamente. Penso che i compromessi della sua forma di codifica (o offuscamento) potrebbero venire a scapito della dimensione del file; tuttavia, è una questione di preferenze personali.

Cosa farei:

A. Troll l'hacker!

Questo sarà nella seconda parte il mio falso / offuscato codice javascript segreto LAUNCHER. Quello che vedi nel codice sorgente.

Che cos'è questo codice?

  1. carica il codice reale
  2. imposta un'intestazione personalizzata
  3. pubblica una variabile personalizzata

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

B. Offusca leggermente il codice

Che cos'è?

  1. è lo stesso codice di cui sopra in base64
  2. questo non è il codice javascript SECRET

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C Crea un file php difficile da visualizzare con il codice reale all'interno

Cosa significa questo codice php?

  1. Verifica il referrer corretto (dominio / dir / codice del tuo launcher)
  2. Verifica l'intestazione personalizzata
  3. Verifica la variabile POST personalizzata

Se tutto è ok ti mostrerà il codice giusto altrimenti un codice falso o ban ip, chiudi pagina .. qualunque cosa.

<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

base64 referrer = http://here.is/my/launcher.html

SECRET javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

FAKE = window.open('', '_self', '');window.close();

Ora .. se si definiscono gestori di eventi nel javascript di SECRET è probabilmente accessibile .. è necessario definirli all'esterno con il codice di avvio e puntando a una funzione SECRET nidificata.

SO ... c'è un modo semplice per ottenere il codice? <=>

Non sono sicuro che funzioni, ma sto usando Chrome e ho selezionato Elementi, Risorse, Rete, Fonti, Cronologia, Profili, Audit ma non ho trovato la riga sopra.

note1: se apri l'URL Troll.php dall'elemento Inspect - > network in chrome ottieni il codice falso.

note2: l'intero codice è scritto per i browser moderni. polyfill ha bisogno di molto più codice.

MODIFICA

launcher.html

<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>

Troll.php

<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>

Prova JScrambler . Di recente ho fatto un giro e ne sono rimasto colpito. Fornisce una serie di modelli per l'offuscamento con impostazioni predefinite per coloro che non si preoccupano molto dei dettagli e vogliono solo farlo rapidamente. Puoi anche creare offuscamenti personalizzati scegliendo qualsiasi trasformazione / tecnica desideri.

Il problema con le lingue interpretate è che si invia la fonte per farle funzionare (a meno che non si abbia un compilatore in bytecode, ma, di nuovo, è abbastanza banale decompilare).

Quindi, se non vuoi sacrificare le prestazioni, puoi agire solo su nomi di variabili e funzioni, ad es. sostituendoli con a, b ... aa, ab ... o a101, a102, ecc. E, naturalmente, rimuovete quanto più spazio / newline possibile (è quello che fanno i cosiddetti compressori JS).
Le stringhe offuscanti avranno un impatto sulle prestazioni, se devi crittografarle e decrittografarle in tempo reale. Inoltre un debugger JS può mostrare i valori finali ...

Contrariamente alla maggior parte delle altre risposte che suggerisco contro YUI Compressor; dovresti utilizzare Google Closure .

Non molto perché comprime di più, ma soprattutto perché catturerà errori javascript come a = [1,2,3,]; che fanno andare IE in tilt.

Un'applicazione basata su Javascript non open source è piuttosto sciocca.Javascript è un linguaggio interpretato lato client..L'offuscamento non è una grande protezione...

L'offuscamento JS viene solitamente eseguito per ridurre la dimensione dello script, anziché "proteggerlo".Se ti trovi in ​​una situazione in cui non vuoi che il tuo codice sia pubblico, Javascript non è il linguaggio giusto.

Ci sono moltissimi strumenti in giro, ma la maggior parte ha la parola "compressore" (o "minificatore") nel nome per un motivo...

Non puoi proteggere il codice lato client:basta premere F12 su Google Chrome, sospendere l'esecuzione di JavaScript e otterrai tutte le stringhe, anche quelle crittografate. Abbellire esso e rinominare le variabili e otterrai quasi il codice originale.

Se stai scrivendo Javascript lato server (ad es.NodeJS) ha paura che qualcuno possa hackerare il tuo server e vuole rendere il lavoro dell'hacker più difficile, dandoti più tempo per riottenere l'accesso, quindi utilizzare compilatori javacript:

È necessario utilizzare Closure Compiler sulla compilazione avanzata, poiché è l'unico strumento che rinomina tutte le variabili, anche se vengono utilizzate in più file/moduli.Ma ha solo un problema:funziona solo se ci scrivi dentro stile di codifica.

Posso raccomandare Utilità JavaScript di Patrick J. O'Neil. Può offuscare / compattare e comprimere e sembra essere abbastanza bravo in questi. Detto questo, non ho mai provato a integrarlo in uno script di build di alcun tipo.

Per quanto riguarda l'offuscamento e la minimizzazione, non sono un grande fan del primo. Rende impossibile il debug (errore alla riga 1 ... & Quot; aspetta, c'è solo una riga & Quot;) e impiegano sempre tempo per decomprimere. Ma se devi ... bene.

Suggerirei innanzitutto di minimizzare con qualcosa come YUI Compressor, quindi convertire tutte le stringhe e i numeri in valori esadecimali utilizzando qualcosa come http : //www.javascriptobfuscator.com/

Con questo, il codice sarebbe reso quasi impossibile da capire e penso che in questa fase ci vorrà più tempo per un hacker per rievocare il tuo codice piuttosto che se effettivamente riscrisse da zero. Riscrivere e clonare è ciò che non puoi fermare. Dopotutto siamo persone libere!

Dean Edward's Packer è un eccellente offuscatore, sebbene offuschi principalmente il codice, non tutti gli elementi stringa che potresti avere nel tuo codice.

Vedi: Strumento di compressione Javascript online e seleziona Packer (Dean Edwards) dal menu a discesa

Uso Jasob da anni ed è senza dubbio il miglior offuscatore là fuori.
Ha un'interfaccia utente avanzata ma è ancora intuitivo e facile da usare.
Gestirà anche file HTML e CSS.

Il modo migliore per usarlo è aggiungere un prefisso a tutte le tue variabili private con qualcosa come un trattino basso, quindi utilizzare la funzione sort per raggrupparle tutte e selezionare come obiettivi per l'offuscamento.

Gli utenti possono comunque visualizzare la tua fonte, ma è molto più difficile decifrare quando le tue variabili private vengono convertite da qualcosa come _sUserPreferredNickName a a.

Il motore calcolerà automaticamente il numero di variabili target e assegnerà le priorità per ottenere la massima compressione.

Non lavoro per Jasob e non ottengo nulla dalla promozione, offrendo solo alcuni consigli amichevoli.
Il rovescio della medaglia è che non è gratuito ed è un po 'caro, ma comunque ne vale la pena se confrontato con alternative: le opzioni "gratuite" non si avvicinano nemmeno.

Hai provato Bananascript ? Produce codice altamente compresso e completamente illeggibile.

Sto usando l'utility Closure-Compiler per l'offuscamento java-script. Minimizza il codice e ha più opzioni per l'offuscamento. Questa utility è disponibile sul codice di Google all'URL seguente:
Strumenti di chiusura

Ma ora un giorno sento molto UglifyJS. Puoi trovare vari confronti tra Closure Compiler e UglifyJS in cui Uglify sembra essere un vincitore.
UglifyJS: un nuovo compressore JavaScript veloce per il nodo .js That & # 8217; s alla pari con la chiusura

Presto darei la possibilità a UglifyJS.

Ho l'impressione che alcune aziende (ad esempio: JackBe) inseriscano un codice JavaScript crittografato all'interno dei file * .gif, anziché dei file JS, come ulteriore misura di offuscamento.

Come offuscatore / compressore JavaScript / HTML / CSS puoi anche provare Patu Digua .

Prova questo strumento Obfuscator Javascript

L'ho usato sul mio gioco HTML5 non solo ha ridotto la dimensione da 950 KB a 150, ma ha anche reso reversibili i compilatori e i minificatori di chiusura illeggibili del codice sorgente. Personalmente non so come invertire questa confusione.

Dovresti assolutamente prendere in considerazione Obfuscriptor .

Vado oltre i tipici trucchi di minimizzazione Javascript che abbiamo visto da altri strumenti come YUI Compressor o Chiusura di Google .

Il codice offuscato sembra più crittografato. A differenza di qualsiasi cosa abbia mai visto prima.

Questo minimizza ma non offusca. Se non vuoi usare la riga di comando Java puoi incollare il tuo javascript in un modulo web.

Se si utilizza una libreria JavaScript, prendere in considerazione Dojo Toolkit che è compatibile (dopo modifiche minori) con la compilation in modalità avanzata del compilatore di chiusura.

Dojo & # 8211 ; L'unica libreria JavaScript Compatibile con The Closure Compiler

Il codice compilato con la modalità Chiusura avanzata è quasi impossibile da decodificare, anche passando attraverso un estetista, poiché la base di codice intera (inclusa la libreria) è offuscata. In media è anche piccolo del 25%.

Il codice JavaScript che è semplicemente minimizzato (Compressore YUI, Uglify ecc.) è facile da decodificare dopo aver attraversato un estetista.

L'ho usato in passato e fa un buon lavoro. Non è gratuito, ma dovresti assolutamente dare un'occhiata.
JavaScript Obfuscator & amp; Encoder

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top