====== 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.