meta data for this page
Verschlüsseln
Wenn man verhindern will, dass jemand in den Klartext eines selbst erstellten Skripts schaut und ggf. den Code ändert, muss das Skript verschlüsselt werden. Dazu bietet Microsoft einen Encoder an. Die Installationsdatei SCE10DE.exe ist zu finden auf der Seite
http://www.microsoft.com/downloads/details.aspx?displaylang=de&FamilyID=e7877f67-c447-4873-b1b0-21f0626a6329
Die Installation erzeugt die Hilfsdatei SCRENC.chm und den eigentlichen Decoder SCRENC.exe.
Der Encoder ist ein Befehlszeilentool mit dem man beispielsweise
- aus einer vbs-Datei eine verschlüsselte vbe-Datei oder
- aus einer js-Datei eine verschlüsselte je-Datei
erzeugen kann.
Dabei kann man die Datei unterteilen in einen unverschlüsselten Teil am Anfang und dem restlichen, verschlüsselten Teil. Dies geschieht durch Eintragen der Marke
'**Start Encode** bei vb-Skripten bzw. //**Start Encode** bei j-Skripten
ab der der Code verschlüsselt wird.
Bei FixFoto-Skripten kann man damit den Kopf, bestehend aus
'FFSubmenu=... bzw. //FFSubmenu=... (Name der Kategorie für das Skript) 'FFName=... bzw. //FFName=... (Name des Skriptes innerhalb der festgelegten Kategorie)
unverschlüsselt lassen.
Verschlüsselungsbeispiel
Der Encoder ist gespeichert im Ordner
D:\Skripte\screnc.exe
Das FixFoto-Skript Ordner_Liste.vbs mit gesetzter Startmarke, abgelegt im Pfad
D:\FixFoto\Script\Ordner_Liste.vbs
sieht so aus:
'FFSubmenu=Test 'FFName=Ordnerliste 'Anzeige des aktiven Ordners und aller Unterordner '**Start Encode** Option Explicit Dim objFS,objFolder Set objFS = CreateObject("Scripting.FileSystemObject") Set objFolder = objFS.GetFolder(FF_GetImagePath) Dim Ordnerliste call AlleOrdner(objFolder) Set objFolder = nothing Set objFS = nothing msgbox Ordnerliste,vbInformation,"Ordner und Unterordner" '------------------------------------------------------------- Sub AlleOrdner(ByVal Startordner) Dim Unterordner Ordnerliste = Ordnerliste & Startordner & vbNewLine For Each Unterordner In Startordner.subfolders AlleOrdner Unterordner Next End Sub '-------------------------------------------------------------
Die Kommandozeile zum Verschlüsseln (unbedingt alles in eine Zeile schreiben) muss so aussehen:
"D:\Skripte\screnc.exe" "D:\FixFoto\Script\Ordner_Liste.vbs" "D:\FixFoto\Script\Ordner_Liste.vbe"
und wird am besten als Batchdatei, z.B. Verschluesseln.bat abgespeichert und dann ausgeführt.
Das Ergebnis ist die verschlüsselte Skriptdatei Ordner_Liste.vbe
'FFSubmenu=Test 'FFName=Ordnerliste 'Anzeige des aktiven Ordners und aller Unterordner '**Start Encode**#@~^tQIAAA==@#@&@#@&}wDkW PAaw^k^kD@#@&@#@&fks~W(LsUSG4NsKV[+.@#@&?nY,G4Nsj~{PZ.nmYnr (%mOvJUmDbwDrxTRok^+jzkY+s64N+mDEb@#@&?Y~W8%wWsN.P{PG8Ns? !YoW^[Dcws|M+DqsConCY4#@#@&@#@&fbhP}DN .......
Die verschlüsselte Skriptdatei ist so wie sie hier gezeigt wird, nicht lauffähig, da sie aus Darstellungsgründen abgekürzt wurde.
Verschlüsselungsautomatisierung
Wenn man öfter Skripte verschlüsseln will, ist die oben beschriebene Vorgehensweise sehr mühsam. Um den Vorgang zu automatisieren, kann man folgendes VB-Skript (kein FixFoto-Skript) verwenden:
'Skript zum Verschlüsseln von VB- und Java-Skripten mit installiertem Encoder SCRENC '************************************** SKRIPT ****************************************************** 'Die Installationsdatei sce10de.exe für SCRENC kann herunter geladen werden von der MICROSOFT-Seite 'http://www.microsoft.com/downloads/details.aspx?displaylang=de&FamilyID=e7877f67-c447-4873-b1b0-21f0626a6329 'Der Encoder muss im selben Verzeichnis abgelegt sein wie das vorliegende Skript 'Es wird verschlüsselt ab '**Start Encode** bzw. //**Start Encode** 'Das zu verschlüsselnde Skript wird manuell auf das vorliegende Skript gezogen oder auf eine Verknüpfung davon. 'Das verschlüsselte Skript erhält die Dateiendung vbe bei vb-Skripten bzw. je bei j-Skripten 'und wird im selben Verzeichnis abgelegt wie das Original. '************************************** SKRIPT ****************************************************** Option Explicit 'Deklarationen Dim objFS,WshShell Set objFS = WScript.CreateObject("Scripting.FileSystemObject") 'FileSytemObject Set WshShell = WScript.CreateObject("WScript.Shell") Dim script,scriptpath,encoder Dim objFile,Extension,Name1,Name2,Befehl 'Feststellen wie der eigene Ordner heißt script = Wscript.ScriptFullName scriptpath = objFS.getparentfoldername(script) encoder = scriptpath & "\screnc.exe" 'Prüfen ob Datei SCRENC vorhanden ist If not (objFS.FileExists(encoder)) Then MsgBox "Der Encoder" & vbNewLine & encoder & vbNewLine & "wurde nicht gefunden!" & vbNewLine & _ "Das Skript wird abgebrochen.",vbExclamation,"Abbruch" WScript.Quit end if encoder = """" & encoder & """" 'das zu verschlüsselnde Skript wird als gedroppte Datei erkannt on error resume next Set objFile = objFS.GetFile(WScript.Arguments(0)) if err > 0 then Msgbox "Es wurde keine Datei gedroppt" & vbNewLine & _ "Das Skript wird abgebrochen.",vbExclamation,"Abbruch" Wscript.Quit end if on error goto 0 'ermitteln des Dateinamens für das verschlüsselte Skript und codieren Extension = Ucase(objFS.GetExtensionName(objFile.Name)) if Extension = "VBS" or Extension = "JS" then Name1 = """" & objFile & """" if Extension = "VBS" then Name2 = """" & left(objFile,len(objFile)-1) & "e" & """" else Name2 = """" & objFile & "e" & """" end if Msgbox "Das Skript" & vbNewLine & Name1 & vbNewLine & "wird codiert in" & _ vbNewLine & Name2,vbInformation,"Info" Befehl = encoder & " " & Name1 & " " & Name2 on error resume next WshShell.Run Befehl,,true if err > 0 then Msgbox "Bei der Codierung trat ein Fehler auf.",vbExclamation,"Abbruch" else Msgbox "Die Codierung war erfolgreich",vbInformation,"Fertigmeldung" end if else Msgbox "Die Datei" & vbNewLine & objFile & vbNewLine & "ist kein VB- oder J-Skript." & _ vbNewline & vbNewLine & "Die Codierung wird abgebrochen!",vbExclamation,"Abbruch" end if '************************************** ENDE ******************************************************
Das Skript muss in einem gemeinsamem Ordner mit der Encoder-Datei abgespeichert werden. Dann legt man am besten eine Verknüpfung zum Verschlüsselungsskript auf dem Desktop ab und kann dann eine zu verschlüsselnde Datei per "Drag and Drop" auf diese Verknüpfung ziehen. Dadurch wird automatisch die Verschlüsselung gestartet und bei Erfolg das verschlüsselte Skript im selben Ordner wie das Original abgelegt.
Entschlüsseln
Die Verschlüsselung verhindert den laienhaften Zugriff auf den Code. Man muss aber wissen, dass das Decodieren einer solchen Verschlüsselung für den Experten relativ einfach ist. Man kann sich also nicht darauf verlassen, dass mit der Verschlüsselung der Code wirklich gesichert ist.
Anmerkung
Man sollte Skripte in der Regel im Klartext veröffentlichen. Das erlaubt anderen auf einfache Weise aus einem Skript Informationen zu ziehen, ggf. daraus zu lernen, evtl. Fehler zu beseitigen oder für eigene Zwecke anzupassen. Nur wenn man deutlich machen will, dass alles dies nicht gewünscht wird, ist die Verschlüsselung angebracht.