CubeICE とカスタマイズ版 7-Zip ライブラリ

本日、CubeICE 0.9.0 β をリリースしました。修正内容は リリースノート に任せるとして、この記事では CubeICE で利用している 7-Zip のカスタマイズ版ライブラリの概要と、7-Zip ライブラリのみを更新する方法について記述します。

概要

CubeICE は、実際の圧縮・解凍処理を全て 7-Zip に頼った実装となっていますが、オリジナルの 7-Zip ライブラリ (7z.dll) に対して文字コードの推測処理を追加し、Unicode 文字セット*1 でビルドするようにカスタマイズしています。このカスタマイズ版 7-ZipソースコードGitHub より、ビルドした結果に関しては AppVeyor より取得する事ができます。

今回、この記事を公開しようと思った動機は、CubeICE のバージョンアップが間に合わない時に 7-Zip だけでも更新できる方法を公開しておいた方が良いと思ったためでした。先日、「7-Zip」に任意コード実行の脆弱性、修正版の v18.05 が公開 と言う記事でも報道された通り、2018/04/30 に公開された 7-Zip 18.05 には脆弱性に対する修正も含まれていましたが、諸々の都合で 7-Zip の該当バージョンを適用した CubeICE がリリースされるまでに 3 週間強のタイムラグが発生する事となりました。

カスタマイズ版 7-Zip のオリジナル版への追随に関しては、圧縮・解凍ソフト CubeICE をゼロから改修 した段階で楽に実現できるように改善されたため、多くの場合で、CubeICE のバージョンアップのかなり前の段階で利用可能な状態となります。そのため、7-Zip 由来の脆弱性等に関しては、これらのライブラリを差し換える事で CubeICE のバージョンアップ前であっても対応する事ができます。

カスタマイズ版 7-Zip の差し換え方法

CubeICE のバージョン確認

まず、CubeICE のバージョンを確認して下さい。CubeICE のバージョンは「CubeICE 設定」の「バージョン情報」タブで確認する事ができます。この時、バージョンが 0.8.0β 未満(0.7.3β や 0.6.8β など)の場合は CubeICE を最新版にアップデートして下さい。CubeICE は 0.8.0β にて大幅な変更が加えられていますので、それ以前のバージョンには適応できない可能性があります。バージョンが問題なければ、その右隣に記述されている文字列(x86 または x64)を覚えておいて下さい。

AppVeyor の cube-soft/7z プロジェクト

次に、AppVeyor の cube-soft/7z プロジェクト へ移動します。ここで、先ほどの文字列が x86 だった場合は「Platform: Win32」のリンク、x64 の場合は「Platform: x64」のリンクをクリックします。そうすると、中段の右側に「ARTIFACTS」と言うリンクがありますので、クリック後に表示される Zip ファイルをダウンロードして下さい。ダウンロード終了後、解凍したフォルダにある 7z.dll と 7z.sfx のファイルを CubeICE のインストールフォルダ(初期設定では C:\Program Files\CubeICE)にコピーして差し換えると完了です。

*1:Visual C++ の設定には、Unicode 文字セットでビルドする方法とマルチバイト文字セットでビルドする方法の 2 種類が提供されています。