0. Versionsinfo
===============

Diese Datei beschreibt die Software pkcrack (Version 1.2.2).
Version 1.2.2 enthlt gegenber der Vorgngerversion i. W. einige
Korrekturen und wenige Neuerungen.


1. Haftungsausschlu
====================

Der Autor garantiert nicht, da die Software pkcrack das tut, was Sie
vermuten. Er garantiert ebenfalls nicht, da die Software pkcrack sich
so verhlt, wie es in der Dokumentation (dieser Text eingeschlossen)
beschrieben wird.

DIE BENUTZUNG DIESE SOFTWARE ERFOLGT AUF EIGENE GEFAHR! Der Autor
bernimmt keine Haftung fr Schden jeglicher Art, die direkt oder 
indirekt durch die Verwendung dieser Software entstehen. Die Benutzung
dieser Software ist nur erlaubt, wenn der Benutzer bereit ist, den 
Autor von smtlichen Ansprchen Dritter, die sich aus der Benutzung des
Programms direkt oder indirekt ergeben, freizuhalten.

Insbesondere ist der Benutzer verpflichtet dafr Sorge zu tragen, da durch
pkcrack keine wichtigen Daten beschdigt werden knnen, z. B. durch die
Anfertigung von Sicherungskopien.

Diese Software wurde fr Personen entwickelt, die eigene Dateien 
verschlsselt und das zugehrige Pawort vergessen haben, oder die
Opfer eines 'Scherzes' geworden sind. Auf jedem Fall ist die Software
gedacht fr Personen, die in irgendeinem Sinn berechtigt sind, auf
die verschlsselten Daten zuzugreifen. Diese Software ist nicht dazu
gedacht, anderer Leute geistiges Eigentum zu stehlen!


2. Copyright
============

Diese Software wurde von Peter Conrad <conrad@unix-ag.uni-kl.de>
entwickelt. Smtliche Rechte an der Software liegen beim Autor.
Kommerzielle Verwendung der Software in jeglicher Form ist strikt
verboten!

Teile des Source-Codes drfen fr nicht-kommerzielle Software
weiterverwendet werden, sofern darauf hingewiesen wird, woher und
von wem diese Teile stammen.

Die Verffentlichung von Software, die Teile des Source-Codes 
weiterverwendet, bedarf der ausdrcklichen Genehmigung des Autors.


3. Worum geht es hier?
======================

Diese Software implementiert einen Algorithmus zum 'knacken' der
PkZip-Verschlsselung. Der Algorithmus wurde von Eli Biham und
Paul Kocher entwickelt und ist im beiliegenden Paper (Datei "pkzip.ps.gz")
beschrieben.

Da sich bereits frh abzeichnete, da diese Software bei vielen Leuten
auf Interesse stoen wrde, gebe ich sie als sogenannte 'Cardware' heraus.
Ich wei zwar nicht, wer zuerst auf die Idee der 'Cardware' kam, aber es
ist im Grunde ganz einfach:

  Wenn Ihnen die Software gefllt, und Sie sie nutzen, schicken Sie mir eine
  Postkarte. Am besten eine Ansichtskarte aus Ihrem Heimatort. Sie knnen
  draufschreiben, was immer Sie wollen, z. B. wie sehr Ihnen die Software
  gefllt, oder was fr ein toller Kerl ich bin. Lassen Sie sich was
  einfallen! :-)
  brigens: elektronische "Postkarten" gelten nicht!

Meine Postanschrift ist:

    Peter Conrad
    Am Heckenberg 1
    56727 Mayen

    Germany

Bitte versuchen Sie nicht, mich telefonisch unter dieser Adresse zu
erreichen. Ihre Karte wird zwar an mich weitergeleitet werden, nicht
aber Ihre Anrufe. Wenn Sie Fragen haben, stellen Sie sie bitte per
email an conrad@unix-ag.uni-kl.de.


4. Voraussetzungen
==================

 * ANSI-kompatibler C-Compiler (z. B. gcc)
 * ca. 33 MB (virtuellen) Speicher
   Das Gros dieser 33 MB wird nur in den ersten paar Durchlufen der
   Schlsselreduktion ('key-reduction') verwendet. Die Software funktioniert
   auch mit 16 MB RAM prchtig, vorausgesetzt, Sie haben eine gengend
   groe Auslagerungsdatei eingestellt. Sie funktioniert sogar mit noch
   weniger Hauptspeicher, allerdings geht das sehr zu Lasten der
   Geschwindigkeit.
   (Als ich Mitte 1996 das Programm zum ersten Mal erfolgreich getestet
    habe, waren 33 MB noch ziemlich viel. Heute hat jeder Billig-Anbieter
    mehr als 32 MB als Grundausstattung seiner Rechner...)
 * Geduld :-)
 * PGP oder GPG (nur wenn Sie die Authentizitt der Software berprfen wollen)


5. Kompilieren der Software
===========================

Diesen Abschnitt knnen Sie berspringen, wenn Sie eine der fertigen
Versionen z. B. fr DOS oder Windows vorliegen haben. Hier wird
beispielhaft das Vorgehen unter einem Unix-hnlichen System beschrieben.

Packen Sie zunchst die Software mit dem Kommando
"zcat pkcrack-<version>.tar.gz | tar xvf -" aus.  Dabei wird ein Verzeichnis
"pkcrack-<version>" angelegt. Wechseln Sie in das Verzeichnis:
"cd pkcrack-<version>".

Die Quelldateien befinden sich im Unterverzeichnis "src".  Wechseln Sie
dorthin.

Nun gengt es in der Regel, "make" einzugeben, um die Programme zu erzeugen.
Wenn Sie nicht "GNU make" verwenden, mssen Sie mglicherweise die Zeilen
"if DJGPP ... endif" in src/Makefile entfernen.
 
Die Software wurde von mir unter Linux geschrieben und getestet. Weitere
Tests wurden unter 32-Bit-Windows (sowohl mit DJGPP 2.03 als auch mit cygwin)
und Solaris durchgefhrt.  Andere Personen haben pkcrack unter Windows und
OS/2 mit anderen Compilern compiliert und getestet, im Verzeichnis src sind
dazu spezielle Makefiles beigelegt.

Falls Sie die Software auf andere Hardware oder Betriebssysteme portieren
wollen, berprfen Sie, ob folgende Datentypen existieren und den
richtigen Wertebereich haben. Unter Umstnden mssen Sie die Datei
pkctypes.h entsprechend anpassen.

byte   muss den Wertebereich [0..255] haben		(unsigned char)
ushort muss den Wertebereich [0..65535] haben		(unsigned short)
uword  muss den Wertebereich [0..(2^32-1)] haben	(unsigned int)

Im Moment fallen mir keine weiteren Punkte ein, die beachtet werden mssen.
Falls Sie die Software erfolgreich portieren, informieren Sie mich bitte
per email.


6. Benutzung
============

Seit der Version 1.2 ist pkcrack eine Art "fire & forget"-Programm. Wenn
Sie mit Software lieber etwas herumexperimentieren mchten, sollten Sie
die ausfhrlichere Anleitung weiter unten lesen. Ansonsten halten Sie
sich an die einfache Anleitung.

Zunchst ist es wichtig zu verstehen, da diese Software einen sogenannten
*known plaintext attack* auf eine verschlsselte Datei anwendet. Ein
known-plaintext-attack entschlsselt eine Datei unter Verwendung
der verschlsselten Datei und einer unverschlsselten (oder eines Teils
einer unverschlsselten). Beachten Sie, da der Begriff 'plaintext' sich
auf beliebige unverschlsselte Daten bezieht, nicht notwendigerweise
lesbaren Text.

Wenn Sie sich fragen, warum jemand ein Pawort suchen soll, wenn er bereits
die unverschlsselte Datei kennt, bedenken Sie folgende Flle:

  a) blicherweise enthlt eine ZIP-Datei mehrere Dateien. In der Regel
     sind all diese Dateien mit demselben Pawort verschlsselt. Wenn man
     also eine der Dateien kennt, kann pkcrack das Pawort finden und
     die restlichen Dateien entschlsseln.

  b) Man braucht nur einen Teil der unverschlsselten Daten (mindestens
     13 Byte), um das Pawort zu finden. Nun haben einige Dateitypen
     bekannte 'Header', z. B. EXE- oder DLL-Dateien. Wenn man einen
     hinreichend langen Header kennt, kann pkcrack das Pawort finden
     und die komplette Datei entschlsseln.

     Um Miverstndnisse zu vermeiden: in der Regel gengt es nicht,
     die ersten Bytes einer verschlsselten EXE-Datei zu kennen, da
     die Datei meistens vor dem Verschlsseln komprimiert wurde. Man
     mu also die ersten Bytes der *komprimierten* Datei kennen, und
     das ist nicht das Gleiche, wie wenn man die ersten Bytes der
     ursprnglichen Datei komprimiert!

Zurck zum Programm selbst.

6.1 Einfache Anleitung
----------------------

Sie brauchen zwei Dateien:
  a) die ZIP-Datei, die Sie entschlsseln wollen, und
  b) eine weitere ZIP-Datei, die wenigstens eine der Dateien der
     verschlsselten ZIP-Datei in unverschlsselter Form enthlt. Diese
     mu auf genau dieselbe Art komprimiert worden sein wie die
     verschlsselte Datei, am besten mit der gleichen Programmversion!

Geben Sie ein:

  pkcrack -C <verschlsseltes-ZIP> -c <verschlsselte-Datei>
          -P <unverschlsseltes-ZIP> -p <unverschlsselte-Datei>
          -d <entschlsseltes-ZIP> -a

(Das alles soll in eine einzige Zeile - ich habe es der Lesbarkeit wegen
 auf mehrere aufgeteilt. "Real computer scientists never comment their
 code - the identifiers are so long they can't afford the disc space." :-/ )

<verschlsseltes-ZIP>    ist der Name (und Pfad) der verschlsselten ZIP-Datei
		         (siehe oben unter a)
<verschlsselte-Datei>   ist der Name (und Pfad) der Datei innerhalb der
                         verschlsselten ZIP-Datei, die Sie auch in
                         unverschlsselter Form haben
<unverschlsseltes-ZIP>  ist der Name (und Pfad) der ZIP-Datei, die die
                         unverschlsselte komprimierte Originaldatei enthlt
		         (siehe oben unter b)
<unverschlsselte-Datei> ist der Name (und Pfad) der Datei innerhalb der
                         unverschlsselten ZIP-Datei
<entschlsseltes-ZIP>    ist der Name (und Pfad) einer Datei, unter dem
                         pkcrack die verschlsselte Datei nach dem
		         Entschlsseln abspeichern wird

Jetzt mssen Sie nur noch ein wenig warten. Je nach der Gre der
unverschlsselten Datei und der Schnelligkeit Ihres Rechners sollte das
Programm nach etwa einer Stunde fertig sein. Wenn Ihre unverschlsselte
Datei weniger als 1000 Byte lang ist, kann es auch deutlich lnger
dauern. Wenn Sie nur das Minimum verwenden (13 Byte), wird das Programm
mehrere Tage laufen.

Wenn pkcrack fertig ist und erfolgreich war, dann finden Sie Ihre 
unverschlsselten Daten in der Datei <entschlsseltes-ZIP>. Sie knnen
diese ZIP-Datei mit jedem ZIP-Entpacker auspacken, z. B. pkunzip unter
DOS, oder unzip unter UNIX.

Wenn die Datei <entschlsseltes-ZIP> nicht angelegt wurde, oder wenn
beim Entpacken der Datei CRC-Fehler gemeldet werden, knnen verschiedene
Ursachen vorliegen:

 * Mglicherweise haben Sie die falsche Datei als <unverschlsselte-Datei>
   verwendet. Versuchen Sie's nochmal mit einer anderen Datei.
 * Mglicherweise haben Sie zwar die richtige <unverschlsselte-Datei>,
   sie aber nicht mit genau derselben Methode komprimiert wie die
   verschlsselte. Komprimieren Sie die Datei mit anderen Optionen oder
   mit einem anderen Programm, und versuchen Sie's nochmal.
 * Mglicherweise hat pkcrack mehr als ein passendes Pawort gefunden und
   hat zum Entschlsseln das falsche verwendet. Sehen Sie sich die
   Ausgaben von pkcrack nochmal genau an, und verwenden Sie das
   Programm "zipdecrypt", um mit einem Satz key0, key1, key2-Werte die
   verschlsselte Datei zu entschlsseln.
 * Mglicherweise ist etwas anderes schiefgegangen. Das heit, Sie haben
   ein Problem. Lesen Sie die ausfhrlichere Anleitung unten, und versuchen
   Sie zu verstehen, warum das Programm nicht funktioniert hat. Werfen Sie
   auch einen Blick in die FAQ am Ende dieses Textes.

6.2 Ausfhrlichere Anleitung
----------------------------

Dieser Abschnitt erlutert einige Sonderfunktionen von pkcrack, sowie
die brigen Programme dieses Softwarepakets.

Genau wie bei der einfachen Anleitung oben bentigt man zwei Dateien.
Allerdings nicht unbedingt zwei ZIP-Dateien. Man kann pkcrack mit
zwei Dateien aufrufen, die ausschlielich Nutzdaten enthalten, also
keine der blichen Information in ZIP-Dateien wie z. B. Dateinamen und
Prfsummen. Dazu lt man beim Aufruf von pkcrack einfach die Optionen
-C bzw. -P weg.

Demnach gibt es zwei Arten, pkcrack mitzuteilen, wo die verschlsselten
Daten zu finden sind:

 * -C <verschlsseltes-ZIP> -c <verschlsselte-Datei> (siehe oben), oder
 * -c <verschlsselte-Datei>

Im letztgenannten Fall ist <verschlsselte-Datei> der Name (und Pfad)
einer Datei, die *ausschlielich* verschlsselte Daten enthlt.

Analog dazu gibt es zwei Arten, beim Aufruf von pkcrack die unverschlsselte 
Datei anzugeben:

 * -P <unverschlsseltes-ZIP> -p <unverschlsselte-Datei> (siehe oben), oder
 * -p <unverschlsselte-Datei>

Im letztgenannten Fall ist <unverschlsselte-Datei> der Name (und Pfad)
einer Datei, die *ausschlielich* unverschlsselte Daten enthlt.

Beachten Sie dabei, da PkZip vor der eigentlichen Verschlsselung den
komprimierten Daten zwlf zufllig gewhlte Bytes voranstellt, d. h.
die <verschlsselte-Datei> mu zwlf Byte lnger sein als die
<unverschlsselte-Datei>. Wenn man nur einen Teil der unverschlsselten
Daten kennt, kann die <unverschlsselte-Datei> auch noch krzer sein.
Normalerweise deutet ein grerer oder kleinerer Unterschied der 
Dateigren allerdings darauf hin, da entweder die Dateien nicht
bereinstimmen, oder da sie mit unterschiedlichen Programmen oder
unterschiedlichen Kompressionsmethoden komprimiert wurden. In diesen
Fllen kann pkcrack kein Pawort finden.

Zum extrahieren komprimierter und/oder verschlsselter Daten aus
einer ZIP-Datei kann man das Programm extract verwenden, das ebenfalls
Teil dieses Softwarepakets ist. Man ruft es wie folgt auf:

  extract <ZIP-Name> <Name-im-ZIP>

Damit extrahiert man die (mglicherweise verschlsselten und/oder
komprimierten) Daten, die in der ZIP-Datei <ZIP-Name> unter dem Namen
<Name-im-ZIP> enthalten sind, und schreibt diese Daten unter dem Namen
<Name-im-ZIP> ins aktuelle Verzeichnis. Wenn <Name-im-ZIP> auch
Pfadkomponenten enthlt, mssen im aktuellen Verzeichnis die entsprechenden
Unterverzeichnisse bereits existieren.

Eine weitere Option, die bereits in der einfachen Anleitung verwendet
wurde, ist die Option -d <entschlsseltes-ZIP>. Damit veranlat man pkcrack,
die verschlsselte ZIP-Datei zu entschlsseln und unter dem Namen
<entschlsseltes-ZIP> abzuspeichern. Logischerweise kann man die Option
-d nur dann verwenden, wenn die verschlsselte Datei mit der Option
-C <verschlsseltes-ZIP> angegeben wurde.

Wenn Sie die Option -d <entschlsseltes-ZIP> nicht verwenden, wird pkcrack
versuchen ein Pawort zu finden, mit dem die verschlsselten Daten
entschlsselt werden knnen. Das kann unter Umstnden sehr lange dauern,
wenn das ursprnglich gewhlte Pawort lnger als zehn Zeichen war.
Zum Entschlsseln gengen allerdings schon die Werte key0, key1 und key2.
Mit diesen kann man das Programm zipdecrypt aufrufen, das eine
verschlsselte ZIP-Datei mit diesen Werten entschlsselt:

  zipdecrypt <key0> <key1> <key2> <verschlsseltes-ZIP> <entschlsseltes-ZIP>

<key0>, <key1> und <key2> mssen die Zahlen sein, die pkcrack ausgegeben 
hat, <verschlsseltes-ZIP> ist der Name der zu entschlsselnden ZIP-Datei
und <entschlsseltes-ZIP> ist der Name, unter dem die entschlsselte
ZIP-Datei gespeichert werden soll (wie bei der pkcrack-Option -d).

Nun bleibt noch eine Option zu erklren: mit -o <anfang> knnen Sie angeben,
bei welchem Byte innerhalb der verschlsselten Datei die unverschlsselte
beginnt. Diese Option wird dann verwendet, wenn Sie nur einen Teil
der verschlsselten Daten kennen, und dieser Teil mitten in der Datei liegt
statt ganz am Anfang. Wenn Sie die Option nicht angeben, startet pkcrack
bei Position 0. Die zwlf zuflligen Bytes am Anfang der verschlsselten
Datei werden also nicht mitgezhlt.

Es gibt noch eine weitere Verwendung der Option -o. Die sogennanten
"zuflligen" zwlf Bytes am Anfang der Datei sind nicht so zufllig
wie man glaubt. Manche ltere Versionen von pkzip haben zwei Bytes der
CRC-Prfsumme als "Zufallsbytes" verwendet. Etwas neuere Versionen nutzten
nur noch ein Byte der Prfsumme. Wenn die verschlsselte Datei also mit einer
sehr alten Version von pkzip verschlsselt wurde, und Sie nur wenige
Bytes am Anfang der Datei kennen, knnen Sie also ein oder alle CRC-Byte(s)
vor den Anfang der Datei hngen und pkcrack mit einem negativen Anfangswert
starten (z. B. -1 wenn Sie das letzte der zwlf Zufallsbytes kennen).
Die Option wurde brigens nicht sehr intensiv getestet, also verlassen
Sie sich nicht darauf...

Schlielich will ich noch ein paar Worte zum Programm "findkey" und seinem
Gegenstck "makekey" verlieren.  "findkey" versucht, zu einem Satz
Schlsselwerte (key0, key1, key2) ein Pawort zu finden. pkcrack macht
genau das Gleiche, wenn sie nicht die verschlsselte Datei mit der
Option -d entschlsseln lassen. "findkey" gibt regelmig aus, wie weit
die Suche fortgeschritten ist. Sie knnen diese Ausgaben dazu verwenden,
findkey spter an einer bestimmten Stelle weitersuchen zu lassen. Die
Ausgaben haben das Format

  10: xx, oder
  11: xxxx, oder
  12: xxxxxx usw.

Wenn Sie findkey an einer bestimmten Stelle weitersuchen lassen wollen,
geben Sie ein:

  findkey <key0> <key1> <key2> <laenge> <startwert>

wobei <key0>, <key1>, <key2> die von pkcrack ermittelten Schlsselwerte sind,
<laenge> 10 oder 11 oder 12 (je nachdem, wo Sie weitermachen wollen), und
<startwert> der Wert "xx" ist, den findkey oder pkcrack zuletzt ausgegeben
hat. Die Parameter <laenge> und <startwert> knnen Sie auch weglassen, dann
fngt findkey wieder von vorne an.

Bedenken Sie, da findkey unter Umstnden *sehr* lange braucht, um ein
Pawort zu finden. Wenn es ein Pawort mit weniger als zehn Zeichen gibt,
geht es recht schnell. Aber es gibt 255 mal soviele Pawrter der Lnge
elf wie es solche der Lnge zehn gibt. In der Regel sollte man sich also
damit zufriedengeben, die verschlsselte Datei mit dem Programm "zipdecrypt"
zu entschlsseln.

Mit dem Programm makekey knnen Sie die zu einem bekannten Pawort passenden
Werte key0, key1 und key2 berechnen lassen. Sie werden makekey nicht
brauchen, wenn Sie eine Datei entschlsseln wollen. Es kann aber ein
interessantes Tool sein, wenn Sie ein wenig mit verschlsselten ZIP-Dateien
herumexperimentieren wollen.


7. Ein paar technische Details
==============================

Dieser Abschnitt enthlt kurze Beschreibungen der einzelnen Quelldateien.

crc.c
Diese Datei enthlt Funktionen zur Berechnung von CRC-32 Prfsummen. Das
zugehrige CRC-Polynom ist in crc.h festgelegt. Um die Performance zu
verbessern benutzen die Funktionen Tabellen, die allerdings vorher 
erstellt werden mssen.

crc.h
Headerdatei fr crc.c
Diese Datei enthlt Makros zur Berechnung von CRC-32 Prfsummen mit Hilfe
einer Tabelle, die vorher ber eine Funktion in crc.c erstellt werden mu.

debug.c
debug.h
Diese beiden Dateien enthalten einige Funktionen, die beim Debuggen der
"Stage1" und "Stage2"-Funktionen helfen sollen. Dazu ist es erforderlich,
die verwendeten Schlssel zu kennen. Die Funktionen knnen dann alle
Zwischenwerte, die auftauchen sollten, kontrollieren.
Normalerweise sind diese Debugging-Funktionen deaktiviert.

exfunc.c
Diese Datei enthlt eine Funktion, die Daten aus einer ZIP-Datei in den
Hauptspeicher einliest.

extract.c
Diese Datei enthlt die main()-Funktion des Programms "extract", mit dem
man Daten aus einer ZIP-Datei auslesen und in einer anderen Datei abspeichern
kann.

findkey.c
Dieses Programm versucht ein PkZip-Pawort zu finden, das zu gegebenen
Werten key0, key1 und key2 pat. Es gibt whrend des Ablaufs Informationen
zum Fortgang der Suche aus, mit denen spter an einer bestimmten Stelle
weitergesucht werden kann.

headers.h
Diese Headerdatei enthlt Deklarationen einiger Datenstrukturen, die in
ZIP-Dateien vorkommen.

keystuff.c
Diese Datei enthlt Funktionen zur Initialisierung und Aktualisierung des
internen Zustands des Verschlsselungsalgorithmus'.

keystuff.h
Dies ist eine Headerdatei fr keystuff.c

main.c
Diese Datei enthlt die main()-Funktion von pkcrack. Sie liest
die verschlsselten und unverschlsselten Dateien ein und ruft
anschlieend die verschiedenen Teile des Algorithmus' auf.

mktmptbl.c
Diese Datei enthlt eine Funktion, die eine Tabelle erstellt, ber die
die "temp"-Werte zu einem gegebenen "key3" schnell ermittelt werden knnen.
(Wenn Sie wissen wollen, was "temp" und "key3" bedeutet, lesen Sie das
 beiliegende Paper zum Algorithmus.)

mktmptbl.h
Dies ist eine Headerdatei fr mktmptbl.c

pkcrack.h
Diese Headerdatei enthlt einige globale Konstanten und Variablen, die im
Programm verwendet werden.

pkctypes.h
Diese Datei enthlt Typdefinitionen fr byte, ushort und uword. Wenn Sie
die Software auf andere Hardware oder Betriebssysteme portieren wollen,
mssen Sie diese Datei mglicherweise anpassen.

readhead.c
Diese Datei enthlt einige Funktionen, mit denen Header in einer ZIP-Datei
gelesen und ausgewertet werden knnen. Lesen Sie die Datei "appnote.iz.txt",
wenn Sie genaueres wissen wollen.

stage1.c
Diese Datei implementiert die erste Stufe des Algorithmus'. Dort werden
Anfangswerte fr key2 gesucht. Anschlieend wird versucht, die Anzahl
der mglichen Werte zu verringern. Diese Stufe wird im Paper in den
Abschnitten 3.1 und 3.2 beschrieben.

stage1.h
Dies ist eine Headerdatei fr stage1.c

stage2.c
Diese Datei implementiert die zweite Stufe des Algorithmus', in der aus
einer Liste von key2-Werten passende key1- und key0-Werte ermittelt werden.
Wenn das gelingt, wird noch ein Plausibilittstest gemacht und ggfs.
eine Erfolgsmeldung ausgegeben. Eine genaue Beschreibung finden Sie in
den Abschnitten 3.3, 3.4 und 3.5 des Papers.

stage2.h
Dies ist eine Headerdatei fr stage2.c

stage3.c
Diese Datei implementiert die dritte Stufe des Algorithmus', in der 
versucht wird, zu gegebenen key0-, key1- und key2-Werten ein Pawort
zu finden. Die Suche ist in Abschnitt 3.6 des Papers beschrieben.

stage3.h
Dies ist eine Headerdatei fr stage3.c

writehead.c
Diese Datei ist das Gegenstck zu readhead.c - sie enthlt Funktionen,
um Datenstrukturen in ZIP-Dateien zu schreiben.

zdmain.c
Diese Datei enthlt die main()-Funktion des Programms zipdecrypt.

zipdecrypt.c 
Diese Datei enthlt eine Funktion, um eine ZIP-Datei mit Hilfe gegebener
key0-, key1- und key2-Werte zu entschlsseln. Sie erzeugt wiederum eine
ZIP-Datei, die allerdings unverschlsselt ist und mit beliebigen
ZIP-Programmen geffnet werden kann.
Diese Funktion wurde eingefhrt, weil es sehr lange dauern kann, ein
Pawort zu finden.

Wenn Sie weitere Informationen zum Algorithmus wnschen, lesen Sie das
beiliegende Paper (pkzip.ps.gz). Die Datei appnote.iz.txt enthlt eine
Beschreibung der Struktur von ZIP-Dateien. Beachten Sie auerdem den
Abschnitt "Weitere Informationen" weiter unten.

Das wr's. Manche der weniger durchsichtigen Abschnitte der Quelldateien
sind kommentiert. Die meisten Abschnitte sind es allerdings nicht.


8. Tips & Tricks
================

Jemand, der nicht genannt werden mchte, schrieb mir per email:
> I had asked Dimitri for the source to the Win32 version
> of PkCrack because I wanted to change it to allow it
> to scan an encrypted PKSFX-style self-extracting
> Zip file.
> 
> However, after a while, I figured out
> that you can use PkZipFix to convert a Zip .EXE to
> a regular .Zip, which will work with PkCrack.
> PkCrack didn't recognize the .EXE file.

(D. h. wenn Sie eine selbstentpackende ZIP-Datei entschlsseln mchten,
 dann wandeln Sie sie zunchst mit dem Programm pkzipfix in eine normale
 ZIP-Datei um, und benutzen Sie dann pkcrack zum entschlsseln dieser
 Datei.)

PkZIPFix ist ein Programm von PkWare, Inc. und nicht Teil dieser Software.
 

9. FAQ / Hufig gestellte Fragen
================================

F: "Soll ich eine komprimierte oder eine unkomprimierte Originaldatei
    verwenden?"
A: Sie mssen die unverschlsselte Datei mit *genau demselben* Programm und
   genau denselben Einstellungen komprimieren, mit denen die verschlsselte
   Datei erstellt wurde. Wenn also die verschlsselte Datei unkomprimiert
   ist, benutzen Sie die unkomprimierte Originaldatei. Wenn die verschlsselte
   Datei mit der Kompressionseinstellung 'best' komprimiert wurde, dann
   mssen Sie auch die unveschlsselte Datei mit der Einstellung 'best'
   komprimieren.
   Einen Fingerzeig, ob Sie die richtige Einstellung gewhlt haben, liefert
   Ihnen ein Vergleich der Dateigren: die verschlsselte Datei innerhalb
   der ZIP-Datei mu zwlf Byte lnger sein als die unverschlsselte.
   (Vorsicht, manche Programme ziehen diese zwlf Byte bei der Anzeige
    der Dateilnge automatisch ab. In dem Fall mssen die Dateigren
    bereinstimmen.)
   Wegen kleiner Unterschiede bei den Kompressionsverfahren ist es
   wichtig, da Sie zum Komprimieren der unverschlsselten Datei dieselbe
   Programmversion verwenden, mit der die verschlsselte Datei komprimiert
   wurde!

F: "Da steht, da vor den verschlsselten Daten zwlf Zufallsbytes in
    der Datei enthalten sind. Mu die verschlsselte Datei, mit der ich
    pkcrack aufrufe, diese zwlf Bytes enthalten?
A: Ja.

F: "Aber wo soll ich den die Originalversion dieser Zufallsbytes hernehmen?"
A: Gar nicht. Benutzen Sie einfach die Originaldatei ohne irgendetwas
   vorne anzuhngen.

F: "Hallo, knnen Sie mir die Datei entschlsseln, die ich unten angehngt
    habe?"
    [Gefolgt von ein paar Megabyte verschlsselten Datenmlls]
A: BITTE SCHICKEN SIE MIT KEINE DATEIEN, ES SEI DENN ICH BITTE AUSDRCKLICH
   DARUM. Danke.

10. Weitere Informationen
=========================

Original-Spezifikation des ZIP-Dateiformats von PKWare:
http://www.pkware.com/products/white_papers/white_appnote.html

Modifizierte Version von InfoZIP:
ftp://ftp.info-zip.org/pub/infozip/doc/appnote-011203-iz.zip

Einige Untersuchungen von Paul Kocher:
http://www.bokler.com/zipcrack.txt

Eine verbesserte Variante des ursprnglichen Angriffs:
http://www.woodmann.com/fravia/mike_zipattacks.htm

