無圧縮zipを解析して、自力でバイナリを叩いて作成してみた。

よく。コンピュータの世界で
”ファイル”と、申しますが、
結局のところ、ただの数でございます。

そのファイルの桁数が、ファイルサイズであり、
JANコードと同じく
ファイルの桁ごとに、意味を持たせて、人間が、取り扱えるようにしているにすぎません。

つまり、
ただの数を観て、感動したり。ただの数を見て、欲情したり。している訳です。
cf.ゲーデル数



そんなことで。

私が、これまで挑戦してきました


□ファイルを、tarに結合してみたり。
http://oyk3865b.blog13.fc2.com/blog-entry-1609.html


□画像を、直接PDFに変換に挑戦してみたり。
http://oyk3865b.blog13.fc2.com/blog-entry-1140.html


□画像を、直接MHTMLに変換してみたり。
http://oyk3865b.blog13.fc2.com/blog-entry-1218.html


□Bitmapデータを、バイナリレベルで触ることに挑戦してみたり
http://oyk3865b.blog13.fc2.com/blog-entry-1394.html


□Waveデータを、バイナリレベルで触ることに挑戦してみたり
http://oyk3865b.blog13.fc2.com/blog-entry-1400.html


ファイルのバイナリを直接叩いて、作成するシリーズ。
の、今回は、その多分第六弾。


無圧縮zipを解析して、
自力でバイナリを叩いて作成してみた。

ので、この記事にて報告させていただこうと思います。

                l三`ー 、_;:;:;:;:;:;:j;:;:;:;:;:;:_;:;:;_;:〟-三三三三三l
               l三  r=ミ''‐--‐';二,_ ̄    ,三三三彡彡l_   この感じ・・・・
              lミ′   ̄    ー-'"    '=ミニ彡彡/‐、ヽ
                  l;l  ,_-‐ 、    __,,.. - 、       彡彡彳、.//  zipか・・・・
_______∧,、_∥ `之ヽ、, i l´ _,ィ辷ァ-、、   彡彡'r ノ/_ ______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄'`'` ̄ 1     ̄フ/l l::. ヽこ~ ̄     彡彳~´/  ̄ ̄ ̄ ̄ ̄ ̄
                 ヽ   ´ :l .l:::.         彡ィ-‐'′
                ゝ、  / :.  :r-、        彡′
              / ィ:ヘ  `ヽ:__,ィ='´        彡;ヽ、
          _,,..-‐'7 /:::::::ヽ   _: :_    ヽ      ィ´.}::ヽ ヽ、
      _,-‐'´    {  ヽ:::::::::ヘ `'ー===ー-- '   /ノ /::::::ヘ, ヽー、


※AAは、http://kenji1234.blog75.fc2.com/blog-entry-41.htmlより引用させていただきました。







私が、偉大なる

◆『The structure of a PKZip file』
https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html


◆『APPNOTE.TXT - .ZIP File Format Specification』
https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT


◆『ZIP書庫ファイル フォーマット』
http://www.tvg.ne.jp/menyukko/cauldron/dtzipformat.html


以上のサイト様を、大いに参考にさせていただきまして、
誤りや、勘違いなど、多分に含まれているでありますが、

私なりに、zipというファイル構造をまとめてみた画像が、
以下の通りでございます。
00433.jpg





以上の構造と、その詳細を、勉強させていただいた上で、

麻呂74b8
こちらの画像を、
私自身で、Stirlingを使用して、直接バイナリを叩いて、
zipに無圧縮で、アーカイブしている様子が、以下の通りでございます。


********************************************
まずは。前半戦。Local file headerとバイナリ本体の記述です。
Local file headerとバイナリ本体のセットで、
各ファイルごとにループします。
005+4543.jpg

586464.gif



********************************************
次に、後半戦。central file headerの記述と、
End of central directory recordの記述です。
central file headerは、ファイルの数だけループして作成します。
ad4645.jpg

342qer.png


以上が
私が、勝手ながらに解釈した、
無圧縮zipのファイル構造でございます。







同様に、

●シフトJISで、「三」と言うテキスト内容を持つ、『A.txt』
●シフトJISで、「重」と言うテキスト内容を持つ、『B.txt』

上記2個のファイルをアーカイブしたものは、
以下のような構造でございます。
d74saf4d6.jpg

asadfasf.jpg









解析していて感じたことは、

この頃のファイルは、zipにアーカイブする前に
すでに、圧縮されている形式が多く。
無圧縮zipでも、そこまで、見劣りはしないように感じております。


今回、zipの構造を解析していて、初めて知ったことで

アーカイブしたファイルの、更新日時の取り扱いは、
ビット数の制約の関係から、秒数が、偶数のみしか扱えず。
zipからの解凍後に、秒数に誤差が生じる。
ということを知りました。

同様に、
あるフォルダの、ファイル更新日時の秒数が、すべて偶数の場合は
zipから解凍されたフォルダである。
という推測ができるだろうと、知りました。


今回、無圧縮zipの内部構造が分かったので
この内容を、落とし込んで。
Visual Basic 2008 / 2015にコード化したものが出来上がりましたので、
次回に、紹介させていただきたいと思います。
http://oyk3865b.blog13.fc2.com/blog-entry-2168.html



最後に。改めまして。
この記事の内容には、私の憶測や勘違い、
誤っている内容が、多分に含まれているだろうことを
ご留意いただけると幸いでございます。


以上
ありがとうございました。







ここでは、今回紹介させていただきました。

●シフトJISで、「三」と言うテキスト内容を持つ、『A.txt』
●シフトJISで、「重」と言うテキスト内容を持つ、『B.txt』

上記2個のファイルをアーカイブしたzipの、
バイナリを、そのまま置いとかせていただきます。

50 4B 03 04 0A 00 00 00 00 00 B1 44 99 47 3B FB BA 02 02 00 00 00 02 00 00 00 05 00 00 00 41 2E 74 78 74 8E 4F 50 4B 03 04 10 00 00 00 00 00 B1 44 99 47 3A 33 1D B7 02 00 00 00 02 00 00 00 05 00 00 00 42 2E 74 78 74 8F 64 50 4B 01 02 0A 00 0A 00 00 00 00 00 B1 44 99 47 3B FB BA 02 02 00 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 2E 74 78 74 50 4B 01 02 0A 00 0A 00 00 00 00 00 B1 44 99 47 3A 33 1D B7 02 00 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 25 00 00 00 42 2E 74 78 74 50 4B 05 06 00 00 00 00 02 00 02 00 66 00 00 00 4A 00 00 00 00 00
スポンサーサイト

テーマ : 雑記 - ジャンル : コンピュータ

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー) URL

プロフィール





最新記事
最新コメント
最新トラックバック



月別アーカイブ
カテゴリ