SWFファイルを解析するの巻その2

アバター
せんちゃ
記事: 50
登録日時: 14年前
住所: 江別市東野幌町
連絡を取る:

SWFファイルを解析するの巻その2

投稿記事 by せんちゃ » 11年前

平日は会社ですがちょっと暇を見ては相変わらず作っていますSWFファイルの解析。
SWFファイルの仕様も大体わかってきました。
主にファイルの中身を見るうえで重要となるのは

・圧縮形式(FWS)と非圧縮形式(CWS)がある
・バイトオーダーはリトルエンディアン・ビットオーダーはビッグエンディアン。ビットオーダーをした場合は次のバイト位置までアライメントする必要がある

ファイルの最初のヘッダーを読んだあとはひたすらタグが続いてる感じ
タグは先頭にタグコードとタグのデータサイズが格納されている。
基本は2byteで10bitがタグコード・6bitがサイズのビッグエンディアン形式。
6bitに収まらない場合はとなりの4byteに正規のサイズが入る

後はひたすらこのタグを解析していくだけ!
って感じのよう。

実際に演出のデモとしてデザイナから貰っていたSWF素材などを見ると基本的に圧縮されていることが多いようです。
圧縮されている場合、ファイル先頭から数えて8バイト以降がzlib圧縮されているのでzlibライブラリを導入。
タグは結構あるが演出によく使われてるっぽいのは
・DefineShape
・DefineSprite
・PlaceObject2
・ShowFrame
・DefineBitsJPEG2
・DefineBitsJPEG3
などが多く見られた。
Defineとつくのは恐らく「定義するタグ」なのかな?
キャラクターを制御する「制御タグ」と「定義タグ」がタグの中でも分類されてるっぽい。

このPlaceObjectの中身を見ると今度は変形行列を扱うMATRIX、クリップアクション情報、移動コマンドがあるか?
などが取得できるっぽい。
DefineShape・DefineSpriteなども重要そうだけどこの辺はまだ未調査
ShowFrameは描画情報更新コマンドのようで中身もないようなので無視しても大丈夫そう
ビットマップ系はそのまま画像情報が入ってるのでサイズもやたらでかい。

SWFで定義されている構造体が結構あるのでまずはそれらのフィールドを用意していこうかと
構造体は結構な数があるので昼休みとかビルド中とかに暇つぶしにカタカタ書いてりゃいいか~

ではでは

ISLe
記事: 2650
登録日時: 14年前

RE: SWFファイルを解析するの巻その2

投稿記事 by ISLe » 11年前

せんちゃ さんが書きました:ファイルの最初のヘッダーを読んだあとはひたすらタグが続いてる感じ
タグは先頭にタグコードとタグのデータサイズが格納されている。
チャンク構造ですね。
チャンクと呼ぶことが多いと思いますけど、SWFではタグと呼ぶようですね。

swfはバージョンによってかなり違いますし、必要な機能に絞って実装するのが良いと思います。
プログラム側とデザイナ側である程度擦り合わせをしないとけっきょくデザイナさんの言いなりなので。
せんちゃ さんが書きました:SWFで定義されている構造体が結構あるのでまずはそれらのフィールドを用意していこうかと
構造体は結構な数があるので昼休みとかビルド中とかに暇つぶしにカタカタ書いてりゃいいか~
SWF File Format Reference | Made to Order Software Corporation
こちらのページはご存知?
最後に編集したユーザー ISLe on 2013年12月12日(木) 17:10 [ 編集 1 回目 ]

アバター
せんちゃ
記事: 50
登録日時: 14年前
住所: 江別市東野幌町
連絡を取る:

Re: SWFファイルを解析するの巻その2

投稿記事 by せんちゃ » 11年前

日本語のページばかり探していたので知らなかったページですが、
http://hkpr.info/flash/swf/index.php?Flash%20SWF%20Spec
のページを参考にしています。
構造体の内容が詳しく書かれているので役立っています

おお、良く見たらソースで説明されているのですね
なかなかこの手のページは探してもなかったので参考になります
最後に編集したユーザー せんちゃ on 2013年12月12日(木) 17:45 [ 編集 1 回目 ]