http://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf_file_format_spec_v10.pdfからの関連引用
ヘッダーは、0x46、0x57、0x53 (「FWS」) のいずれかの 3 バイトの署名で始まります。または 0x43、0x57、0x53 (「CWS」)。
- FWS 署名は、圧縮されていない SWF ファイルを示します。
- CWS は、最初の 8 バイトの後 (つまり、FileLength フィールドの後) のファイル全体が、ZLIB オープン標準を使用して圧縮されたことを示します。ZLIB ライブラリが使用するデータ形式は、Request for Comments (RFC) ドキュメント 1950 ~ 1952 で説明されています。CWS ファイル圧縮は、SWF 6 以降でのみ許可されています。
更新コメントへの応答として、上記の内容を文字通りに翻訳した小さな bash スクリプトを次に示します。
#!/bin/bash
for swf in "$@"
do
signature=$(dd if="$swf" bs=1 count=3 2> /dev/null)
case "$signature" in
FWS)
echo -e "uncompressed\t$swf"
;;
CWS)
targetname="$(dirname "$swf")/uncompressed_$(basename "$swf")"
echo "uncompressing to $targetname"
dd if="$swf" bs=1 skip=8 2>/dev/null |
(echo -n 'FWS';
dd if="$swf" bs=1 skip=3 count=5 2>/dev/null;
zlib-flate -uncompress) > "$targetname"
;;
*)
{
echo -e "unrecognized\t$swf"
file "$swf"
} > /dev/stderr
;;
esac
done
次に、一連のファイルに出くわし*.swf
ます(として保存したと仮定しますuncompress_swf.sh
):
uncompress_swf.sh /some/folder/*.swf
それは次のようなことを言うでしょう
uncompressed /some/folder/a.swf
uncompressed /some/folder/b.swf
uncompressing to /some/folder/uncompressed_c.swf
何かがフラッシュ ファイルのように見えない場合は、stderr にエラーが出力されます。
免責事項これは、引用された仕様を読む方法です。7z x
このスクリプトを使用すると、入力 swf で使用した場合と同じ出力が得られることを確認しました。