Zum Inhalt springen

Javascript für Adobe Illustrator 2022 verschlüsseln

Von Null auf ... Javascript in Illustrator – eine kurze, einfache Einführung, Teil 05. Javascript als jsxbin verschlüsseln bzw. kompilieren. Programmier-Helfer, programmer’s helper, programming helper.

(Info:) (Update:) Im fünften Artikel »Javascript für Adobe Illustrator 2022 verschlüsseln« erfahren Sie in kurzen Mini-Tutorials Von Null auf …, wie Sie ein Javascript für Adobe Illustrator, Photoshop, InDesign, InCopy, Bridge oder FrameMaker verschlüsseln können und welche Vorteil und Nachteile dies hat. Dieser Artikel funktioniert auch mit älteren Versionen von (AI:), (PS:), (ID:), (IC:), (BR:) oder (FM:).
(Update:) 02.11.2022: Es ist doch möglich eine verschlüsselte .jsxbin-Datei per #Include nachzuladen und deren Funktionen zu benutzen, (siehe:) unten.

(Tipp:) Wenn Sie noch nicht mit Javascript vertraut sind, dann lesen Sie zuerst die Artikel »Illustrator mit Javascript automatisieren«.

(Hilfe:) Sie wollen oder können nicht selbst programmieren? Sie brauchen kurzfristig ein Javascript für eine Automatisierung für ein aktuelles Problem in Illustrator oder einem anderen Adobe Programm? Dann helfe ich Ihnen gerne als JavaScript-Entwickler mit meiner jahrzehntelang Programiererfahrung.
Schreiben Sie mir einfach und unverbindlich per Kontaktformular.

Inhaltsverzeichnis

Adobe ExtendScript

Das Scripting (Programmierung) in Adobe Illustrator basiert auf Adobe ExtendScript, eine Abart von ECMAScript 3, kurz ES3, und ist somit ein Dialekt von Javascript. Die Dateiendung eines Adobe ExtendScript ist ».jsx«. Trotzdem spricht man auch bei den Adobe Programmen von Javascripts. Javascripts haben übrigens die Endung ».js«.

Vorteile und Nachteile, ein Javascript zu verschlüsseln

Ein Computerprogramm (Quellcode) maschinenlesbar zu machen, nennt man kompilieren und das Programm, das den Quellcode umwandelt, heißt Compiler. Es gibt diese Möglichkeit auch für Javascripts, die in einem Adobe Programm ablaufen sollen.

(Gut:) Der Vorteil ein Javascript zu verschlüsseln liegt darin, dass es für den Menschen nicht lesbar ist. So können Sie Ihre Programmierung vor neugierigen Augen verbergen. Das ist ideal für …

  • Demo-Versionen, die nur eine bestimmte Anzahl (zum Beispiel 10) von Objekten bearbeitet.
  • Schutz der Algorithmen und Programmierung.
  • (Update:) Haben Sie Ihr Javascript der besseren Lesbarkeit wegen in mehrere Dokumente zerlegt, die mit dem Befehl #include geladen werden, so werden diese include-Dateien durch das Kompilieren (verschlüsseln) automatisch eingebunden.
    Eine praktische Sache, die ich in einem weiteren Javascript als Programmier-Helfer gerade für unverschlüsselte Javascripts umsetze. (siehe:) Artikel »Javascript Packe verschlüsseltes JSX in eine JSX-Datei«.
  • (Achtung:) Es ist nicht möglich eine verschlüsselte jsxbin-Datei direkt mit dem Befehl #include in ein Javascript einzubinden. Der Befehl #include 'test.jsxbin'; erzeugt beim Starten eines Javascripts eine Fehlermeldung. Doch es gibt einen Trick: (siehe:) xxx.

(Schlecht:) Der Nachteil ist, dass durch die Verschlüsselung dem Benutzer nicht klar ist, was das Javascript macht. Es könnte ja auch einen Schadcode enthalten. Um Vertrauen zu schaffen für die, die in den Quellcode anschauen, sollte der Binärcode von Kommentaren mit Erklärungen zum Javascript begleitet sein. Wie das geht, erfahren Sie weiter unten.

(Hinweis:) Das verschlüsselte Javascript ist auch nicht schneller als ein unverschlüsselte Javascript.
(siehe:) »Javascript Schleifenoptimierung für Illustrator 2022«.

(Achtung:) Bewahren Sie den unverschlüsselten Quellcode Ihres Javascript gut auf. Ein Rückverwandeln (dekompileren) ist schwierig und liefert Ihnen nicht die Originaldatei zurück! Denn alle Kommentare werden beim Verschlüsseln gelöscht, um die Datei kompakter zu machen.

Javascript für Adobe Illustrator 2022 mit ESTK verschlüsseln

Sie lesen, wie auch hier, immer von »Javascript« für Adobe Programme. Jedoch nennt Adobe die Programmiersprache »ExtentScript«, weil es Abweichungen und Erweiterungen gegenüber dem klassischen Javascript gibt.

Folgerichtig hatte Adobe ein »ExtentScript Toolkit«, kurz ESTK, entwickelt, um Skripte zu schreiben und zu testen. Mit der Umstellung der Betriebssysteme von 32-Bit auf 64-Bit, wurde das ESTK von Adobe eingestellt.

(Win:) Für Windows können Sie das ESTK kostenlos herunterladen und benutzen.
(Mac:) Für macOS (bis Version 10.14 Mojave) können Sie das ESTK kostenlose herunterladen und benutzen.
(externer Link:) https://github.com/Adobe-CEP/CEP-Resources/tree/master/ExtendScript-Toolkit
(Hinweis:) Adobe empfiehlt mit dem Visual Studio Code von Microsoft zu arbeiten, das auf macOS und Windows läuft.

So erstellen Sie aus einem Javascript in ESTK eine verschlüsselte Datei (Binärdatei)

Von Null auf ... Javascript in Illustrator – eine kurze, einfache Einführung, Teil 05. Javascript als jsxbin verschlüsseln bzw. kompilieren.
So exportieren Sie ein Javascript in ESTK als Binäredatei (verschlüsselte Datei).

(A:) Schreiben Sie Ihr Javascript im Editor und speichern Sie es als ».js« oder ».jsx«-Datei ab.

(B:) Rufen Sie den Menübefehl »Datei > Als Binäredatei exportieren…« auf.

(C:) Belassen Sie den vorgeschlagenen Dateityp »*.jsxbin«.

(D:) Geben Sie der Datei einen Namen.
(Tipp:) 1. Vergeben Sie einen anderen Namen in dem Sie »_bin« an den Namen anhängen. So wird aus »Hallo-Welt« dann »Hallo-Welt_bin«. So können Sie die beiden Dateien auseinanderhalten und überschreiben nicht das ursprüngliche Javascript. Denn …
(Tipp:) 2. Ändern Sie die Endung ».jsxbin« gleich hier im Editor in ».jsx«. So kann (AI:), (PS:) oder (ID:) das verschlüsselte Javascript als Binäredatei direkt ausführen.

Wenn Sie die eben erstellte verschlüsselte Javascript-Datei (Binärdatei) mit einem Texteditor öffnen, dann sehen Sie nur einen Buchstabensalat. Das kann dann so aussehen:

@JSXBIN@ES@2.0@MyBbyBn0ABJCnAEjzFjBjMjFjSjUBfRBFeLiIjBjMjMjPhAiXjFjMjUhBff0DzACB
yB

(Achtung:) Verändern Sie nichts in der verschlüsselten Javascript-Datei (Binärdatei), denn sonst wird das Javascript nicht mehr laufen!

Javascript für Adobe Illustrator 2022 mit Visual Studio Code verschlüsseln

Wenn das ESTK auf Ihrem Computer nicht (mehr) läuft oder Sie gleich mit dem neuen Programm Visual Studio Code (VSC) arbeiten wollen, dann können Sie es kostenlos herunterladen:
(externer Link:) https://code.visualstudio.com

Außerdem benötigen Sie noch die Erweiterung von Adobe.
(externer Link:) https://marketplace.visualstudio.com/items?itemName=Adobe.extendscript-debug

So erstellen Sie aus einem Javascript in VSC eine verschlüsselte Datei (Binärdatei)

Von Null auf ... Javascript in Illustrator – eine kurze, einfache Einführung, Teil 05. Javascript als jsxbin verschlüsseln bzw. kompilieren.
So exportieren Sie ein Javascript in VSC als Binäredatei (verschlüsselte Datei).

(A:) Schreiben Sie Ihr Javascript im Editor und speichern Sie es als ».js« oder ».jsx«-Datei ab.

(B:) Machen Sie im Editor mit der rechten Maustaste (MBR:) einen Klick und …

(C:) … wählen Sie aus dem Kontext-Menü den Befehl »Als Binärdatei exportieren…« aus.

(D:) Lassen Sie den Namen und die Endung ».jsxbin«, wie Sie VSC vorschlägt.

(E:) Nur für (AI:) – Im Betriebssystem können Sie die Datei von »Hallo-Welt.jsxbin« in »Hallo-Welt_bin.jsx« umbenennen. So kann (AI:) das verschlüsselte Javascript als Binäredatei direkt ausführen.
Für (BR:), (FM:), (IC:), (ID:) und (PS:) ist der Schritt (E:) nicht notwenig.

(Hinweis:) VSC fügt Zeilenumbrüche in den verschlüsselten Quellcode ein. Trotzdem ist das verschlüsselte Javascript mit der Endung ».jsx« in den Adobe Programmen lauffähig, die Javascripts ablaufen lassen können.

Ein verschlüsseltes Javascript ausführen

Sie können ein verschlüsseltes Javascript ».jsxbin« (Binärdatei) in (BR:), (FM:), (IC:), (ID:) und (PS:) aufrufen und ausführen. (Achtung:) Einzig Adobe Illustrator versteht die Endung ».jsxbin« nicht, jedoch können Sie die Endung in ».jsx« ändern und dann läuft auch dort das verschlüsseltes Javascript.

Kommentare am Anfang des verschlüsselten Javascripts einfügen

(Achtung:) Wenn Sie versuchen vor den Binärcode in dem eben erstellen verschlüsselten Javascript Kommentarzeilen hinzuzufügen. Dann ist das verschlüsselten Javascript nicht mehr lauffähig.
(Achtung:) Achten Sie beim Öffnen eines verschlüsselten Javascript mit einem Texteditor auch darauf, dass keine Zeilenumbrüche vom Editor eingefügt werden. Denn auch in diesem Fall, ist das verschlüsselte Javascript nicht mehr lauffähig.

// Kommentare vor dem Binärcode zerstören die Lauffähigkeit des Javascripts
@JSXBIN@ES@2.0@MyBbyBn0ABJCnAEjzFjBjMjFjSjUBfRBFeLiIjBjMjMjPhAiXjFjMjUhBff0DzACB
yB

(Tipp:) Jedoch gibt es eine Lösung. Sie müssen das verschlüsselte Javascript von einem unverschlüsselten Javascript aufrufen lassen. Dazu gibt es in Javascript zwei Möglichkeiten.

(Schlecht:) Ein verschlüsselten Javascripts mit »eval« aufrufen

// Ein Kommentar vor dem verschlüsselten Javascript-Code,
// der mit Eval() aufgerufen wird.
eval("@JSXBIN@ES@2.0@MyBbyBn0ABJCnAEjzFjBjMjFjSjUBfRBFeLiIjBjMjMjPhAiXjFjMjUhBff0DzACByB");

Die Funktion eval() führt in Javascript den nachfolgenden String als Javascript aus.
(Stop:) Leider ist das eine gefährliche Sache, da eval() den Code blind mit vollen Rechten ausführt. Im Web wird daher vor dieser Funktion eindringlich gewarnt: »Never use eval()!« oder »eval() is evil!«

Zum Glück gibt es eine Alternative mithilfe von function().

(Gut:) Ein verschlüsselten Javascripts mit »function« aufrufen

// Ein Kommentar vor dem verschlüsselten Javascript-Code,
// der mit function() ausgerufen wird.
var fCode = new Function ("@JSXBIN@ES@2.0@MyBbyBn0ABJCnAEjzFjBjMjFjSjUBfRBFeLiIjBjMjMjPhAiXjFjMjUhBff0DzACByB")
fCode.apply(null); // führe Funktion aus

Die new Function () enthält den verschlüsselten Javascript-Code als String. Die Methode .apply(null) führt dann die Funktion aus. Dieses Vorgehen ist sicherer als das obere.

(Achtung:) Wie oben erwähnt, enthält das von VSC verschlüsselte Javascript Zeilenumbrüche. Kopieren Sie den verschlüsselte Javascript unverändert in die Funktion, wird das Javascript nicht laufen.
(Tipp:) Sie müssen vor dem Kopieren die Zeilenumbrüche entfernen.

Eine verschlüsselte jsxbin-Datei mit #include einladen

(Update:) 02.11.2022: Es ist doch möglich, eine verschlüsselte jsxbin-Datei mit #include einladen.

(Beispiel:) Die Datei »fHello.jsx« lautet wie folgt:

function fHello() {
alert("Hello from the include file");
}

Wird diese nun – wie oben beschrieben – mit Visual Studio Code zu einer binären Datei verschlüsselt, so erhält man folgendes:

@JSXBIN@ES@2.0@MyBbyBnABMAbyBn0ABJBnAEjzFjBjMjFjSjUBfRBFegbiIjFjMjMjPhAjGjSjPjNh
AjUjIjFhAjJjOjDjMjVjEjFhAjGjJjMjFff0DzGjGiIjFjMjMjPCAC0EzADByB

Diese Datei hat dann die Endung ».jsxbin«. Der Versuch in einem anderen Javascript mit #include 'fHello.jsxbin'; diese Datei einzuladen schlägt fehlt. Es tritt eine Fehlermeldung beim ersten Start des Javascripts auf.

Der Trick, dass es trotzdem geht

In dem Artikel »Javascript Packe verschlüsseltes JSX in eine JSX-Datei« wurde beschrieben, wie Sie mit einem weiteren Javascript eine verschlüsselte Datei in eine normale .jsx-Datei setzen können.

Wenn Sie nun das Javascript »placeJSXBINintoJSX.jsx« auf die Datei »fHello.jsxbin« anwenden, dann erhalten Sie die Datei »fHello_bin.jsx« mit dem folgenden Inhalt:

// Made with placeJSXBINintoJSX. You can replace and add to this comment line.
var fCode = new Function ("@JSXBIN@ES@2.0@MyBbyBnABMAbyBn0ABJBnAEjzFjBjMjFjSjUBfRBFegbiIjFjMjMjPhAjGjSjPjNhAjUjIjFhAjJjOjDjMjVjEjFhAjGjJjMjFff0DzGjGiIjFjMjMjPCAC0EzADByB")
fCode.apply(null);
// end of javascript

Nun können Sie in einem anderen Javascript mit #include 'fHello_bin.jsx'; diese veränderte Datei ohne Probleme einladen und deren Funktion, hier fHello();, nutzen.

Fazit

Das Verschlüsseln von Javascripts für Adobe Programme wie (AI:), (PS:), (ID:), (IC:) oder (BR:) ist mithilfe von Visual Studio Code möglich. Jeder Programmierer muss selbst entscheiden, ob sich der Aufwand für ihn lohnt.

(Tipp:) Das Entfernen der Zeilenumbrüche aus dem verschlüsselte Javascript und das Einfügen in die eine Funktion ist eine typische Aufgabe für den Kumpel Computer. Daher habe ich dafür das Javascript »placeJSXBINintoJSX.jsx« geschrieben.

ENDE

(Hilfe:) Wenn Sie eine Funktion in (AI:), (PS:), (IC:), (ID:) oder (FM:) benötigen, jedoch nicht selbst programmieren, dann sprechen Sie mich an. Ich übernehme gerne kleine Aufträge: zum Kontaktformular.