2009-09-28 6 views

Répondre

8

Il est pas vrai que les fichiers ZIP doivent commencer par

50 4B 03 04 

entrées dans les fichiers zip commencent par 50 4B 03 04... ..et souvent, purs fichiers zip commencent par une entrée zip comme la première chose dans le fichier. Mais, il n'y a aucune exigence que les fichiers zip commencent avec ces octets. Tous les fichiers qui commencent par ces octets sont probablement les fichiers zip, mais tous les fichiers zip ne commencent pas avec ces octets.

Par exemple, vous pouvez créer une archive auto-extractible qui est un fichier PE-COFF, un EXE régulier, dans lequel il fait est une signature pour le fichier, qui est 4D 5A .... Ensuite, plus tard dans le fichier exe, vous pouvez stocker les entrées zip, en commençant par 50 4B 03 04.... Le fichier est à la fois .exe et .zip.

Une archive auto-extractible n'est pas la seule classe de fichier zip qui ne commence pas par 50 4B 03 04. Vous pouvez ainsi "cacher" des données arbitraires dans un fichier zip. WinZip et d'autres outils devraient avoir aucun problème à lire un fichier zip formaté de cette façon.

Si vous trouvez la signature 50 4B 03 04 dans un fichier, que ce soit au début du fichier ou ailleurs, vous pouvez regarder les quelques octets pour déterminer si cette entrée particulière est cryptée. Normalement, il ressemble à ceci:

50 4B 03 04 14 00 01 00 08 00 ... 

Les quatre premiers octets sont la signature d'entrée. Les deux octets suivants sont la "version nécessaire pour extraire". Dans ce cas, il s'agit de 0x0014, qui est 20. Selon la spécification pkware, cela signifie que la version 2.0 de la spécification pkzip est nécessaire pour extraire l'entrée. (La dernière "fonctionnalité" zip utilisée par l'entrée est décrite par v2.0 de la spécification). Vous pouvez trouver des numéros plus élevés si des fonctionnalités plus avancées sont utilisées dans le fichier zip. Le cryptage AES requiert la version 5.1 de la spécification. Vous devriez donc trouver 0x0033 dans cet en-tête. (Tous les outils zip ne respectent pas cela). Les 2 octets suivants représentent l'indicateur de bit à usage général (la spécification l'appelle un "indicateur de bit" même s'il s'agit d'un champ de bit ), dans ce cas 0x0001. Le bit 0 est défini, ce qui indique que l'entrée est cryptée.

D'autres bits de ce bit ont un sens et peuvent également être définis. Par exemple, le bit 6 indique qu'un cryptage fort a été utilisé - soit AES, soit un autre cryptage plus fort. Le bit 11 indique que l'entrée utilise l'encodage UTF-8 pour le nom de fichier et le commentaire.

Toutes ces informations sont disponibles dans le PKWare AppNote.txt spec.

+0

Hmmm ... Je cherchais à implémenter un simple C# IsZipFile (pathToFile) et IsPasswordProtectedZipFile (pathToFile). J'avais supposé que le mot de passe s'appliquait à l'ensemble de l'archive. – frankadelic

+0

Le mot de passe ne s'applique normalement pas à l'ensemble du fichier, bien qu'il existe un «chiffrement d'annuaire central» défini par la spécification, qui est proche de «l'application d'un mot de passe à l'ensemble de l'archive». Peu d'outils prennent en charge cette fonctionnalité. Il est possible de produire une méthode IsZipFile() - vous numérisez jusqu'à la fin et recherchez le répertoire zip. IsPasswordProtected() est similaire, sauf que vous devez vérifier la présence du répertoire central et également vérifier si l'une des entrées est protégée. – Cheeso

+0

Eh bien, si vous avez une archive auto-extractible, techniquement, vous n'avez plus de fichier ZIP, vous avez un exécutable PE. Les pièces qu'il contient sont des détails supplémentaires. Par exemple, exécutable peut être installateur, peut être archive auto-extractible, peut être le point d'entrée principal du programme normal, peut être lanceur, mais tout cela est juste une taxonomie séparée sans rapport avec le type du fichier en question. – hijarian

4

Les fichiers sous-jacents de l'archive zip sont protégés par mot de passe. Vous pouvez avoir une série de fichiers protégés par mot de passe et de mot de passe non protégés dans une archive (par exemple, un fichier readme, puis le contenu).

0

Si vous avez suivi les liens décrivant les fichiers ZIP dans l'URL que vous référencez, vous constaterez que this one traite du bit qui indique si un fichier de l'archive ZIP est chiffré ou non. Il semble que chaque fichier de l'archive peut être crypté indépendamment ou non.

Questions connexes