java.exe -jar ArchiveStream.jar
⇔
ArchiveStream.bat
ZipStream.class と ArchiveStream.jar
今回は、StreamRelay.jar ではなく、同梱している ZipStream.class と ArchiveStream.jar の話
- ZipStream.class; zipアーカイバを操作できる
- ArchiveStream.jar; zipアーカイバ以外を操作できる
アーカイバ内部のファイルの一覧
java.exe ZipStream list 『ZIPファイル』
とか
java.exe -jar ArchiveStream.jar 『タイプ』 list 『アーカイバ』
という感じ。
アーカイバ内部のエンティティオブジェクトの名前を出力しているだけ。
ファイル名として不正なファイル「../../etc/passwdとかでも」でも、これは標準出力に出力しているので、エラーになることはないのが、他のアーカイバに比べての利点。
アーカイバ内部のファイルの一覧(ver8.2以降)
ver8.2 以降、-v オプションを指定すると、ファイル名だけではなく、最終更新日時、データサイズ(可能なら圧縮前と圧縮後と圧縮率も)も出力するようにした。
java.exe ZipStream list 『ZIPファイル』 -v
とか
java.exe -jar ArchiveStream.jar 『タイプ』 list 『アーカイバ』 -v
という感じ。
アーカイバ内部のファイルの一覧(ver8.2以降)(7z)
ver8.2で、Apache-Commons Compress を ver1.17, XZ for Java を ver1.8 にしたので、7z は、書き込みのみから、書き込みと一覧表示に対応した。
アーカイブのタイプ
ArchiveStream.jar で対応しているタイプは以下
- cpio
- ar
- tar
- zip
- arj
- 7z
- lha
アーカイバ内部のファイルの内容を出力
java.exe ZipStream read 『ZIPファイル』 『ファイル名』
とか
java.exe -jar ArchiveStream.jar 『タイプ』 read 『アーカイバ』 『ファイル名』
という感じ
『ファイル名』で指定されたエンティティ名の内容を標準出力に出力する
なので、ファイルにしたければ、↓な感じ
java.exe ZipStream read 『ZIPファイル』 『ファイル名』 > 『保存ファイル名』
とか
java.exe -jar ArchiveStream.jar 『タイプ』 read 『アーカイバ』 『ファイル名』 > 『保存ファイル名』
まぁ、リダイレクトしているだけだけどね。
アーカイバへの保存
java.exe ZipStream write 『ZIPファイル』 『ファイル名』 < 『入力ファイル名』
とか
java.exe -jar ArchiveStream.jar 『タイプ』 write 『アーカイバ』 『ファイル名』 < 『入力ファイル名』
または、
type 『入力ファイル名』 | java.exe ZipStream read 『ZIPファイル』 『ファイル名』
とか
type 『入力ファイル名』 | java.exe -jar ArchiveStream.jar 『タイプ』 read 『アーカイバ』 『ファイル名』
な感じ。
既存のアーカイブファイルに追記はできないので、新規作成にする必要がある。
例えば、
type phpinfo.php | java.exe ZipStream read test.zip ../../../../cgi-bin/bkdoor.php
とかで面白い脆弱性試験ができるかもしれない。
StreamRelay.jar と連携
アーカイブ内部のファイルの内容が、標準入力(write)とか標準出力(read)で取り出せるので、StreamRelay.jar と連携させることができるでしょう。