はじめに
まあ何回か書いている通り、みらい研究室実行委員会のWebページ担当なわけですが、何故にや知らん、理大祭会議なるものに出席することになりまして、それが理大祭、つまい学園祭に出展するために出なければならんとのことだからやむを得ない。
で、出て、資料もらって、資料がWebでも上がってるというから、「見てみるか」となったわけですね。これが元凶です
解凍できない・・・だと!?
私はWindows使いなんですが、標準の解凍機能はお粗末なんで、CubeICEを愛用しています。ところが
ERROR: エラーを特定できません
いやいや、どういうことだってばよ?よろしい、ならば7-zip先生に・・・
なんやって・・・。ねんのためWindows標準機能で・・・
パスワード違うだぁ!?こういう時はコマンドラインで・・・
わぁ・・・。なんかすごいエラーだけどとりあえず解凍できたぞ
ちょっとzipを解析するか
まずzipとはどういうデータ構造かというと、いろんな情報とデータに分かれていて、これがファイルごとに存在します。ではその情報のうち、ヘッダーを見ていきましょう。
オフセット | サイズ | 内容 |
---|---|---|
0 | 4 | ローカルファイルヘッダのシグネチャ = 0x504B0304(PK\003\004) |
4 | 2 | 展開に必要なバージョン (最小バージョン) |
6 | 2 | 汎用目的のビットフラグ |
8 | 2 | 圧縮メソッド |
10 | 2 | ファイルの最終変更時間 |
12 | 2 | ファイルの最終変更日付 |
14 | 4 | CRC-32 |
18 | 4 | 圧縮サイズ |
22 | 4 | 非圧縮サイズ |
26 | 2 | ファイル名の長さ (n) |
28 | 2 | 拡張フィールドの長さ (m) |
30 | n | ファイル名 |
30+n | m | 拡張フィールド |
で、実際のバイナリエディタで開いたものがこちら。
-
CRC32が格納される32bit分が空にもかかわらず、汎用目的のflagの3bit目が1になっていない。
→ほとんどの解凍ソフトで解凍に失敗 -
ファイル名がUTF-8でエンコードされているが、汎用目的のflagの11bit目が1になっていない。
→Macや最近のLinuxではこの場合UTF-8として扱うので文字化けが発生しないが、WindwosではShift-JISとして扱うので文字化けを引き起こす。 -
暗号化zipにはアーカイブデータの前に12byteの暗号ヘッダーが付加される。これの12バイト目に圧縮元のデータのCRC32値の上位8ビットが設定されるはずだが、上述の通りヘッダーのCRC32がぶっ壊れているため、一致しない。
→ほとんどの解凍ソフトで解凍に失敗
で、こんなぶっ壊れたファイルを吐くソフトは一体何者だ
ちょっとわからない。__MACOSX
とあるから、Macで作られたんだろうけど。