Wie kann ich JavaScript verschleiern (schützen)? [geschlossen]


714

Ich möchte eine JavaScript-Anwendung erstellen, die nicht Open Source ist, und möchte daher lernen, wie ich meinen JS-Code verschleiern kann. Ist das möglich?


15
Es würde mich interessieren, warum Sie versuchen, den Code zu verschleiern. Möglicherweise gibt er den erforderlichen Kontext, um eine hilfreiche Antwort zu geben.
JohnFx

45
Die einzige Möglichkeit, etwas wirklich geheim zu halten, besteht darin , es nicht an den Kunden zu senden . Wenn sie es nicht haben, können sie es nicht lesen. Wenn Sie es verschlüsselt senden, bitten Sie nur die wenigen Leute, die sich wirklich darum kümmern, um Ärger, und alle anderen stöbern nicht herum, selbst wenn Sie es im Klartext senden (vgl. DRM).
Donal Fellows


8
Das Verschleiern Ihres Codes ist keine gute Idee. Es wird nur legitimen Benutzern Unannehmlichkeiten bereiten (z. B. wenn sie einen Fehler beheben müssen) und nichts tun, um ihn vor Personen zu "schützen", die einen (finanziellen) Anreiz haben, ihn zurückzuentwickeln. Es ist grundsätzlich unmöglich , ein Reverse Engineering von Javascript-Code zu verhindern.
Sven Slootweg

14
Das Argument, nicht zu verschleiern, scheint mir fehlerhaft. Wenn Sie nicht wirklich glauben, dass Ihre Benutzer Fehler beheben / melden könnten, sollten Sie dies tun. Es kann die Ladezeiten durch Minimieren verkürzen. Es wird niemals einen wirklich engagierten Hacker aufhalten, aber es wird ihn / sie verlangsamen und es wird halbherzige Hackversuche stoppen. Es ist sehr einfach und es gibt viele Tools (siehe andere Antworten). Ich würde sagen, tun Sie es auf jeden Fall, da es die meiste Zeit nur Vorteile gibt, aber erwarten Sie nicht, dass es echte Sicherheit bringt oder jemanden daran hindert, Ihren Code zu kopieren wenn sie wirklich wollen. Die einzige Möglichkeit, dies zu tun, besteht darin, die Code-Server-Seite beizubehalten und Ajax zu verwenden.
Benjamin

Antworten:


405

Verschleierung:

Versuchen Sie es mit YUI Compressor . Es ist ein sehr beliebtes Tool, das vom Yahoo UI-Team erstellt, erweitert und gewartet wird.

Sie können auch verwenden:

UPDATE: Diese Frage wurde ursprünglich vor mehr als 10 Jahren gestellt und YUI wird nicht mehr gepflegt. Google Closure Compiler wird weiterhin verwendet, und UglifyJS kann lokal über den Node Package Manager ausgeführt werden:npm install -g uglify-js

Private String-Daten:

Die Geheimhaltung von Zeichenfolgenwerten ist ein anderes Problem, und die Verschleierung ist nicht wirklich von großem Nutzen. Wenn Sie Ihre Quelle in ein verstümmeltes, minimiertes Chaos packen, erhalten Sie natürlich eine leichte Version von Sicherheit durch Dunkelheit . In den meisten Fällen ist es Ihr Benutzer, der die Quelle anzeigt, und die Zeichenfolgenwerte auf dem Client sind für ihre Verwendung vorgesehen, sodass eine Art privater Zeichenfolgenwert nicht häufig erforderlich ist.

Wenn Sie wirklich einen Wert hätten, den ein Benutzer nie sehen sollte, hätten Sie mehrere Optionen. Zunächst können Sie eine Art Verschlüsselung durchführen, die beim Laden der Seite entschlüsselt wird. Das wäre wahrscheinlich eine der sichersten Optionen, aber auch eine Menge Arbeit, die möglicherweise unnötig ist. Sie könnten wahrscheinlich base64 einige Zeichenfolgenwerte codieren, und das wäre einfacher. Aber jemand, der diese Zeichenfolgenwerte wirklich wollte, könnte sie leicht decodieren . Die Verschlüsselung ist der einzige Weg, um wirklich zu verhindern, dass jemand auf Ihre Daten zugreift, und die meisten Menschen finden, dass dies mehr Sicherheit ist, als sie benötigen.

Randnotiz:

Es ist bekannt, dass die Verschleierung in Javascript einige Fehler verursacht. Die Verschleierer werden ein wenig besser, aber viele Outfits entscheiden, dass sie genug Nutzen aus dem Minimieren und Zippen ziehen , und die zusätzlichen Einsparungen bei der Verschleierung sind nicht immer die Mühe wert . Wenn Sie versuchen, Ihre Quelle zu schützen, entscheiden Sie vielleicht, dass es sich lohnt, nur um Ihren Code schwerer lesbar zu machen. JSMin ist eine gute Alternative.


32
Ich möchte hinzufügen, dass das Ausführen einer Base64-Codierung für die Sicherheit keinen Vorteil hat, da es sich um eine trivial umkehrbare Prozedur handelt. Selbst das Verschlüsseln hilft nicht, wenn es clientseitig entschlüsselt wird. Die einzige Möglichkeit, die Sicherheit einer Zeichenfolge zu gewährleisten, besteht darin, dass der Client NUR die verschlüsselte Zeichenfolge sieht und sie an
Claudiu

16
der Server zur weiteren Verarbeitung.
Claudiu


7
Das Verschlüsseln der Zeichenfolgenwerte ist nur unwesentlich vorteilhafter als das Codieren mit base64, wenn sie vom Browser entschlüsselt werden müssen, um sie zu verwenden. Der Grund dafür ist, dass Sie dem Browser auch den Verschlüsselungsschlüssel geben müssen, und alles, was der Browser tun kann, kann der Benutzer auch.
Ben

9
Wenn ich mit YUI Compressor minimiere, stelle ich sicher, dass "sichere" Minimierungsmethoden verwendet werden, dh die Semikolons bleiben erhalten --preserve-semi. Das Umschreiben der privaten Variablen in a, b, c usw. ist normalerweise sicher. Eine andere Sache, die ich mache, ist, den Minifier nach jedem Semikolon im Code einen Zeilenumbruch setzen zu lassen --line-break 0. Wenn es dann in der Produktion zu Fehlern kommt, habe ich am wenigsten eine gültige Referenzzeile, aus der ich arbeiten kann, und kann diesen Code in meiner Entwicklungskopie finden. Andernfalls erhalten Sie nur einen Fehler in einer massiven Codezeile und keine Ahnung, wo der Fehler liegt.
zuallauz

136

Ich bin überrascht, dass niemand den Closure Compiler von Google erwähnt hat . Es wird nicht nur minimiert / komprimiert, sondern analysiert, um nicht verwendeten Code zu finden und zu entfernen, und es wird neu geschrieben, um eine maximale Minimierung zu erzielen. Es kann auch eine Typprüfung durchführen und warnt vor Syntaxfehlern.

JQuery wechselte kürzlich von YUI Compresser zu Closure Compiler und sah eine " solide Verbesserung ".


60
Ja, aber kürzlich haben sie den Closure-Compiler verlassen und verwenden jetzt UglifyJS. Der JQuery-Code war
fehlerhaft,

Ich möchte darauf hinweisen, wenn Sie mit eckigen arbeiten. Dieses Tool funktioniert aufgrund der Abhängigkeitsinjektion und des Umbenennens von Argumenten nicht wirklich, es sei denn, es gibt ein Kontrollkästchen, das ich nicht sehen kann.
iConnor

1
Nützliches Werkzeug, aber es verschleiert nicht, weshalb es wahrscheinlich niemand anderes erwähnt hat.
Madbreaks

1
@Madbreaks mit erweiterten Optimierungen ( developer.google.com/closure/compiler/docs/api-tutorial3 ) minimiert den Code bis zur Verschleierung. Variablen können beispielsweise der Kürze halber umbenannt werden.
Jason Hall

Google ist auch keine Option für die Sicherheit
Fillipo Sniper

121

Verschleierung kann niemals wirklich funktionieren. Für alle, die wirklich auf Ihren Code zugreifen möchten, ist dies nur eine Geschwindigkeitsüberschreitung. Schlimmer noch, es hält Ihre Benutzer davon ab, Fehler zu beheben (und die Korrekturen an Sie zurückzusenden), und erschwert es Ihnen, Probleme vor Ort zu diagnostizieren. Es ist eine Verschwendung von Zeit und Geld.

Sprechen Sie mit einem Anwalt über das Recht des geistigen Eigentums und Ihre rechtlichen Möglichkeiten. "Open Source" bedeutet nicht "Leute können die Quelle lesen". Stattdessen ist Open Source ein bestimmtes Lizenzmodell, das die Erlaubnis erteilt, Ihren Code frei zu verwenden und zu ändern. Wenn Sie eine solche Lizenz nicht gewähren, verstoßen Personen, die Ihren Code kopieren, gegen diese Bestimmungen, und (in den meisten Ländern der Welt) haben Sie rechtliche Möglichkeiten, sie zu stoppen.

Die einzige Möglichkeit, Ihren Code wirklich zu schützen, besteht darin, ihn nicht zu versenden. Verschieben Sie den wichtigen Code serverseitig und lassen Sie Ihren öffentlichen Javascript-Code Ajax-Aufrufe ausführen.

Meine vollständige Antwort zu Verschleiern finden Sie hier.


14
+1 für den Anwalt, aber das funktioniert möglicherweise nicht in anderen Ländern / Gerichtsbarkeiten.
jmort253

16
Anwälte verursachen wahrscheinlich mehr Kosten / Probleme als der verlorene Code, denken sehr sorgfältig nach und arrangieren viel Geld, um Anwälte zu engagieren !!
Andora

11
-1: Ich glaube, dass es schwierig ist, einen Anwalt zu finden, der JavaScript versteht ... Ganz zu schweigen von den Gebühren und der Zeit, die benötigt wird, um "Übertreter" zu finden. Kann jemand wirklich eine Lizenz verletzen, die in den HTML / JavaScript-Dateien vergraben ist, wenn er nie etwas signiert hat? +1 für die AJAX-Anrufe.
Alarm

12
@Alerty 1) Bei Lizenzen geht es im Wesentlichen darum, die Verwendung von urheberrechtlich geschütztem Material zu gewähren . Sie haben wenig Recht, es ohne die Lizenz zu verwenden. Sie müssen es nicht unterschreiben, um die Rechte zu erhalten. Eine Lizenz unterscheidet sich von einem Vertrag. 2a) Da es sich um Personen handelt, die HTML / Javascript ohne Erlaubnis kopieren und verwenden, ist die Lizenz nicht "begraben", sondern genau dort, wo sie genommen wird. 2b) Sie haben wenig Recht, urheberrechtlich geschütztes Material einer anderen Person ohne Lizenz zu verwenden. 3) Der Anwalt muss kein Javascript verstehen, sondern nur das Recht des geistigen Eigentums.
Schwern

4
@Alerty Sei nicht stumpf. Hier geht es darum, diejenigen zu bestrafen, die die Datei für die Verwendung auf ihrer eigenen Website ohne Erlaubnis kopieren. Sie sprechen von einem Vertrag, nicht von einer Lizenz. Verträge bedürfen der gegenseitigen Zustimmung und sind ein Geben und Nehmen. Lizenzen gewähren Ihnen das Recht zur Nutzung von geistigem Eigentum. Lizenzen sind eine Möglichkeit (der Eigentümer gewährt Ihnen Dinge), Sie müssen nicht unterschreiben, weil Sie nichts verraten. Viele "Softwarelizenzvereinbarungen" sind tatsächlich Verträge, weil sie über die Lizenzierung des Eigentums hinausgehen und manchmal lächerliche Dinge wie das Recht auf Klage betreffen.
Schwern

49

Sie können die Javascript-Quelle nach Belieben verschleiern, sie ist jedoch immer rückentwickelbar, da der gesamte Quellcode tatsächlich auf dem Client-Computer ausgeführt werden muss. Die beste Option, die ich mir vorstellen kann, besteht darin, die gesamte Verarbeitung durchzuführen mit serverseitigem Code, und der gesamte Client-Code, den Javascript ausführt, sendet Anforderungen zur Verarbeitung an den Server selbst. Andernfalls kann jeder immer alle Vorgänge verfolgen, die der Code ausführt.

Jemand erwähnte base64, um die Sicherheit der Zeichenfolgen zu gewährleisten. Das ist eine schreckliche Idee. Base64 ist sofort an den Personen erkennbar, die Ihren Code zurückentwickeln möchten. Das erste, was sie tun werden, ist es zu entschlüsseln und zu sehen, was es ist.


45
Wohin ich auch gehe, die häufigste Antwort auf "Wie kann ich mein Javascript verschleiern?" ist "Sie sollten sich darüber keine Sorgen machen, weil jemand es verschleiern könnte." Dies ist keine wirkliche Antwort.
Travis Wilson

2
@Vivek: Ein bisschen spät, aber was ich wirklich gemeint habe, ist "serverseitiger Code". Es ist möglich, Javascript nicht in einem Browser, sondern nur auf einem Server auszuführen, aber ich weiß nicht, wie häufig das vorkommt.
Claudiu

8
@Travis: Ich habe nicht gesagt "Du solltest dir keine Sorgen machen." Ich habe nur gesagt, dass Sie, wenn Sie ein Closed-Source-Programm möchten, es nicht in clientseitigem Javascript schreiben möchten, da jede Verschleierung, die Sie vornehmen, nicht verhindert, dass es (ziemlich einfach) rückentwickelt wird.
Claudiu

8
Recht. Was in keiner Weise antwortet "Wie kann ich mein JavaScript verschleiern". Verschleierung ist kein abstraktes, sondern ein technisches Konzept. Die Operation fragte einfach "wie?"
Madbreaks

2
@ Madbreaks: Die Frage war im Zusammenhang damit, seinen Code nicht Open Source zu machen. Die unmittelbare technische Antwort ist die akzeptierte, aber die bessere kontextbezogene Antwort (wie in, was versuchen Sie wirklich zu tun?) Ist, IMO, dass Sie kein clientseitiges Javascript haben können, das nicht Open Source ist, weil Jeder hat die Quelle, unabhängig davon, wie Sie sie verschleiern. In beiden Fällen sind beide Antworten hier und die Menschen können beide lesen und davon profitieren.
Claudiu

45

Es gibt eine Reihe von JavaScript-Verschleierungstools, die frei verfügbar sind. Ich denke jedoch, dass es wichtig ist zu beachten, dass es schwierig ist, JavaScript so weit zu verschleiern, dass es nicht mehr rückentwickelt werden kann.

Zu diesem Zweck gibt es mehrere Optionen, die ich bis zu einem gewissen Grad für Überstunden verwendet habe:

  • YUI-Kompressor . Der JavaScript-Kompressor von Yahoo! leistet gute Arbeit bei der Verdichtung des Codes, wodurch die Ladezeit verbessert wird. Es gibt einen kleinen Grad an Verschleierung, der relativ gut funktioniert. Im Wesentlichen ändert Compressor Funktionsnamen, entfernt Leerzeichen und ändert lokale Variablen. Das benutze ich am häufigsten. Dies ist ein Open-Source-Java-basiertes Tool.

  • JSMin ist ein von Douglas Crockford geschriebenes Tool, mit dem Sie Ihre JavaScript-Quelle minimieren können. In Crockfords eigenen Worten: "JSMin verschleiert nicht, aber es hässlich." Das Hauptziel besteht darin, die Größe Ihrer Quelle zu minimieren, um das Laden in Browsern zu beschleunigen.

  • Kostenloser JavaScript Obfuscator . Dies ist ein webbasiertes Tool, das versucht, Ihren Code durch tatsächliche Codierung zu verschleiern. Ich denke, dass die Kompromisse bei der Codierung (oder Verschleierung) auf Kosten der Dateigröße gehen könnten. Dies ist jedoch eine Frage der persönlichen Präferenz.


19
Da der Javascript-Code auf dem Computer des Clients ausgeführt werden muss, ist es nicht nur schwierig, ihn bis zu einem Punkt zu verschleiern, an dem Code nicht rückgängig gemacht werden kann, sondern unmöglich ist .
Schwern

20
Es geht um Statistiken. An welcher Schwelle erhält jemand mit und ohne Verschleierung Zugriff auf Ihren Code? Sie können immer noch Zugang erhalten, aber je höher die Schwelle, desto weniger Menschen. Je weniger Menschen über etwas Bescheid wissen, desto sicherer ist etwas. Standard-Sicherheitsklassifizierungspraxis.
Cris Stringfellow

1
@PeterR Suchen / Ersetzen in einem Texteditor wird Ihr Leben so viel schwieriger machen, wenn Sie versuchen, es zu lesen oder zurückzuentwickeln. Es ist nicht perfekt, fügt aber eine zusätzliche Ebene von Ärger / Schwierigkeit hinzu, indem Kontexthinweise entfernt werden. Die meisten Programmierer sind nicht so schlau wie Sie, was dies zu einer so großen Abschreckung macht.
SED

1
@SED Ich habe keinen einzigen Programmierer weiß , dass nicht ein Bündel finden konnte / ersetzen [ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY]Vars in zumindest [var1, var2,..]innerhalb einer einzigen Minute. Ich kann innerhalb von zwei Minuten buchstäblich die Namen von Variablen entfernen, erneut einrücken und suchen / ersetzen. Und nein, ich bin schlauer als ein durchschnittlicher Jr. Dev. Die einfache Tatsache ist, dass es KEINE Möglichkeit gibt, clientseitiges JS zu verschleiern. Sie können sich 5 Minuten kaufen, MAX, aber das nützt nichts. Dieses Zeug ist wirklich nur, um jemanden zu verkaufen, der keinen Code für zusätzliche "Sicherheit" kennt. Niemand, der jemals eine Zeile von JS geschrieben hat, würde diesen Mist kaufen.
Peter R

3
@PeterR "Ich kann Var-Namen innerhalb von zwei Minuten buchstäblich de-uglifizieren, neu einrücken und suchen / ersetzen" - versuchen Sie dies auf einem minimierten, verschleierten 20-MB-Codebasis-Bundle mit mehreren Durchgängen und einer Struktur, die dies erfordert Wochen, um auch mit dem ursprünglichen, kommentierten Quellcode zu verstehen. Und um es noch schwieriger zu machen, gibt es Verschleierungswerkzeuge, die Ihren Code absichtlich beschädigen, wenn sich Einrückungen, Zeilen usw. ändern.
John Weisz

23

Was ich tun würde:

A. Troll den Hacker!

Dies wird im zweiten Teil mein gefälschter / verschleierter geheimer Javascript-Code LAUNCHER sein. Die, die Sie im Quellcode sehen.

Was bedeutet dieser Code?

  1. Lädt den realen Code
  2. Legt einen benutzerdefinierten Header fest
  3. veröffentlicht eine benutzerdefinierte Variable

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. Verschleiern Sie den Code ein wenig

Was ist das?

  1. Das ist der gleiche Code wie oben in base64
  2. Dies ist nicht der SECRET-Javascript-Code

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

C Erstellen Sie eine schwer anzuzeigende PHP-Datei mit dem darin enthaltenen Code

Was bedeutet dieser PHP-Code?

  1. Überprüft den richtigen Referrer (Domain / Verzeichnis / Code Ihres Launchers)
  2. Überprüft den benutzerdefinierten HEADER
  3. Überprüft die benutzerdefinierte POST-Variable

Wenn alles in Ordnung ist, wird Ihnen der richtige Code angezeigt, ansonsten ein gefälschter Code oder eine IP-Sperre. Schließen Sie die Seite.

<?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();

Wenn Sie Ereignishandler im SECRET-Javascript definieren, ist dies wahrscheinlich zugänglich. Sie müssen sie außerhalb mit dem Startcode definieren und auf eine verschachtelte SECRET-Funktion verweisen.

SO ... gibt es eine einfache Möglichkeit, den Code zu erhalten? document.body.appendChild(document.createElement('div')).innerText='Awesome';

Ich bin nicht sicher, ob dies funktioniert, aber ich verwende Chrome und überprüfe Elemente, Ressourcen, Netzwerk, Quellen, Zeitleiste, Profile, Audits, aber ich habe die obige Zeile nicht gefunden.

note1: Wenn du die Troll.php-URL von Inspect element-> network in Chrome öffnest, erhältst du den gefälschten Code.

Anmerkung 2: Der gesamte Code ist für moderne Browser geschrieben. Polyfill benötigt viel mehr Code.

BEARBEITEN

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=';}; ?>

1
Oh und ja, ich würde auch den Javascript-Code verschleiern.
Cocco

1
Das ist etwas, woran ich gerade gedacht habe, als ich den Cracker trollte. Ich würde gerne so etwas sehen, ohne PHP verwenden zu müssen :)
pgarciacamou

6
Auch wenn dies lustig ist, kann ein Webentwickler, der die Site ordnungsgemäß inspizieren kann, irgendwie den Quellcode erhalten. Ich denke wirklich, dass es keine Möglichkeit gibt, Daten zu verbergen, wenn Sie sie online stellen.
Cocco

Es ist keine Art von Verschleierung, denke ich. Er weiß jedoch, wie man eine Konsole öffnet. Vielleicht weiß er auch etwas über Base64-Codierung / -Decodierung, sehr einfach.
T.Todua

19

Versuchen Sie es mit JScrambler . Ich habe es kürzlich ausprobiert und war beeindruckt. Es bietet eine Reihe von Vorlagen für die Verschleierung mit vordefinierten Einstellungen für diejenigen, denen die Details nicht besonders wichtig sind und die es nur schnell erledigen möchten. Sie können auch eine benutzerdefinierte Verschleierung erstellen, indem Sie die gewünschten Transformationen / Techniken auswählen.


7
JScrambler-Abonnement ist sehr, sehr teuer ... Günstigstes Abonnement erfordert einen Mindestpreis von 3 Monaten für 145 US-Dollar - es ist verrückt.
Barbushin

1
Sie haben jetzt einen freien Plan. Die anderen Abonnements sind immer noch so teuer.
user7610

2
Der kostenlose Plan beinhaltet nur Optimierung und Minimierung.
Jean Hominal

1
"Der kostenlose Plan beinhaltet Optimierung und Minimierung", ja nein. Verschleierung und Optimierung passen leider nicht zusammen.
NiCk Newman

2
Wenn ich mir heute die Website von JScrambler und die Preispläne anschaue, sehe ich keine kostenlose Option. Nur eine kostenlose Testversion ..
KDT

18

Das Problem mit interpretierten Sprachen besteht darin, dass Sie die Quelle senden, um sie zum Laufen zu bringen (es sei denn, Sie haben einen Compiler zum Bytecode, aber das Dekompilieren ist ziemlich trivial).

Wenn Sie also nicht auf Leistung verzichten möchten, können Sie nur auf Variablen- und Funktionsnamen reagieren, z. Ersetzen Sie sie durch a, b ... aa, ab ... oder a101, a102 usw. Und entfernen Sie natürlich so viel Platz / Zeilenumbrüche wie möglich (das tun sogenannte JS-Kompressoren).
Das Verschleiern von Zeichenfolgen hat einen Leistungseinbruch, wenn Sie sie in Echtzeit verschlüsseln und entschlüsseln müssen. Außerdem kann ein JS-Debugger die endgültigen Werte anzeigen ...


17

Im Gegensatz zu den meisten anderen Antworten, die ich gegen YUI Compressor vorschlage; Sie sollten Google Closure verwenden .

Nicht viel, weil es mehr komprimiert, aber hauptsächlich, weil es Javascript-Fehler a = [1,2,3,];abfängt , wie zum Beispiel , dass der IE durcheinander gerät.


5
Sollte Ihr Code nicht auf Fehler und Inkompatibilität überprüft werden, bevor er verschleiert wird? hat eigentlich nichts mit Verschleierung zu tun
phil294

13

Eine nicht Open-Source-Javascript-basierte Anwendung ist ziemlich dumm. Javascript ist eine clientseitig interpretierte Sprache. Verschleierung ist nicht viel Schutz.

JS-Verschleierung wird normalerweise durchgeführt, um die Größe des Skripts zu verringern, anstatt es zu "schützen". Wenn Sie sich in einer Situation befinden, in der Ihr Code nicht öffentlich sein soll, ist Javascript nicht die richtige Sprache.

Es gibt viele Werkzeuge, aber die meisten haben aus einem bestimmten Grund das Wort "Kompressor" (oder "Minifier") im Namen.


11

Sie können den clientseitigen Code nicht sichern: Drücken Sie in Google Chrome einfach F12, unterbrechen Sie die Ausführung von Javascript, und Sie erhalten alle Zeichenfolgen, auch die verschlüsselten. Verschönern Sie es und benennen Sie Variablen um, und Sie erhalten fast den ursprünglichen Code.

Wenn Sie serverseitiges Javascript (dh NodeJS) schreiben, haben Sie Angst davor, dass sich jemand in Ihren Server hackt, und möchten, dass der Hacker schwieriger arbeitet, sodass Sie mehr Zeit haben, Ihren Zugriff wieder herzustellen , verwenden Sie Javacript-Compiler :

Sie müssen Closure Compiler für die erweiterte Kompilierung verwenden, da dies das einzige Tool ist, das alle Ihre Variablen umbenennt, auch wenn diese in mehreren Dateien / Modulen verwendet werden. Aber es gibt nur ein Problem: Es funktioniert nur, wenn Sie im Codierungsstil schreiben .


Closure Compilng verschleiert keinen Code: P
NiCk Newman

1
Es ist nicht dafür gemacht, funktioniert aber gut: Es fügt keinen zusätzlichen Code wie einige Compiler hinzu (der normalerweise umgekehrt werden kann, wie die von mir zitierten Tools), sondern ändert ihn auf ungewöhnliche Weise, einige sogar schwer rückgängig zu machen und nicht verwendeten zu entfernen Code, der im Vergleich zur echten Verschleierung gut für die Leistung ist.
Gustavo Rodrigues

1
Keine gute Idee. Das Minimieren / Kompilieren von Code auf der Serverseite kann zu Sicherheitsproblemen führen, wenn der Minifier einen Fehler aufweist: zyan.scripts.mit.edu/blog/backdooring-js
mgol

Der von Ihnen genannte Fehler gilt nur für UglifyJS: Er gilt nicht für Closure Compiler.
Gustavo Rodrigues

Für alle, die sich für das Minimieren von Javascript-Dateien interessieren, gibt es auch einen Javascript-Un-Minifier. Ich glaube also nicht, dass dies überhaupt eine Sicherheitsstufe ist
Fillipo Sniper

11

Ich kann das JavaScript Utility von Patrick J. O'Neil empfehlen . Es kann verschleiern / verdichten und komprimieren und es scheint ziemlich gut darin zu sein. Trotzdem habe ich nie versucht, es in ein Build-Skript zu integrieren.

Was das Verschleiern oder Minimieren betrifft - ich bin kein großer Fan des ersteren. Es macht das Debuggen unmöglich (Fehler in Zeile 1 ... "Warte, es gibt nur eine Zeile") und das Entpacken dauert immer einige Zeit. Aber wenn Sie müssen ... gut.


1
Das Verschleiern komprimiert es jedoch nicht unbedingt in eine Zeile. Es kann so einfach sein, wie die Funktions- und Variablennamen zu ändern oder Zeichenfolgen in base64 zu konvertieren. Durch das Minimieren wird der gesamte Code in eine Zeile eingefügt.
rw-nandemo

Heutzutage scheint UglifyJS die beste Wahl zu sein. Der Autor ist auch ein cooler Typ! :)
Tsvetomir Tsonev

In Bezug auf das Debuggen können Sie meistens Quellkarten generieren, die Sie beim Testen einbeziehen können, damit Sie sehen können, in welcher Zeile ein Fehler aufgetreten ist, auch wenn dieser minimiert ist.
Luca Steeb

5

Ich würde vorschlagen, zuerst mit etwas wie YUI Compressor zu minimieren und dann alle Zeichenfolgen und Zahlen mit etwas wie http://www.javascriptobfuscator.com/ in HEX-Werte umzuwandeln.

Damit wäre der Code nahezu unverständlich und ich denke, dass es in diesem Stadium länger dauern wird, bis ein Hacker Ihren Code nachspielt, als wenn er ihn von Grund auf neu geschrieben hätte. Umschreiben und Klonen ist das, was Sie eigentlich nicht aufhalten können. Immerhin sind wir freie Menschen!



4

Ich habe den Eindruck, dass einige Unternehmen (z. B. JackBe) verschlüsselten JavaScript-Code als zusätzliches Maß für die Verschleierung in * .gif-Dateien anstatt in JS-Dateien einfügen.


4

Probieren Sie dieses Tool Javascript Obfuscator

Ich habe es in meinem HTML5-Spiel verwendet, es hat nicht nur die Größe von 950 KB auf 150 reduziert, sondern auch den Quellcode unlesbar gemacht. Closer und Minifiers sind geschlossen. Ich persönlich weiß nicht, wie ich diese Verschleierung umkehren soll.


4

Ich benutze Jasob seit Jahren und es ist zweifellos der beste Verschleierer da draußen.
Es hat eine erweiterte Benutzeroberfläche, ist aber dennoch intuitiv und einfach zu bedienen.
Es werden auch HTML- und CSS-Dateien verarbeitet.

Der beste Weg , es zu benutzen ist , um alle Ihre Präfixe privaten Variablen mit so etwas wie ein Unterstrich, dann verwenden , um die sortFunktion zu gruppieren sie alle zusammen und überprüfen sie als Ziele für die Verschleierung ab.

Die Benutzer können Ihre Quelle sehen, aber es ist viel schwieriger zu entziffern , wenn Ihre privaten Variablen aus so etwas wie umgewandelt _sUserPreferredNickNamezu a.

Die Engine zählt automatisch die Anzahl der Zielvariablen und priorisiert sie, um die maximale Komprimierung zu erzielen.

Ich arbeite nicht für Jasob und ich habe nichts davon, sie zu promoten, nur freundliche Ratschläge zu geben.
Der Nachteil ist, dass es nicht kostenlos und ein wenig teuer ist, aber es lohnt sich trotzdem, wenn es gegen Alternativen gestapelt wird - die "kostenlosen" Optionen kommen nicht einmal nahe.


Jason scheint eher ein Minifier als ein Obfuscator zu sein. Vermisse ich etwas
Alan McBee - MSFT

4

Haben Sie Bananascript ausprobiert ? Es erzeugt stark komprimierten und völlig unlesbaren Code.


18
es komprimiert den Code gut, aber ändern Sie einfach den eval()in der letzten Zeile in console.log()und Ihre Konsole wird das Ganze ausspucken
LobsterMan

4

Ich verwende das Dienstprogramm Closure-Compiler für die Verschleierung von Java-Skripten. Es minimiert den Code und bietet mehr Optionen für die Verschleierung. Dieses Dienstprogramm ist unter Google-Code unter der folgenden URL verfügbar:
Closure Tools

Aber jetzt, seit Tagen, höre ich viel von UglifyJS. Sie können verschiedene Vergleiche zwischen Closure Compiler und UglifyJS finden, bei denen Uglify ein Gewinner zu sein scheint.
UglifyJS: Ein schneller neuer JavaScript-Kompressor für Node.js, der dem Abschluss ebenbürtig ist

Bald würde ich UglifyJS eine Chance geben.




2

Sie sollten auf jeden Fall einen Blick auf Obfuscriptor werfen .

Ich gehe über die typischen Javascript-Minimierungstricks hinaus, die wir von anderen Tools wie YUI Compressor oder Google Closure gesehen haben .

Der verschleierte Code sieht eher wie verschlüsselt aus. Im Gegensatz zu allem, was ich zuvor gesehen habe.


Danke für den Link! Ich habe gerade versucht, obfuscriptor und Code tatsächlich zu verschlüsseln (ohne Schlüssel ???). Und mein Skript von 211 auf 36 Kb komprimiert!

Beachten Sie, dass Obfuscriptor Sie darauf hinweist, dass es mit IE nicht funktioniert. Das ist für manche ein Deal Breaker.
Alan McBee - MSFT

1
Der Link auf der Antwort zeigt nicht mehr auf das Tool. Ich konnte keinen anderen Live-Hinweis darauf finden.
Buzoherbert

Der erste Link ist tot. "Obfuscriptor"
Alp Altunel

2

Wenn Sie eine JavaScript-Bibliothek verwenden, ziehen Sie das Dojo Toolkit in Betracht, das (nach geringfügigen Änderungen) mit der Kompilierung des erweiterten Modus des Closure Compilers kompatibel ist.

Dojo - Die einzige JavaScript-Bibliothek, die mit dem Closure Compiler kompatibel ist

Code, der im Closure Advanced-Modus kompiliert wurde, kann selbst nach einem Verschönerer kaum rückentwickelt werden, da die gesamte Codebasis (einschließlich der Bibliothek) verschleiert ist. Es ist auch durchschnittlich 25% klein.

Nur minimierter JavaScript-Code (YUI Compressor, Uglify usw.) lässt sich nach dem Durchlaufen eines Verschönerers leicht zurückentwickeln.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.