multipart-zipfiles mit passwort
-
moin meisters ...
Kennt jemand die Initalisierung der Schlüssel für Multipartarchive ?
Für Singlepart sieht es so aus, Code stammt aus zLib.
/*********************************************************************** * Initialize the encryption keys and the random header according to * the given password. */ static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab) { *(pkeys+0) = 305419896L; *(pkeys+1) = 591751049L; *(pkeys+2) = 878082192L; while (*passwd != '\0') { update_keys(pkeys,pcrc_32_tab,(int)*passwd); passwd++; } }
Das Problem ist ganz einfach, das resultierende Pwd eines ZipFiles besteht immer aus 12 Bytes, wobei die letzten 2 Bytes nach Decodierung der 12 Bytes Teile der CRC ( Datei in Zipfile ) darstellen.
Für Singlepart Archive funktioniert alles einwandfrei. Wenn ich jetzt selbst ein Multipartarchiv mit PWD erstelle kann es mit Winzip nicht extrahiert werden, Pwd falsch.
Wenn ich ein mit Winzip erstelltes Multipartarchiv mit PWD erstelle und es
mit meinem noch bescheidenen Testprg extrahieren will, funktioniert es, jedoch stimmen die letzten 2 Bytes nicht mit einem Teil der CRC überein, aber der Schlüssel würde schon mal passen.Wenn ich die 12 Bytes der Winzip Datei in meine Zipdatei übertrage, ohne die Daten der kompr. Datei zu verändern !!! Kann man mit Winzip diese wieder entpacken !!!
Das heißt ein und die selben Daten können mit verschieden Schlüsselpaaren
entpackt werden, jedoch nur bei einem Schlüsselpaar stimmten auch die letzen 2 Bytes überein, welche nicht zum decodieren, sondern nur zur Prüfung des PWD verwendet werden ( lt. Doku PKWare ).Aus diesem Grund, ich prüfe nicht die letzen 2 Bytes sondern extrahiere nur, kann ich ein WinZip Archiv entpacken, umgekehrt kann Winzip das nicht, weil es die letzten 2 Bytes prüft.
Nun suche ich die Initalisierung
*(pkeys+0) = 305419896L; *(pkeys+1) = 591751049L; *(pkeys+2) = 878082192L;
jedoch für Multipartarchive.
Habe nun schon versucht in drei verschachtelten Schleifen solange die Keys zu verändern, bis die 3 Werte passen, aber das ist eine sehr sehr langwierige Angelegenheit *logisch* solls ja auch eigentlich, aber in meinem Fall etwaas doof
MfG
RB<edit=kingruedi> sfds </edit>