9.

CAB(.cab)完全ガイド — Microsoft Cabinet・LZX/MSZIP・Windows Update / ドライバ配布の内部

編集
この記事の要点
  • CAB(Cabinet)は Microsoft が 1990 年代に開発したアーカイブ形式で、Windows インストール・更新の内部構造として標準採用されている
  • マジックナンバーは 4D 53 43 46(ASCII で MSCF)。MS-CAB-Format の略
  • 圧縮アルゴリズムは Quantum / LZX / MSZIP(DEFLATE 互換) の 3 種から選択可能。LZX は Windows Update 配信で多用される
  • Windows インストーラ(MSI/MSU/CAB 単体)、ドライバ配布(.inf + .cab)、Windows Update 配信パッケージ等で内部利用
  • コマンドは Windows 標準の expand / extract、UI からは エクスプローラで ZIP 同様に開ける、汎用展開は 7-Zip や Linux の cabextract
  • ボリューム分割対応(Setup.cab1, Setup.cab2 …)、コード署名(Authenticode)対応で改竄検出が可能
  • ZIP に比べると一般用途では少ないが、Windows OS 内部・サードパーティドライバ・古い CD-ROM 配布物では今でも頻出

概要

CAB(Cabinet ファイル、拡張子 .cab)は、Microsoft が Windows 95 時代に策定したアーカイブ・圧縮形式です。当時の Windows インストール CD-ROM では WIN95_02.CAB のような分割キャビネットファイルにシステムファイル一式が格納されており、現代に至るまで Windows OS の内部配布フォーマットとしての中核を担い続けています。

表からは見えにくい形式ですが、実は私たちが日常的に触れている多くの Windows コンポーネントが CAB を介して配信されています。たとえば Windows Update の累積パッケージ(.msu)の内部は CAB ですし、サードパーティのデバイスドライバを INF 経由でインストールする際の本体も CAB アーカイブです。Microsoft Office のセットアップ媒体、Visual C++ ランタイム配布、各種 OS イメージのコンポーネントなどでも広範に使われています。

CAB は単なる「Windows 専用 ZIP」ではなく、コード署名(Authenticode)ボリューム分割を仕様レベルで備えており、エンタープライズでの信頼配布に耐える設計になっている点が特長です。

内部構造とマジックナンバー

CAB ファイルはマジック「MSCF」で始まる固定ヘッダの後、フォルダ(圧縮単位)情報、ファイルエントリ、データブロックが続く構造です。

オフセット内容値・説明
0-3マジックナンバー4D 53 43 46("MSCF")
4-7Reserved1常に 0
8-11cbCabinetキャビネット全体のサイズ
16-19coffFiles最初のファイルエントリのオフセット
24-25versionMinor / Major通常 1.3
26-27cFolders含まれるフォルダ数
28-29cFiles含まれるファイル数
30-31Flags分割 / Reserve 領域有無

圧縮アルゴリズムはフォルダ単位で指定可能で、選択肢は次の 3 種です。

  • MSZIP: DEFLATE 互換(ZIP と同じ)。汎用性が高いが圧縮率は中程度
  • Quantum: 1990 年代に Microsoft が買収したアルゴリズム。レガシ用途
  • LZX: Microsoft 独自の高圧縮アルゴリズム。Windows Update や CHM(Compiled HTML Help)で多用

これらに加えて「無圧縮(Store)」も選択可能。Authenticode 署名は CAB ファイル末尾にデジタル署名ブロックとして付与され、Windows のドライバインストール時に検証されます。

主な用途

  • Windows OS インストール媒体: install.wim 内部、Setup.exe が呼び出す各種コンポーネント CAB
  • Windows Update: .msu パッケージ内部、累積更新の差分配信
  • デバイスドライバ配布: .inf + .cab の組み合わせ。Windows Update カタログからの個別ドライバ DL も CAB
  • サードパーティインストーラ内部: InstallShield, Wise, Advanced Installer などが生成する MSI/EXE の内部
  • 古いソフトウェア配布: 1990 年代後半〜2000 年代の CD-ROM ソフトウェア

関連形式との比較

形式主用途圧縮率署名対応分割OS 親和性
CABWindows 内部配布中〜高(LZX)○ (Authenticode)Windows 標準
ZIP汎用△(外部署名)クロス対応
MSIWindows インストーラ内部 CAB 利用×Windows 標準
WIMWindows OS イメージ高(LZX/XPRESS)×Windows 標準
7z汎用高圧縮非常に高×クロス対応

コマンド・ツール

REM ===== Windows 標準コマンド =====
REM CAB の中身を一覧表示
expand -D driver.cab

REM 単一ファイルを取り出す
expand driver.cab -F:setup.inf C:\temp

REM すべてのファイルを展開
expand driver.cab -F:* C:\temp

REM extract.exe (古い Windows でも利用可)
extract /Y /E driver.cab /L C:\temp

REM ===== CAB の作成 (Windows SDK の makecab) =====
makecab /D CompressionType=LZX /D CompressionMemory=21 mydata.txt mydata.cab

REM ディレクトリ全体を CAB 化 (DDF 定義ファイル経由)
makecab /F directives.ddf
# ===== Linux で CAB を扱う =====
sudo apt install cabextract

# 中身一覧
cabextract -l driver.cab

# 展開
cabextract driver.cab

# 7-Zip でも CAB は読み書き可能
7z l driver.cab
7z x driver.cab -oout/

注意点・落とし穴

  • 分割 CAB の取り扱い: Setup.cab1, Setup.cab2 ... のように分割されている場合、すべてが同じディレクトリに存在しないと展開できない。ネットワーク経由でダウンロードする際は要注意。
  • Authenticode 署名の検証: ドライバ用途では署名なしの CAB は Windows のドライバ署名強制(特に x64)に弾かれる。テスト署名やドライバ署名の理解が必要。
  • 古い CAB の脆弱性: CVE-2010-2552(Windows Movie Maker の CAB 解析時バッファオーバーフロー)など、CAB パーサ起因の脆弱性は過去に複数報告されている。未知ソースからの CAB を expand で展開する際は最新パッチを適用したシステムで実施。
  • 長いパス名問題: CAB 内部のファイルパスは Windows の MAX_PATH 制約に当たることがあり、深いディレクトリ配下に展開しようとして失敗するケースがある。
  • Quantum/LZX のライセンス: Quantum は Stac Electronics 由来、LZX は元々 Microsoft Network Books 用に開発されたもので、利用は通常 Microsoft ツール経由に限る。サードパーティ実装は cabextractlibmspack が代表。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ZIP(.zip)
  2. TAR(.tar)
  3. GZ / GZIP(.gz / .tgz)
  4. 7z(.7z)
  5. RAR(.rar)
  6. BZ2 / BZIP2(.bz2 / .tbz2)
  7. XZ / LZMA2(.xz / .txz)
  8. Zstandard(.zst / .zstd)
  9. CAB(.cab)
  10. LZH(.lzh / .lha)

最近更新/作成されたページ