2010-01-13 4 views
9

Ich habe etwas JavaScript-Code, den ich verschlüsseln muss, aber ich möchte sicher sein, dass niemand es entschlüsseln kann.Wie kann ich JavaScript-Code verschlüsseln, sodass er nicht entschlüsselt werden kann?

Welche Werkzeuge kann ich verwenden, um dies zu tun?

- Bearbeiten -

Ich möchte noch den Code auf meiner Website laufen, ich will nur kann niemand sicher, sonst den Code entschlüsseln.

+14

Durch Zufall haben Sie noch den Code ausführen möchten? Ich meine, möchten Sie, dass Browser es entschlüsseln können? –

+2

Wenn Sie noch nicht Ihr Javascript geschrieben haben, denke ich, GWT ist ziemlich unleserlich. –

+0

Ja, im Wesentlichen werde ich den Code auf meiner Seite laufen lassen, aber ich möchte sicherstellen, dass niemand sonst es auf seinem Rechner ausführen kann. Um dies zu tun, werde ich Code einbeziehen, der die Domain vor dem Ausführen des Skripts überprüft, aber ich muss das natürlich verschlüsseln oder den Domain-Namen ändern. –

Antwort

23

Der Javascript-Code wird im Browser ausgeführt, d. H. Auf der Client-Seite, was bedeutet, dass er auf der Client-Seite unverschlüsselt verfügbar sein muss.

Das "Beste", was Sie tun können, ist wahrscheinlich, es zu verkleinern, was es schwerer macht, es zu verstehen - und ein bisschen von obfuscation könnte auch tun - auch wenn jemand wirklich motiviert es immer noch lesen kann.

Siehe zum Beispiel die YUI Compressor, die sowohl JS-Code minimieren und verschleiern kann.

+0

Teil des Wertes der Verkleinerung ist, dass, selbst wenn jemand wirklich dediziert den Codefluss sehen kann, sie immer noch nicht genau herausfinden können, was Sie mit Variable "a" oder "b" meinen. – Matchu

+4

Aber ein Masochist wird in der Lage sein, den Code zu analysieren und zu verstehen – ChaosPandion

+0

Es gibt Online-Code-Formatierer, die den Code "unminifyieren" können, so dass Minification den Code in keiner Weise schützt ... –

7

Es gibt keine Möglichkeit, das zu tun. Sie können es verdecken und einen Domänenprüfungscode darin haben. Oder Sie könnten es mit einem serverseitigen Skript bedienen, das die verweisende Domäne überprüft.

+0

Danke Daniel. Wenn ich es verkenne und Code für die Domain-Prüfung habe, könnten die Leute sie entschlüsseln und die Domain, die sie überprüft, ändern? –

+0

Ja, sie würden ... obskur im Grunde bedeutet die Verwendung von seltsamen Variablen/Funktion/Klasse Namen, und entfernen Sie alle Zeilenumbrüche, so dass das gesamte Javascript in einer Zeile ist. –

+1

Da es auf der Clientseite ausgeführt wird, wenn es in der Lage ist, es zu decodieren, können sie die Domäne-Überprüfung problemlos entfernen. Einige der Idee, Ihren Code unten zu verschleiern, werden helfen, aber es ist meist ein vergeblicher Versuch, weil der Code im Browser interpretiert/ausgeführt wird. – GnomeCubed

0

Ich glaube nicht, dass Sie Verschlüsselung wollen, es sei denn, Sie werden eine Browser-Erweiterung schreiben, die das Javascript entschlüsseln kann.

I Sache GWT, oder sogar jsmin kann Ihr Javascript für den normalen Gebrauch ausreichend komprimieren/verschleiern.

Wenn Sie einen clientseitigen Code an Ihre Site binden möchten, sollten Sie eine Art zufälliger Handshake in Betracht ziehen, der von einer serverseitigen Methode zum "Validieren" des Javascripts abhängt. Ich weiß nicht einmal, ob das machbar ist.

10

Wenn Sie es wirklich so verschlüsseln möchten, dass niemand es entschlüsseln kann, können Sie eine beliebige Anzahl von Verschlüsselungen verwenden. Zum Beispiel, um es manuell zu tun, könnten Sie TrueCrypt; oder, um es programmatisch zu machen, verwenden Sie die Verschlüsselungsbibliotheken, die in most languages verfügbar sind.

Wenn Sie wirklich fragen, wie man den Code verschleiert, so dass niemand es rückentwickeln kann, ist die Antwort: können Sie nicht, nicht in Javascript oder einer anderen Sprache. Das Beste, was Sie tun können, ist, es auf den Reverse-Engineers schwieriger zu machen, indem Sie es schwer lesbar machen; dafür gibt es eine beliebige Anzahl von Werkzeugen:

3

Während nicht wirklich verschlüsselt, YUI Compressor Yahoos wird komprimieren und sie JavaScript für den normalen Gebrauch verschleiern und eine bessere Komprimierung, die JSMin.

+0

Das einzige Problem ist, dass der Code danach oft nicht funktioniert. Ich habe versucht :( – Steven

+1

Das ist, weil Sie Ihren Code durch JSLINT zuerst ausführen müssen, und es den JSLINT-Test bestehen lassen. Code schlägt von einem minify wegen der Fehler in Ihrem Code fehl, den Standard (verzeihen) JS-Interpreter nicht sich beschweren Hauptsächlich unzureichende Semikola – Breton

1

Was Sie suchen, ist Verschleierung, nicht Verschlüsselung. Es gibt Tools wie JSMin und die YUI Compressor, die Ihren Code sehr unlesbar machen, bis zu dem Punkt, wo niemand versuchen würde, Sinn zu machen.Jedoch, gibt es keine Möglichkeit es so zu machen, dass jemand es nicht kopieren und auf ihrer eigenen Website einfügen und es dort ausführen kann. Ich würde mir darüber keine Sorgen machen, ehrlich gesagt, weil Sie Ihre Zeit damit verschwenden würden, etwas zu schützen, das nicht geschützt werden kann. Versuchen Sie, wenn möglich Ihre gesamte "wichtige" Logik auf die Server-Seite zu setzen, denn das ist die einzige narrensichere Methode. Wenn der Browser darauf zugreifen kann, kann dies auch jeder andere tun.

2

Microsoft verwendet Script Encoder, um Ihre JavaScript (und ASP und VBScript etc.), aber das codierte Skript arbeitete nur im Internet Explorer zu kodieren, so dass es ein großes war tabu (link)

heute nur Verschleierung ist eine Option. Aber Sie können jede Verschleierung mit Tools wie der Online JavaScript Beautifier so Pech haben. Sie können minimieren und Sie können verschleiern, aber Sie können wirklich nicht verbergen, was Sie tun.

Der beste Minimizer/Obfuscator ist wahrscheinlich Google Closure Compiler - es ist sehr fortgeschritten und könnte Ihren Code in etwas sehr schwer verständlich machen.

4

Es gibt keine Möglichkeit, dies zu tun, denn am Ende des Tages muss der Code unverschlüsselt auf dem Client-Rechner laufen, was bedeutet, dass die Routine zum Entschlüsseln des Codes neben dem verschlüsselten Code gesendet werden muss. Du gibst ihnen sowohl das Schloss als auch den Schlüssel, alles, was sie tun müssen, ist umzudrehen.

Ihr bestes Bestes ist es, es durch einen Obfuscator zu laufen, aber selbst dann ist es nicht wie jemand nicht in der Lage, es einfach selbst neu zu schreiben, ohne den Versuch, Ihren Code trotzdem zu lesen.

4

Ich denke, du verwirrst Verschlüsselung mit kompiliert binär.

Nicht einmal kommerzielle Closed-Source-Software wie Microsoft Office oder Adobe Photoshop sind verschlüsselt für die Verteilung. Aber sie werden in nativen Maschinencode kompiliert, was es schwierig macht, sie rückzuentwickeln.

JavaScript hat keine kompilierte Binärdatei. Da jedoch immer mehr Browser zur Bytecode-Kompilierung übergehen, um eine schnellere Leistung zu erzielen, können wir eines Tages ein kompiliertes JavaScript-Quellformat haben. Vielleicht, analog zu Pythons .py und .pyc Dateien, werden wir vielleicht eine .jsc oder JavaScript Compiled Datei haben, die dem Browser in binärer Form geliefert werden kann, um in ihrer JavaScript virtuellen Maschine zu laufen.

Nichts dergleichen existiert jedoch noch. Und selbst wenn, dann ist das nur eine intensivere Verschleierung. Verschleierung ist in Ordnung, um gelegentlichen Kopieren und Teilen zu verhindern, aber wenn Sie wirklich Ihr geistiges Eigentum schützen müssen, verschieben Sie die logische Server-Seite.

0

Dies ist genau DRM: Sie geben dem Benutzer eine Sperre, und auch den Schlüssel dazu, und erwarten zu können, was sie damit tun können.

Es ist theoretisch unmöglich: Wenn ihr Computer den Code ausführen kann, muss er dort unverschlüsselt sein.

Es ist praktisch auch unmöglich: Schau dir alle an, die DVDs auf Linux-Boxen ansehen, um zu sehen, wie erfolgreich du sein kannst.

3

Was Sie wollen, ist theoretisch und praktisch unmöglich. Die Leute werden dir sagen, dass es nicht möglich ist, und du denkst vielleicht "Nun, das ist, weil niemand hart genug versucht hat". Nein.Es ist unmöglich, die n-te Primzahl in linearer oder konstanter Zeit zu berechnen. Es ist unmöglich auf die gleiche Art und Weise, wie das Halteproblem unmöglich zu lösen ist. "Was meinst du, 2 + 2 ist nicht gleich fünf? Du versuchst es nicht hart genug!"

Nicht nur ist es unmöglich, aber die Motivation für solche Dinge sind normalerweise ziemlich fehlgeleitet. Es ist immer ein grundlegender Fehler zu versuchen, Technologie zu verwenden, um ein Problem zu lösen, das im Grunde ein rechtliches Problem ist. Sie möchten Ihren Code vielleicht vor "Piraten" oder Konkurrenten schützen? Es ist nicht wahrscheinlich, dass Sie etwas besonders wertvolles Stehlen geschrieben haben, aber wenn Sie haben, und Sie nicht wollen, dass Leute es stehlen, dann ist Ihre einzige wahre Zuflucht Rechtsstaatlichkeit.

Aber auf einer größeren Ebene wird Ihr Problem wahrscheinlich nicht Konkurrenten oder Piraten sein, die Ihren Code stehlen. Ihr Problem wird geschäftsorientiert sein: Gewinnung eines Publikums durch die Herstellung eines Qualitätsprodukts und den richtigen Preis und mit ausreichendem Marketing. Sie tun das richtig, jemand, der Ihren Code stiehlt, spielt keine Rolle. Sie tun es richtig, und das "authentische Original" zu haben scheint einen echten Wert zu haben. In der Tat, wenn Sie Ihre Sachen Open Source veröffentlichen, kann es Ihnen nur wirklich helfen, denn dann haben Sie eine Armee von interessierten Amateuren, die kostenlos für Sie arbeiten. Piraterie und Reverse Engineering ist eigentlich ein Glücksfall, weil es bedeutet, dass die Leute an Ihrem Produkt genug interessiert sind, um es zu verbessern. Das Beste ist, was immer Sie tun können, um das zu ermöglichen.

Wenn Ihr Unternehmen einig Javascript Geheimnis hängt wirklich zu halten, dann haben Sie haben im Grunde einen Fehler in Ihrem Business-Plan auf Stufe 1.

Wenn Ihr Unternehmen eine JavaScript-Bibliothek verkauft (solche Dinge existieren!) Dann geht es dir nicht schlechter als jedem anderen Softwareverkäufer. Das Beste, was Sie tun können, ist, es gegenüber ehrlichen Unternehmen zu vermarkten, die kein Problem damit haben, Ihnen Geld zu geben. Die Leute, die deine Sachen pirschen, haben sowieso nicht die Absicht, dich zu bezahlen - und haben den grundlegenden Nachteil, dass sie keinen technischen Support oder regelmäßige Wartungsupdates bekommen.

Wenn dies keine geschäftliche Anstrengung ist, dann habe ich wirklich keine Ahnung, warum Sie überhaupt stören. Richtige Gutschrift?

Verwandte Themen