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:

  1. 'FFSubmenu=Test
  2. 'FFName=Ordnerliste
  3.  
  4. 'Anzeige des aktiven Ordners und aller Unterordner
  5. '**Start Encode**
  6.  
  7. Option Explicit
  8.  
  9. Dim objFS,objFolder
  10. Set objFS = CreateObject("Scripting.FileSystemObject")
  11. Set objFolder = objFS.GetFolder(FF_GetImagePath)
  12.  
  13. Dim Ordnerliste
  14.  
  15. call AlleOrdner(objFolder)
  16.  
  17. Set objFolder = nothing
  18. Set objFS = nothing
  19.  
  20. msgbox Ordnerliste,vbInformation,"Ordner und Unterordner"
  21. '-------------------------------------------------------------
  22. Sub AlleOrdner(ByVal Startordner)
  23. Dim Unterordner
  24.  
  25. Ordnerliste = Ordnerliste & Startordner & vbNewLine
  26.  
  27. For Each Unterordner In Startordner.subfolders
  28. AlleOrdner Unterordner
  29. Next
  30.  
  31. End Sub
  32. '-------------------------------------------------------------

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

  1. 'FFSubmenu=Test
  2. 'FFName=Ordnerliste
  3.  
  4. 'Anzeige des aktiven Ordners und aller Unterordner
  5. '**Start Encode**#@~^tQIAAA==@#@&@#@&}wDkW PAaw^k^kD@#@&@#@&fks~W(LsUSG4NsKV[+.@#@&?nY,G4Nsj~{PZ.nmYnr
  6. (%mOvJUmDbwDrxTRok^+jzkY+s64N+mDEb@#@&?Y~W8%wWsN.P{PG8Ns?
  7. !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:

  1. 'Skript zum Verschlüsseln von VB- und Java-Skripten mit installiertem Encoder SCRENC
  2. '************************************** SKRIPT ******************************************************
  3. 'Die Installationsdatei sce10de.exe für SCRENC kann herunter geladen werden von der MICROSOFT-Seite
  4. 'http://www.microsoft.com/downloads/details.aspx?displaylang=de&FamilyID=e7877f67-c447-4873-b1b0-21f0626a6329
  5.  
  6. 'Der Encoder muss im selben Verzeichnis abgelegt sein wie das vorliegende Skript
  7. 'Es wird verschlüsselt ab '**Start Encode** bzw. //**Start Encode**
  8.  
  9. 'Das zu verschlüsselnde Skript wird manuell auf das vorliegende Skript gezogen oder auf eine Verknüpfung davon.
  10. 'Das verschlüsselte Skript erhält die Dateiendung vbe bei vb-Skripten bzw. je bei j-Skripten
  11. 'und wird im selben Verzeichnis abgelegt wie das Original.
  12. '************************************** SKRIPT ******************************************************
  13. Option Explicit
  14.  
  15. 'Deklarationen
  16. Dim objFS,WshShell
  17. Set objFS = WScript.CreateObject("Scripting.FileSystemObject") 'FileSytemObject
  18. Set WshShell = WScript.CreateObject("WScript.Shell")
  19.  
  20. Dim script,scriptpath,encoder
  21. Dim objFile,Extension,Name1,Name2,Befehl
  22.  
  23. 'Feststellen wie der eigene Ordner heißt
  24. script = Wscript.ScriptFullName
  25. scriptpath = objFS.getparentfoldername(script)
  26. encoder = scriptpath & "\screnc.exe"
  27.  
  28. 'Prüfen ob Datei SCRENC vorhanden ist
  29. If not (objFS.FileExists(encoder)) Then
  30. MsgBox "Der Encoder" & vbNewLine & encoder & vbNewLine & "wurde nicht gefunden!" & vbNewLine & _
  31. "Das Skript wird abgebrochen.",vbExclamation,"Abbruch"
  32. WScript.Quit
  33. end if
  34.  
  35. encoder = """" & encoder & """"
  36.  
  37. 'das zu verschlüsselnde Skript wird als gedroppte Datei erkannt
  38. on error resume next
  39. Set objFile = objFS.GetFile(WScript.Arguments(0))
  40. if err > 0 then
  41. Msgbox "Es wurde keine Datei gedroppt" & vbNewLine & _
  42. "Das Skript wird abgebrochen.",vbExclamation,"Abbruch"
  43. Wscript.Quit
  44. end if
  45. on error goto 0
  46.  
  47. 'ermitteln des Dateinamens für das verschlüsselte Skript und codieren
  48. Extension = Ucase(objFS.GetExtensionName(objFile.Name))
  49. if Extension = "VBS" or Extension = "JS" then
  50.  
  51. Name1 = """" & objFile & """"
  52. if Extension = "VBS" then
  53. Name2 = """" & left(objFile,len(objFile)-1) & "e" & """"
  54. else
  55. Name2 = """" & objFile & "e" & """"
  56. end if
  57.  
  58. Msgbox "Das Skript" & vbNewLine & Name1 & vbNewLine & "wird codiert in" & _
  59. vbNewLine & Name2,vbInformation,"Info"
  60.  
  61. Befehl = encoder & " " & Name1 & " " & Name2
  62. on error resume next
  63. WshShell.Run Befehl,,true
  64. if err > 0 then
  65. Msgbox "Bei der Codierung trat ein Fehler auf.",vbExclamation,"Abbruch"
  66. else
  67. Msgbox "Die Codierung war erfolgreich",vbInformation,"Fertigmeldung"
  68. end if
  69. else
  70. Msgbox "Die Datei" & vbNewLine & objFile & vbNewLine & "ist kein VB- oder J-Skript." & _
  71. vbNewline & vbNewLine & "Die Codierung wird abgebrochen!",vbExclamation,"Abbruch"
  72. end if
  73. '************************************** 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.