### Micco's Home Page ### Welcome to Micco's page!!
Sorry, but this web page is written in Japanese.
<English>
■ 更新情報
■ このWebページについて
■ お知らせ
■ ダウンロード
■ DLL のインストール方法
■ SFX の設定例
■ いろいろ
対応ブラウザー
[Internet Explorer] [Firefox] [Opera] [Sleipnir] [Safari] [Google Chrome]
連絡先:Micco
[e-mail]
[→Home]

● LHMelting for Win32  <Sep.17,2010>
[Vista][WinXP][Win2k][NT4.0][NT3.5x][WinMe][Win98][Win95][Win32s]

[LHMelt]

 LZH 書庫を始めとして, 各種書庫の操作を行うためのアプリです。 平均的な仕様ですが, 強いて言えば, 拡張子を気にせずに済むことと Win32s 等でも動作する点が特徴でしょうか。 (^^;; それぞれの書庫用の DLL が必要となりますが, LZH, ZIP, CAB, TAR (GZIP, BZIP), BGA 書庫の操作と ARJ, GCA, RAR 書庫の展開, そして ISH の作成復元が行えます。

 元々 DLL の動作確認用に作成されたものなので, 凝った機能は何もありません。 代わりに DLL 用のやたらめったら細かい設定メニューが氾濫しています。 Win32s でも動作可能でないといけない関係上, 非常に古くさいインターフェイスになってしまっています。 書庫内のディレクトリー構造をツリー表示することもなければ, ダイアログ等の画面構成も二昔前のものでしかありません。

 初心者の方や書庫関係に明るくない方は, 解らない設定は弄らないほうがいいです。 少なくとも「オプション設定」ダイアログから呼び出せる各 DLL の設定ダイアログの項目は弄ってはダメです。 LHMelt どころか, 他のアプリまで正常に動作しなくなります。


ダウンロード [旧版ダウンロードページへ]

Ver 1.65c:正式公開版です。 通常はこちらをお使いください。
[WinSFX32M] LHMelt Ver 1.65c (LMEL165C.EXE 2,774KB,2010/09/12) *
MD5: 0ECF80ACD941B67AED46055B0DD2B4CD
SHA1: E2325870CD1A8A74143A2B39A80315D1C9A0FFE0
CRC32: E3B97512
.

更新履歴

Ver 1.65b からの変更点

  • LMLZH32.DLL Ver 2.67a を同梱しました。 (コマンドライン文字列にサロゲートペアが含まれていると, 正常に文字列を取得できなかったバグを修正しました。)

Ver 1.65a からの変更点

  • セキュリティアドバイザリ (2269637) で公開された, 外部 DLL ロードに関する脆弱性について, Windows XP (非 SP1 以降。), Windows 2000, Windows NT, Win9x についても対応しました。
    旧環境については, 意識的にカレントディレクトリーからのロードを行っているケースも散見されますが, LHMelt Ver 1.65b 以降では そのような利用法は行えませんので注意してください。 (迷ったのですが, 利用できない仕様とさせて頂きました。)

Ver 1.64f からの変更点

  • セキュリティアドバイザリ (2269637) で公開された, 外部 DLL ロードに関する脆弱性に対応しました。 ただし, 対応が有効となるのは Windows XP SP1 以降の NT 系 OS のみとなります。
  • コモンダイアログ系について, 履歴情報が存在しない場合にファイル名エディトボックスが空になってしまうことのあったバグを修正しました。
    なお, Windows 7 や Vista でエディトボックスが空表示される ("*.*" などのワイルド表示が行われない。) のは Windows の仕様です。
  • Windows 7, Windows Vista, Windows Server 2008 について, バージョン表示の改善を行いました。
  • LMLZH32.DLL Ver 2.66a を同梱しました。
  • HTML ヘルプを更新しました。

よくある質問

・脆弱性関連については, 以下のページを参照してください。

・Ver 1.65a 以降を起動した際に「SCFunc.dll が見つからなかったため、このアプリケーションを開始できませんでした」と表示される *

 SCFunc.dll は StarSoftcomm の StarCenter に含まれるモジュールです。 当該ソフトがどういったソフト (システム) なのかは不明ですが, Web で得られる情報によると常駐した上で他のプロセスを監視しているようです。

当該ソフトが「安全でないライブラリのロードにより、リモートでコードが実行される (マイクロソフト セキュリティ アドバイザリ 2269637)」の肝に当たる「カレントディレクトリーからの DLL ロード」に依存しているため, それを禁止している Ver 1.65a 以降の LHMelt への接触が上手く行えなくなっているのが原因です。 他のプロセスに接触しようとするソフト側の不具合ですので, LHMelt に限らず同様の問題が発生しますが, Adobe Air のインストーラー方面で発生する頻度が高いようです。

 言わずもがなですが, StarCenter に限らず, 「○○が見つからなかったため〜」が表示された場合は, その当該 DLL を使用しているソフトに上述の脆弱性が存在することになります。 特に今回のような他のプロセスを監視する類では影響が甚大 (ソフトの性格からしてシステム・管理者権限を容易に取得できる環境で動作しているでしょうから, 真の意味で「何でもあり。」) ですので, 可能であれば, 当該ソフトの更新や乗り換えを検討したほうが良いかもしれません。

・ファイルを圧縮したのに全然圧縮されていない (サイズが変わらない)

 jpeg 形式の画像など, 一部のファイルは「それ自体すでに圧縮されている」ファイルです。 LHMelt (というか, 各 DLL。) がファイルを圧縮する機能をもっていたとしても, すでに圧縮されているものを, それ以上圧縮することはできません。

・「エンドマークが存在しません」エラーについて

 LZH 書庫を扱うツールの中には, 一部不正なヘッダーを作成してしまうものがあります。

 これまでの UNLHA32.DLL では, 致命的なものでない限りは, そのような書庫についても扱うようになっていましたが, そのような書庫を扱えない対応アプリが存在し, 結果として書庫やファイルを失ってしまう…という事故が意外と多く発生していました。 このため, 最近の UNLHA32.DLL については, 安全性を考慮して, そのような書庫については扱わないようになっています。

 特に多いのが「必要なエンドマークが存在しない」書庫で, 結果として, これによるエラーを比較的多く目にすることになってしまっています。

 これらは, 「破損ヘッダー」と見なせるものなので, "-jc" スイッチを使用することで, 処理を継続させることができます。 「エンドマークが存在しない」のエラーの場合は, 実際にはすべての格納ファイルの処理が終了しているので, メッセージ等が表示される以外の (展開できないファイルが発生する等の) 被害を伴いません。 拙作の LHMelt では「破損ヘッダーを読み飛ばす」を有効にすることで, この不具合を回避することが可能です。

・タイムスタンプがずれてしまう

 UNLHA32.DLL が通常作成する書庫では, タイムスタンプは, すべて協定世界時 (UTC) で扱われます。 Win3.1 や MS-DOS 用のプログラムでは, 環境変数の設定に基づいて UTC→地方時間 (例えば日本標準時間。) への変換が行われるようになっており, たとえ WinXP 等の環境であっても, コマンドプロンプト画面 (DOS 窓) 等で実行する場合には, この環境変数が設定されていないとタイムスタンプがずれてしまいます。

 日本国内で使用する場合には, 次の環境変数を設定してください。

TZ=JST-09

・ZIP 書庫への格納時に関係ないファイルまで格納されてしまう

 LHMelt は, 通常 ZIP 書庫の圧縮等の際には ZIP32J.DLL を使用します。 ZIP32J.DLL は内部で Info-ZIP の DLL 版である ZIP32.DLL を呼び出しますが, この ZIP32.DLL にはバグが存在していて, 日本語等マルチバイト文字が混在する名前のファイルを正常に扱えません。 通常は問題なく扱われるのですが, "Test[ア].TXT" といった ZIP32.DLL の正規表現指定に使われる文字 (この場合は '[' が該当し, 多くのソフトでは "Test[[]ア].TXT" のように正規表現を使った指定となる。) が含まれたファイルを指定すると, 本来合致しないはずの "Test[ω].TXT" まで格納されてしまいます。 同様に "ア*.TXT" のようなワイルドカード (正規表現) 指定を行った場合, "アマゾン.TXT" と一緒に "Ολυμποσ.TXT" (欧文フォントで表示されていますが, 全角のギリシア文字です。 Unicode なら "Όλυμπος" とするところです。) までもが格納されてしまいます。

 ソースを確認していないので推測ですが, このバグは「ある文字の 1 文字前」を参照する必要があった場合に, 当該文字がマルチバイト文字かどうかを確認せずにシングルバイトで照合を行ってしまっているためだと思われます。 (CharPrev() API を使用している等, 当該文字への移動は正常に行われている。)  上記の例では "ア" (0x8341), "Ο" (0x83AD), "ω" (0x83D6) が全て 0x83 で始まっているため同一と見なされてしまっているわけで, "ァ" (0x8340) から "ω" (0x83D6) までの 130 字超が同じ文字として扱われてしまう結果となります。
 ちなみに, 「ある文字の 1 文字後」といった通常の方向の場合には大丈夫なので, 「*ン.TXT」といったような指定を行った場合は, 期待どおり "アマゾン.TXT" のみが格納されます。

 このバグは Ver 2.3x に共通していることから, ZIP32.DLL を使用する場合, '[' のような文字を使用しないようにする必要があります。 使用する場合は 7-ZIP32.DLL を使用して ZIP 書庫を扱う必要が出てきます。
 なお, このバグは Ver 2.2 には存在しませんので, LHMelt では (7-ZIP32.DLL が使えない場合等を考慮して) 要求版を 2.2 まで引き下げてありますが, 9 年近く前の版であることから, Ver 2.2 の使用は, お勧めしません。

[→Page top] [→Home]