
CSCRYPT Pro                                (c) 1995,96,97 by Christian Schwarz
Version 3.30/386                                             GutsMuthsplatz 18
Shareware                                                       99610 Smmerda
27.11.1997                                                             Germany


Inhalt der Dokumentation

 Was ist CSCRYPT ?
 Generelle Arbeitsweise
 Systemvoraussetzungen
 Features
 Sicherheit
 Zuknftige Versionen
 Status von CSCRYPT
 Hinweise
 Parameter
 ERRORLEVEL-Codes
 Quellcode
 Autor
 Entwicklungsgeschichte


Was ist CSCRYPT ?

 Angenommen, Sie haben  ein Programm geschrieben,  welches eine  Passwortab-
 frage  oder einen besonders wichtigen und  schtzenswerten Algorithmus ent-
 hlt. Selbst  fr  einen  mittelmigen Assembler-Programmierer  stellt das
 Patchen  (Verndern)  oder  Diassemblieren Ihres  Programmes  keine Heraus-
 forderung dar.  Um die Passwortabfrage  zu umgehen, wre wahrscheinlich nur
 das  Patchen weniger Bytes ntig  und den wichtigen Algorithmus bekommt der
 Hacker praktisch auf dem Silbernen Tablett serviert.
 Aus diesem  Grund habe ich CSCRYPT entwickelt.  Es verschlsselt  Programm-
 dateien (EXE- und COM-Erweiterung) mit oder ohne Passwort und schtzt damit
 Ihre  Programme vor Modifikationen.  Trotzdem sind die geschtzten  Dateien
 weiterhin  uneingeschrnkt  lauffhig, da  Sie sich  nach  dem  Starten  im
 Arbeitsspeicher selbst entschlsseln. Auerdem unternimmt die Entschlssel-
 ungsroutine  groe Anstrengungen, um das Debuggen  (Programm Befehl fr Be-
 fehl ausfhren; beliebtestes  Tool von Hackern ) des geschtzten Programmes
 zu verhindern. So ist die Entschlsselungsroutine selbst auch mehrfach ver-
 schlsselt, teilweise extrem polymorph und voll von Anti-Debugging-Tricks.


Generelle Arbeitsweise

 Verschlsselung der Programmdatei durch CSCRYPT:

   Zuerst wird  der Programmcode und  - falls vorhanden -  die  Relokations-
   tabelle  durch CSCRYPT verschlsselt. Soll ein  Pawort verwendet werden,
   so geht dieses in die Verschlsselung mit ein. Anschlieend wird die Ent-
   schlsselungsroutine  initialisiert  und  mehrfach  verschlsselt.  Diese
   Routine wird im nchsten Schritt an den bereits verschlsselten Programm-
   code angehngt. 

 Entschlsselung:

   Wird ein geschtztes Programm gestartet, so wird zuerst die Entschlssel-
   ungsroutine aufgerufen, die den Orginalzustand des Programmcodes  wieder-
   herstellt. Anschlieend wird die Kontrolle  an den Orginalcode bergeben.
   Das  geschtzte  Programm merkt von  diesen ganzen  Vorgngen  nichts, es
   arbeitet wie gewhnlich.
   

Features

 + sehr sicher
   + komplexer Algorithmus
   + Mehrfachverschlsselungen mglich (ab Pro v2.0)
   + Pawort geht in die Verschlsselung ein
   + nur CRC-Summe des Pawortes wird in der erzeugten Datei gespeichert,
     nicht das gesamte Pawort
 + Schutz vor Entschlsselung
   + Erschwerung des Debuggens durch verschiedene Anti-Debugging-Techniken
   + mehrfache Selbstverschlsselung
   + Selbstverschlsselungsroutine ist leicht polymorph, die Entschlsselung
     durch spezielle Programme wird dadurch immens erschwert (ab v1.1)
   + ab v3.00 weitere uerst (!!!) polymorphe Entschlsselungsroutine
     (durch Parameter /POLY steuerbar)
   + zuflliger Anti-Debugger-Code nun auch in der extrem polymorphen 
     ueren Entschlsselungsroutine (ab v3.01)
 + uerst schnell
 + 32-Bit CRC-Check beim Entschlsseln
 + Relokationstabelle der EXE-Dateien wird komprimiert
 + eine beliebige Meldung kann in EXE-Header eingefgt werden


Systemvoraussetzungen

 Voraussetzungen:

    IBM PC oder 100% Kompatibler
    DOS 3.3
    mindestens 100 KB freier Speicher

 empfohlenes System:

    80386 mit 33 MHz (oder besser)
    Festplatte
    TEMP-Verzeichnis auf RAM-Disk


Sicherheit

 Generell kann man sagen,  da CSCRYPT sicher ist.  Einen versierten Hacker-
 Profi mit sehr  viel Zeit kann aber  auch  CSCRYPT nicht abschrecken - aber
 alle Mchtegern-Hacker (das sind die meisten) haben keine Chance. 
 Wird die  Verschlsselung auch noch mit Pawort vorgenommen  und ist dieses
 unbekannt, so ist  es vollkommen unmglich (!) ein  geschtztes Programm zu
 modifizieren.


Zuknftige Versionen

 Was ich mir fr die nchsten Versionen vorgenommen habe:

    Steigerung der Geschwindigkeit durch Ausnutzung prozessorspezifischer
     Eigenschaften (u.a. Vermeidung von Abhngigkeiten zur vollen Ausnutzung
     der beiden Integer-Piplines des Pentiums)
    Benutzung eines Pack-Algorithmus (hnlich DIET, LZEXE, PKLITE)


Status von CSCRYPT

 CSCRYPT ist Shareware. Es kann sowohl privat als auch kommerziell innerhalb
 einer Testfrist  von 30 Tagen kostenlos  genutzt werden und  darf unter den
 folgenden Bedingungen weitergegeben werden:

    Es darf  nur unentgeltlich  kopiert  (Vertrieb auf Shareware/Freeware/
     PD-CD-ROMs ausgenommen) und benutzt werden.
    Alle zu CSCRYPT  gehrenden Dateien (CSCRYPT.EXE, FILE_ID.DIZ)  drfen 
     nur zusammen weitergegeben und in keinster Weise verndert werden.

 Ist die Testfrist verstrichen,  mssen Sie entweder bei mir die Vollversion
 bestellen oder CSCRYPT und alle mit CSCRYPT geschtzten Programme aus Ihren
 Datenbestnden lschen.  Die Shareware-  und Vollversion  haben  exakt den-
 selben Funktionsumfang, da ich der Meinung bin, da Sie nur auf diese Weise
 alle Funktionen testen knnen.
 Die aktuelle (Voll-)Version kann fr 20 DM (bei anderen Whrungen bitte den
 aktuellen Tauschkurs beachten) von  mir bezogen werden. Diesen Betrag  sehe
 ich als eine kleine Anerkennung fr meine Arbeit an.  Auerdem untersttzen
 Sie damit die Entwicklung  zuknftiger CSCRYPT-Versionen sowie vllig neuer
 Programme aus dem Bereich der Datensicherheit: Anti-Virus, Verschlsselung,
 ...

 Sollten Sie irgendwelche Bugs feststellen oder interessante Anregungen/Ver-
 besserungsvorschlge  haben,  so wrde  ich mich  freuen,  wenn Sie mit mir
 Kontakt aufnehmen wrden.


Hinweise

 ACHTUNG!  Bei der Analyse von, mit CSCRYPT (bis v2.13 und wieder ab v3.00)
 geschtzten,  Programmdateien erzeugen einige  heuristische Anti-Virus-Pro-
 gramme  wie  F-PROT  (mit  Parameter /ANALYSE) und  ThunderBYTE  Anti-Virus
 Falschalarme (armored program, unbekannter Virus). Dies lt sich vor allem
 darauf zurckfhren, da die Entschlsselungsroutine virentypische Merkmale
 aufweist  (flexibler Einsprungspunkt,  uerst polymorphe Entschlsselungs-
 routine, ...).

 Es gibt einige Programme, die auf keinen Fall verndert werden drfen! Dazu
 zhlen  Anti-Virus-Programme (F-PROT, TBAV, ...), die sich  selbst auf Ver-
 nderungen berprfen. Auch, den eigenen Code modifizierende Programme, wie
 SETVER.EXE (DOS), drfen nicht durch CSCRYPT geschtzt werden. Des weiteren
 rate ich dringend davon ab, den Kommandointerpreter (normalerweise COMMAND.
 COM, aber auch 4DOS.COM, NDOS.COM, ...) zu verschlsseln.

 Die meisten der verwendeten  Softwarebezeichnungen sind eingetragene Waren-
 zeichen und unterliegen als solche den gesetzlichen Bestimmungen und werden
 hiermit von mir  anerkannt,  unabhngig davon,  ob sie  als  solche gekenn-
 zeichnet sind oder nicht. 
 
 Ich mache  an dieser Stelle  darauf aufmerksam,  da ich  keinerlei Haftung
 oder Verantwortung  fr Schden bernehme,  die direkt oder indirekt, beab-
 sichtigt oder  unbeabsichtigt durch  die Benutzung  von CSCRYPT entstehen -
 die Benutzung erfolgt also auf eigene Gefahr.

 Auerdem mchte ich nochmals unmiverstndlich zu  verstehen geben, da ein
 vergessenes Pawort den  unwiderruflichen Verlust der verschlsselten Daten
 darstellt. Es gibt auch keinen Trick, um die Daten wieder zu entschlsseln,
 da das Pawort in die Verschlsselung eingeht (siehe Features).


Parameter

 Syntax:      CSCRYPT  Dateiname [/PW:Pawort] [/T[:Textdatei]] [/POLY{0-9}]

 "Pawort" steht fr eine Zeichenkette,  die 1-32 Zeichen umfassen mu. Soll
 eine  Zeichenkette  in den  EXE-Header eingefgt  werden,  so wird  mit der
 Option "/T:Textdatei" die Datei  angegeben, deren Inhalt  eingefgt  werden
 soll. Ohne die Angabe einer Textdatei ("/T") wird folgende Zeichenkette ge-
 nommen:

   This program was protected by CSCRYPT Pro v3.30/386 !
   Modifications are explicitly prohibited by the author.

 Mit dem  Schalter "/POLY" kann  der Einschub  sinnloser Befehle in die Ent-
 schlsselungsroutine  beeinflut  werden.  Die  standardmig  eingestellte
 Stufe ist 4.  Je hher die Stufe ist,  um so strker ist  die Routine poly-
 morph.  Mit der  Stufe steigt  jedoch auch die  Gre der Entschlsselungs-
 routine ein wenig (Stufe 0: <= 17 Bytes; Stufe 9: bis ber 2000 Bytes).

 Beispiele:

   CSCRYPT GEHEIM.EXE /PW:ABCDEF /T

     Verschlsselung von GEHEIM.EXE mit dem Pawort "ABCDEF", Einfgen der
     oben genannten Zeichenkette

   CSCRYPT MYPROG.EXE -T:HDRTEXT.TXT -POLY9

     Verschlsselung von MYPROG.EXE ohne Pawort, Einfgen des Inhalts von
     HDRTEXT.TXT in den EXE-Header, polymorphe Stufe 9 (maximal)


ERRORLEVEL-Codes

 Um einen vernnftigen Einsatz in BAT-Dateien zu erlauben, liefert CSCRYPT
 ERRORLEVEL-Codes zurck.

     0 - kein Fehler
     1 - Syntaxfehler
     2 - eine ltere DOS-Version als 3.3
     3 - nicht genug freier Speicher
     4 - Pawort zu lang oder zu kurz
     5 - Werte fr /POLY nicht zwischen 0 und 9
   255 - CSCRYPT wurde modifiziert (wahrscheinlich eine Virusinf.)


Quellcode

 Der  Quellcode  besteht  aus 6127  Zeilen (260 KB)  Pascal/Inline-Assembler
 sowie aus 2169 Zeilen (50 KB) 8086-Assembler.


Autor

  Christian Schwarz, 18 Jahre
  Adresse:
     GutsMuthsplatz 18
     99610 Smmerda
     Deutschland
  Telefon:  
     +03634-23559


Entwicklungsgeschichte

 v1.0:
    Anfang Mai 1995
    private Version

 v1.1:
    18.6.1995
   + polymorphe Entschlsselungsroutine (verhindert Entschlsselung durch
     Programme wie UNP und UP)

 v1.1b:
    20.6.1995
    keine ffentliche Version
   + interne Verbesserungen

 v1.1c:
    3.8.1995
   + in den EXE-Header kann eine Meldung eingefgt werden (/T[:XXX])

 v1.1d:
    4.8.1995
   + kleinere Fehler behoben, Fehlermeldungen erweitert

 Pro v2.0:
    6.8.1995
   + Verschlsselung mit anschlieender Pawortabfrage
   + Verbesserung der Entschlsselungsroutinen

 Pro v2.10:
    8.9.1995
   + Verbesserung der Selbstverschlsselungsmethode
   + Mehrfachverschlsselungen sind ab dieser Version mglich
   + Fehlerbehebung: TEMP-Verzeichnis (Kopieren bei anderem Laufwerk)

 Pro v2.11:
    25.9.1995
   + Verbesserung der Selbstverschlsselungsroutine
   + Abfangen von Ctrl-Break bzw. Ctrl-C
   + Wildcards sind ab sofort erlaubt
   + weitere kleinere Verbesserungen

 Pro v2.12:
    11.11.1995
   + Behebung eines Fehlers bei der Entschlsselung von COM-Dateien:
       Normalerweise  wird der Stack vor  der Ausfhrung einer COM-Datei auf
       CS:FFFE (SS:SP)  gesetzt (in smtlichen  Standardwerken  nachlesbar).
       Beim Hochladen setzt DOS den Stack  jedoch auf  CS:"Dateigre"+350h.
       Da mir dies  bislang nicht bewut war,  konnte es beim  Hochladen von
       COM-Dateien, die  mit einer  lteren  Version von  CSCRYPT  geschtzt
       wurden, zu Systemabstrzen kommen.
   + kleinere  Verbesserungen am  Entschlsselungsalgorithmus (Geschwindig-
     keit geringfgig erhht)

 Pro v2.13:
    1.1.1996
   + Verbesserung des Entschlsselungsalgorithmus
   + kleine interne Vernderung

 Pro v2.13b:
    3.1.1996
   + kleine interne Vernderung

 Pro v2.20:
    17.1.1996
   + weitere Ebene der Selbstverschlsselung
   + weitere Anti-Debugging-Techniken
   + CSCRYPT-geschtzte Programme von Anti-Viren-Programmen (TBAV, F-PROT)
     nicht mehr als unbekannte Viren identifiziert

 Pro v2.21:              
    21.1.1996
   + Relokationstabelle wird komprimiert (weniger Speicherverbrauch und
     kleinere EXE-Dateien)

 Pro v2.22:
    11.2.1996
   + Verbesserung der Methode zum Komprimieren der Relokationstabelle (die
     neue Methode ist hnlich der, die von LZEXE eingesetzt wird, aber noch
     ein wenig optimiert worden)
   + kleine Textvernderung
   + kleine interne Verbesserung

 Pro v2.22b:
    13.2.1996
   + grober Fehler in der COM-Verschlsselung behoben (fhrte bei ver-
     ndertem Code nach Ausgabe der Fehlermeldung zum Absturz des 
     Programmes)

 Pro v2.22c:
    21.2.1996
   + kleinere interne Umordnungen des Codes

 Pro v3.00:
    12.8.1996
   + NEU!!!: Diese Version verhindert die Erkennung der Entschlsselungs-
     routine durch eine extrem polymorphe (zustzliche) Verschlsselung.
   + Um die Erkennung nochmals zu erschweren, knnen sinnlose Befehle 
     zwischen die Entschlsselungsanweisungen eingefgt werden. Die Hu-
     figkeit der Einstreuung solcher Befehle kann ber den neuen Schalter 
     /POLY{0-9} beeinflut werden. 
   + geschtzte Programme scheinen nun endlich unter MS-Windows zu laufen

 Pro v3.01:
    13.8.1996
   + zuflliger Anti-Debugger-Code nun auch in der extrem polymorphen 
     ueren Entschlsselungsroutine
   + kleiner Bug bei Verschlsselung mit Passwort behoben: Vektoren fr 
     Interrupts 1Bh und 23h wurden auf noch verschlsselten Handler (IRET) 
     verbogen

 Pro v3.10
    20.8.1996
   + Verbesserung der Bildschirmausgaben und der Fehlerbehandlung
   + neuer Parameter "?", zeigt deutsche oder englische Hilfe an
   + schwerwiegenden Fehler bei der polymorphen Entschlsselung behoben
   + Bug bei Einstreung bestimmter Anti-Debugg-Befehle in polymorphe
     Entschlsselung beseitigt

 Pro v3.10b
    2.9.1996
   + kleiner Bug behoben

 Pro v3.20a
    14.9.1996
   + polymorphe Entschlsselungsroutine verbessert

 Pro v3.21a
    21.10.1996
   + CSCRYPT.EXE wird ab jetzt bei der Angabe von Wildcards (z.B. *.EXE)
     nicht mehr verschlsselt
   + kleiner Bug in der Polymorphic Engine behoben

 Pro v3.22
    16.02.1997
   + weitere Anti-Debugging-Techniken

 Pro v3.30/386
    27.11.1997
   + spezielle 386-Anti-Debugging Tricks (keine Chance fr CUP386,
     GTR,...)
   - luft erst ab 386

Ende von CSCRYPT.TXT
