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