web-dev-qa-db-ja.com

Zipユーティリティはどのようにファイルの内容を識別し、.exeファイルを解凍できるのですか?

開いているファイルがZipファイルであるかどうかに関係なく、Zipと解凍ソフトウェアの識別方法について少し混乱しています。

AFAIK、プログラムは拡張子が.ZipのファイルがZipファイルであることを識別できます。拡張子がないと、ファイルタイプの判別に使用できるマジックビットまたはMIMEタイプがあります。

問題は、7-Zipを使用してAMDのドライバーインストーラーのように自己解凍型の実行可能ファイル.exeを開くと、ファイルを開くことができ、内容が正しく表示されることです。しかし、「実行可能」な部分はなくなっています。また、7-Zipはどのようにこのファイルの種類を決定しますか? Windowsで.exeファイルにPEヘッダーを含めないでください。

さらに混乱しているのは、7-Zipを使用してISOファイルを解凍できることですが、7-Zipはそのファイルタイプを処理できると言っているので問題ありません。しかし、7-Zipを使用して VirtualBox Installer を開くと、ファイルの内容は次のようになります。

.rsrc/
.data
.rdata
.reloc
.rsrc_1
.text
CERTIFICATE

これらのファイルはexe内のリソースファイルであり、7-ZipはファイルタイプがPEであることを報告したので、リソースハッカーのように機能してリソースファイルを表示していると思いますか?しかし、すべてのexeファイルをこの方法で開くことができるわけではありません、なぜですか?そして Open VPN Installer を開くと、ファイルの内容は次のようになります。

$PLUGINSDIR
$TEMP
bin
doc
easy-rsa
sample-config
icon.ico
Uninstall.exe.nsis

そして、これは基本的に、インストール後に$フォルダを除いて得られるものです。また、ファイルタイプはNsisで、自己解凍型実行可能ファイル.exeと同じです。彼らは同じメカニズムを使用していると思いますが、私は正しいのでしょうか?しかし、なぜこのファイルがPEタイプではないのですか?または、7-Zipは、あらゆる種類のファイルを処理できるスイスアーミーナイフのようなソフトウェアですか?しかし、7-Zipはそれをどのように識別するのでしょうか。

私は長い間この質問に疑問を抱いてきましたが、どんな助けにも感謝します!

3
Zhwt

7-Zipで開くことができる2つの実行可能ファイルを見つけましたが、その背後にあるメカニズムはまったく異なります。

7-Zipは実行可能ファイルの内部構造を示しています

.rsrc/
.data
.rdata
.reloc
.rsrc_1
.text
CERTIFICATE

このリストは7Zipの特別な機能です。実行可能ファイルは解凍できませんが、内部構造があり、7Zipはこの構造を認識しており、Zipアーカイブのように見えますが、代わりに実行可能ファイルの内部構造を表示します。

「添付」Zipファイルを持つ実行可能ファイル

2番目の例-インストーラーファイルは、実行可能ファイルと、実行可能ファイルに付加されたZipファイルの組み合わせです。

$PLUGINSDIR
$TEMP
bin
doc
easy-rsa
sample-config
icon.ico
Uninstall.exe.nsis

インストーラーを実行すると、実行可能なフロントパートのみが実行されます。次に、このコード部分は、自身の実行可能ファイルでZipファイルの先頭を検索することにより、自己解凍を実行します。次に、このZipファイルが抽出され、インストーラーによって処理されます。

このようなファイルを開くと、7Zipと他のアーカイブ抽出ツールがZipファイルを検索し始め、実行可能なフロントパートを無視します。したがって、インストーラーを実行しなくても、そのような実行可能ファイルを開いてコンテンツを表示できます。

すべてのインストーラがこの方法を使用しているわけではなく、7-Zipで表示できない独自のアーカイブ形式を使用していることに注意してください。したがって、そのようなインストーラーを開くと、実行可能構造のビューしか取得できません。

2
Robert

あなたは本当に、どのようなプログラムがどのようなファイルタイプを開くかについて尋ねています。簡単に言えば、ファイルヘッダーを読み取ります。 "YES" 7-Zipは、多くの種類のファイルを認識するプログラムです。

より長い答えは、ほとんどのファイル(事実上すべて)に、ヘッダーと呼ばれる構造化されたセクションがあり、それ自体と、格納されているすべてのパーツの方法と場所を識別することです。

ファイル拡張子は多くの場合最初の指標ですが、多くのプログラムはそれを「安全なデータ」として受け入れず、ヘッダーをチェックしてそれを確認します。したがって、拡張機能は、予想されるヘッダーのセットを絞り込むための最良の方法です。拡張子が「信頼できない」というのは、人間が編集でき、ファイルの内容には影響しないということです。簡単な例:Wordの「.docx」ファイルが「.Zip」に名前変更され、Windowsエクスプローラーを使用して問題なく解凍されます。

多くの場合、ファイルの最初の数バイトには、それらを識別する何らかのタグが付いています。プログラムはこれをチェックしたら、次に何をするかを決定し、ファイルを使用できるようにファイルが適切に構成されていることを期待します。期待に沿わない場合は、文句を言います(エラーをスローします)。

TIFFファイルの最初の2バイト は "II"または "MM"(インテルまたはモトローラのバイト順)で始まり、その後にバージョン情報用の2バイトが続きます。 (常に42、 非常に重要 );次に、ファイル情報「タグ」を取得するためにジャンプする場所をソフトウェアに指示する4バイト。タグにジャンプすると、タグごとに12バイトになります。 TIFFは、.TIF拡張子が提供するヒントを必要とするため、Photoshopなどのソフトウェアが困惑する可能性があると考えて、ファイル拡張子に頼らずに読み取って理解することができます。

そのTIFFの一部の情報は可変または非標準なので、ソフトウェアはヘッダーを使用して、使用できる情報を見つける場所を決定します。 TIFF画像データはLZW圧縮で圧縮できることに注意してください。これは、Zipで使用されていた(元々は?)圧縮の子孫と見なされる可能性があります。

Scitex画像ファイル(SCT)とjpeg画像ファイル(JFIF)のヘッダーはTIFFヘッダーとは根本的に異なりますが、これら3つのファイルタイプを処理し、画像をアスペクト比で並べ替えるソフトウェアを作成する場合は、ヘッダー情報を使用してファイルの種類を認識し、別の手順を実行して各種類の幅と高さを読み取ります。

すべてのファイルストレージスキーム(EXEおよび自己解凍を含む)はヘッダーの概念を使用しますが、実際に使用されるスキーマは異なります。

"YES" 7-Zipは、認識するヘッダー定義が多数あるプログラムです。

2
Yorik

自己解凍アーカイブは、同じファイル内にあるZipコンテンツを見つけて抽出する短い「スタブ」プログラムで構成されています。通常、Zipユーティリティは、EXEが自己解凍型アーカイブであることを認識し、それをZipファイルとして扱うこともできます。

1
Mike Robinson

コンピューターは拡張子を使用してファイルを識別し、.Zipファイルはアーカイブファイル形式であることを認識します。拡張子が.exeのファイルは実行可能で、Windowsオペレーティングシステムで使用されます。これらは、コードを含むファイルを含む実行可能なアーカイブと考えることができます。ファイルには、そのタイプに関するヘッダーも含まれています。 PEタイプは、Portable Executable形式を表します。多くのファイルは単なるアーカイブであり、拡張子はファイルの使用方法を示すだけなので、アーカイブマネージャーは非常に普遍的なツールです。たとえば、アーカイブマネージャー(7-Zip)で.pptxを開こうとすることができます。

0
0x0