Frage

Ich mag eine JavaScript-Anwendung machen, die nicht Open Source ist, und damit möchte ich lernen, wie man meinen JS-Code zu verschleiern? Ist das möglich?

War es hilfreich?

Lösung

Obfuscation:

Versuchen Sie YUI Compressor . Es ist ein sehr beliebtes Instrument, gebaut, erweitert und gepflegt von der Yahoo UI-Team.

Sie können auch verwendet werden:

Privat String Daten:

string Keeping Werte Private ist eine andere Sorge, und Verschleierung wird nicht wirklich viel Nutzen sein. Natürlich, indem Sie Ihre Quelle in eine verstümmelte, minimierte Chaos Verpackung, haben Sie eine Light-Version von Sicherheit durch Dunkelheit . Die meiste Zeit, ist es Ihre Benutzer, den die Quelle sehen und die String-Werte auf dem Client sind für ihre Verwendung vorgesehen, so dass eine Art privaten string Wertes ist nicht oft notwendig.

Wenn Sie wirklich einen Wert haben, dass man nie einen Benutzer sehen wollte, würden Sie ein paar Optionen. Erstens könnte man eine Art von Verschlüsselung tun, die bei Laden der Seite entschlüsselt. Das wäre wahrscheinlich einer der sichersten Möglichkeiten, aber auch eine Menge Arbeit, die nicht notwendig sein kann. Sie könnten wahrscheinlich einige String-Werte base64 kodieren, und das wäre einfacher .. aber jemand, der wirklich diese String-Werte konnten wollte leicht entschlüsseln sie . Verschlüsselung ist der einzige Weg, wirklich zu verhindern, dass jemand Zugriff auf Ihre Daten, und die meisten Leute finden, dass mehr Sicherheit zu sein, als sie benötigen.

Nebenbei bemerkt:

Obfuscation in Javascript ist bekannt, einige Fehler verursachen. Die obfuscators werden immer ein wenig besser darüber, aber viele Outfits entscheiden, dass sie genug profitieren von Verkleinerungs und Gzipping , und die zusätzlichen Einsparungen in Höhe von Verschleierungs sehen, ist nicht immer die Mühe wert . Wenn Sie versuchen, Ihre Quelle zu schützen, vielleicht werden Sie entscheiden, dass es die Mühe wert ist, nur Ihr Code schwerer zu lesen. JSMin ist eine gute Alternative.

Andere Tipps

Ich bin überrascht, niemand Google Closure Compiler erwähnt hat. Es ist nicht nur minify / komprimiert, analysiert sie zu finden und nicht verwendeten Code zu entfernen, und neu schreibt für maximale Verkleinerungs. Es kann auch Typprüfung tun und wird über Syntaxfehler warnen.

JQuery vor kurzem wechselte von YUI Compresser zu Closure Compiler und sah eine " solide Verbesserung "

Obfuscation kann nie wirklich funktionieren. Für alle, die wirklich auf den Code bekommen will, es ist nur eine Geschwindigkeit Beule. Schlimmer noch, hält es die Benutzer von Fehler zu beheben (und die Updates zurück zu Ihnen versendet) und macht es schwieriger für Sie Probleme auf dem Gebiet zu diagnostizieren. Es ist eine Verschwendung von Zeit und Geld.

Sprechen Sie mit einem Anwalt über Rechte an geistigem Eigentum und was Ihre rechtlichen Möglichkeiten sind. "Open Source" bedeutet nicht, "Menschen, die Quelle lesen kann". Stattdessen ist Open Source eine Erlaubnis insbesondere Gewährung Lizenzmodell frei zu verwenden und den Code zu ändern. Wenn Sie nicht über eine solche Lizenz erteilt, dann kopieren Menschen Code sind in Verletzung und (in den meisten der Welt) haben Sie rechtlichen Möglichkeiten, sie zu stoppen.

Die einzige Möglichkeit, wirklich Ihr Code schützen kann, ist es nicht zu versenden. Bewegen Sie die wichtige Code-Server-Seite und haben Ihren öffentlichen Javascript-Code zu tun Ajax es nennt.

Sehen Sie meine vollständige Antwort über obfuscators hier.

Sie können die JavaScript-Quelle wollen alles, was Sie verschleiern, aber es wird immer Reverse-engineerable nur auf Grund erfordert die alle Quellcode tatsächlich auf dem Client-Rechner laufen ... die beste Option, die ich denken kann ist, alle mit Ihre Verarbeitung mit serverseitigen Code getan, und alle Client-javaScript-Code ist Anforderungen für die Verarbeitung selbst an den Server sendet. Ansonsten jemand immer in der Lage sein, den Überblick über alle Vorgänge zu halten, dass der Code tut.

Jemand erwähnte base64 zu halten Strings sicher. Dies ist eine schreckliche Idee. Base64 ist sofort von den Arten von Menschen zu erkennen, die Ihren Code Reverse Engineering wollen würden. Das erste, was sie tun werden unencode es ist, und sehen, was es ist.

Es gibt eine Reihe von JavaScript-Verschleierung Tools, die frei verfügbar sind; aber ich denke, es ist wichtig zu beachten, dass es schwierig ist, JavaScript zu dem Punkt, zu verschleiern, wo es nicht zurückentwickelt werden kann.

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

  • YUI Compressor . Yahoo! 'S JavaScript Kompressor macht einen guten Job, den Code zu kondensieren, der seine Ladezeit zu verbessern. Es gibt ein kleines Maß an Verschleierung, die relativ gut funktioniert. Im Wesentlichen wird Compressor Funktionsnamen ändern, entfernen Sie Leerraum und lokale Variablen ändern. Dies ist, was ich am häufigsten verwenden. Dies ist ein Open-Source-Java-basiertes Tool.

  • JSMin ist ein Werkzeug von Douglas Crockford geschrieben, zu minify sucht Ihre JavaScript-Quelle. In Crockford eigenen Worten „nicht JSMin nicht verschleiern, aber es verunstaltet.“ Es ist primäres Ziel ist es, die Größe der Quelle für schnelleren Laden in Browsern minify.

  • Freie JavaScript Obfuscator . Dies ist ein web-basiertes Tool, das Ihren Code zu verschleiern versucht, indem sie es tatsächlich kodiert. Ich denke, dass der Trade-offs von seiner Form der Codierung (oder Verschleierung) auf Kosten der Dateigröße kommen könnte; aber das ist eine Frage des persönlichen Geschmacks.

Was ich tun würde:

A. Troll den Hacker!

Dies ist im zweiten Teil meines gefälschter / verschleierter Geheimnis Javascript-Code LAUNCHER sein wird. Diejenige, die Sie sehen in dem Quellcode.

Was bedeutet diesen Code?

  1. lädt die echten Code
  2. setzt ein benutzerdefinierter Header
  3. Stellen Sie 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. Obfuscate den Code ein wenig

Was ist das?

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

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

C Erstellen Sie eine harte PHP-Datei mit dem realen Code innerhalb

anzuzeigen

Was bedeutet diese PHP-Code?

  1. Prüft das Recht Referrer (Domain / dir / Code des Launchers)
  2. Checks für den benutzerdefinierten Header
  3. Checks für die benutzerdefinierte POST Variable

Wenn alles in Ordnung ist es zeigt Ihnen den richtigen Code sonst einen falschen Code oder Verbot ip, Seite schließen .. was auch immer.

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

Jetzt .. Wenn Sie Ereignishandler in der SECRET definieren javascript es wahrscheinlich zugänglich .. Sie müssen sie mit dem launchcode außen definieren und deutete auf eine verschachtelte SECRET Funktion.

SO ... gibt es eine einfache wayto den Code bekommen? document.body.appendChild(document.createElement('div')).innerText='Awesome';

Ich bin mir nicht sicher, ob das funktioniert, aber ich bin mit Chrom und geprüft Elemente, Ressourcen, Netzwerk, Quellen, Timeline, Profile, Audits, aber ich die Linie nicht oben finden.

note1. Wenn u die Troll.php URL öffnen von Inspect element-> Netzwerk in Chrom Sie den falschen Code zu erhalten

note2: der gesamte Code ist für modernen Browser geschrieben. polyfill Bedürfnisse viel mehr Code.

EDIT

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

Versuchen Sie JScrambler . Ich habe es einen Spin vor kurzem und wurde von ihm beeindruckt. Es bietet eine Reihe von Vorlagen für die Verschleierung mit vordefinierten Einstellungen für diejenigen, die nicht über die Details viel kümmern und wollen einfach nur, um es schnell zu erledigen. Sie können auch benutzerdefinierte Verschleierungs erstellen, indem Sie, was Transformationen / Techniken, die Sie wollen.

Das Problem mit interpretierten Sprachen ist, dass Sie die Quelle senden lassen ihnen zu arbeiten (es sei denn Sie einen Compiler Bytecode, aber dann wieder, es ist ziemlich trivial zu dekompilieren).

Also, wenn Sie nicht wollen, die Leistung zu opfern, können Sie nur auf Variable und Funktionsnamen handeln, z. B. sie mit a, b ... aa, ab ersetzen ... oder a101, a102, usw. Und natürlich, entfernen Sie so viel Platz / Zeilenumbrüche wie möglich (das ist, was so genannte JS Kompressoren tun).
Verschleiern Strings eine Leistung getroffen haben, wenn Sie sie verschlüsseln und entschlüsseln sie in Echtzeit. Plus eine JS Debugger die endgültigen Werte zeigen können ...

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

Nicht viel, weil es komprimiert mehr, aber vor allem, weil es JavaScript-Fehler wie a = [1,2,3,]; fängt die IE machen drunter und drüber gehen.

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

JS Verschleierung erfolgt in der Regel die Größe des Skripts zu reduzieren, anstatt „schützen“ sie. Wenn Sie in einer Situation, wo Sie nicht wollen Ihr Code öffentlich zu sein, Javascript ist nicht die richtige Sprache ..

Es gibt viele Tools um, aber die meisten haben das Wort „Kompressor“ (oder „minifier“) in seinem Namen für einen Grund ..

Sie können nicht sichere Client-Seite Code: drücken Sie einfach F12 auf Google Chrome, Pause Ausführung von JavaScript und Sie werden alle Strings erhalten, auch solche, verschlüsselt. Verschönern es und umbenennen Variablen und Sie fast den ursprünglichen Code erhalten.

Wenn Sie Server-Seite gerade schreiben Sie Javascript (dh NodeJS) fürchtet sich vor jemand in Ihrem Server Hacking und wollen, dass die Hacker-Arbeit schwieriger zu machen, mehr Zeit für Ihren Zugang wieder zu bekommen, verwenden Sie Javacript Compiler :

Sie müssen Closure Compiler für Advanced Compilation verwenden, da es das einzige Werkzeug ist, dass alle Variablen umbenennt, auch wenn diese in mehreren Dateien / Module verwendet werden. Aber es hat nur ein Problem: Es funktioniert nur, wenn Sie in sie schreiben Stil Codierung

kann ich JavaScript-Dienstprogramm von Patrick J. O'Neil empfehlen. Es kann / compact verschleiern und komprimieren und es scheint, auf diese ziemlich gut zu sein. Das heißt, ich habe nie versucht, es in einem Build-Skript jeder Art integriert werden.

Wie bei vs. Verkleinerungs Verschleiern - Ich bin kein großer Fan des ehemaligen. Es macht das Debuggen nicht möglich (Fehler in Zeile 1 ... „warten, gibt es nur eine Zeile“) und sie immer Zeit in Anspruch nehmen zu entpacken. Aber wenn Sie brauchen, um ... na ja.

würde ich zuerst minify mit so etwas wie YUI Compressor, schlagen und dann alle Zeichenfolge und Zahlen HEX Werte konvertieren mit so etwas wie http : //www.javascriptobfuscator.com/

Damit würde der Code in der Nähe unmöglich gemacht werden, um zu verstehen, und ich denke, in diesem Stadium wird es Zeit für einen Hacker, um Ihren Code als tatsächlich nachspielen, wenn er von Grund auf neu geschrieben. Umschreiben und Klonen ist, was Sie wirklich stoppen kann nicht. Schließlich sind wir frei Leute!

Dean Edwards Packer ist ein ausgezeichnetes obfuscator, obwohl es in erster Linie den Code verschleiert, keine String-Elemente, die Sie in Ihrem Code haben.

Siehe auch: Online Javascript Kompressions-Tool und wählen Packer (Dean Edwards) aus der Dropdown-

Ich habe mit Jasob seit Jahren, und es ist zweifellos das beste obfuscator da draußen.
Es verfügt über eine erweiterte Benutzeroberfläche ist aber immer noch intuitiv und einfach zu bedienen.
Es wird auch HTML und CSS-Dateien verarbeiten.

Der beste Weg, es zu benutzen ist, um alle Ihre privat Variablen mit so etwas wie einem Unterstrich Präfix, dann verwenden Sie die sort Funktion sie zu einer Gruppe alle zusammen und überprüfen sie off als Ziele für die Verschleierung.

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

Der Motor wird Tally automatisch die Anzahl der gezielt Variablen und priorisieren sie die maximale Kompression zu erhalten.

ich arbeite nicht für Jasob und ich nichts bekommen, um sie zu fördern, nur einige freundliche Beratung anbietet.
Der Nachteil ist, dass es nicht frei ist und ist ein wenig teuer, aber es immer noch wert, wenn sie gegen Alternativen gestapelt -. Die ‚freien‘ Optionen auch nicht nahe kommen

Haben Sie versucht Bananascript ? Es produziert hochkomprimierte und völlig unleserlich Code.

Ich bin mit Closure-Compiler Dienstprogramm für die Java-Script-Verschleierung. Es minifies den Code und mehr Optionen für die Verschleierung hat. Dieses Dienstprogramm ist auf Google Code unterhalb der URL:
Closure Werkzeuge

Aber jetzt Tage Ich höre viel von UglifyJS. Sie können verschiedenen Vergleich zwischen Closure Compiler und UglifyJS in denen uglify scheint zu sein, ein Gewinner finden.
UglifyJS: Eine schnelle neue JavaScript Compressor für einen Knoten Js Das ist auf einer Stufe mit Closure

Bald würde ich Gelegenheit UglifyJS geben.

ich den Eindruck habe, dass einige Unternehmen (z.B .: JackBe) put innerhalb JavaScript verschlüsselten Code * GIF-Dateien, anstatt JS-Dateien, als zusätzliche Maßnahme der Verschleierung.

Als JavaScript / HTML / CSS obfuscator / Kompressor können Sie auch versuchen, Patu Digua .

Versuchen Sie dieses Tool Javascript Obfuscator

Ich habe es auf meinem HTML5 Spiel nicht nur reduziert sie es Größe von 950KB bis 150 machte aber auch den Quellcode nicht lesbar Schließung Compiler und minifiers sind umkehrbar Ich persönlich weiß nicht, wie diese Verschleierung rückgängig zu machen.

auf jeden Fall sollten Sie erwägen, einen Blick auf Obfuscriptor .

I geht über die typischen Javascript minifying Tricks, die wir von anderen Werkzeugen gesehen habe wie YUI Compressor oder Google Closure .

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

diesem einen minifies aber verschleiern nicht. Wenn Sie Java nicht Befehlszeile verwenden möchten, können Sie Ihr Javascript in ein Web-Formular einfügen.

Wenn Sie eine JavaScript-Bibliothek verwenden, Dojo Toolkit betrachten, die kompatibel ist (nach geringfügigen Änderungen) mit dem erweiterten Modus Kompilation des Closure Compiler.

Dojo - die einzige JavaScript-Bibliothek Kompatibel mit der Schließung Compiler

Code mit Closure Advanced-Modus kompiliert ist fast unmöglich, ein Reverse-Engineering, auch nicht durch einen beautifier vorbei, als die gesamte Code-Basis (includinhg die Bibliothek) verschleiert wird. Es ist auch 25% im Durchschnitt klein.

JavaScript-Code, nur minimiert ist (YUI Compressor, verunstaltet etc.) ist leicht Reverse-Engineering, nachdem er durch einen beautifier vorbei.

Ich habe dies in der Vergangenheit verwendet, und es macht einen guten Job. Es ist nicht kostenlos, aber Sie sollten auf jeden Fall einen Blick darauf werfen.
JavaScript Obfuscator & Encoder

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top