OSS で SWF をデコンパイルする(1) - flash-decompiler を使ってみる
AS3 対応のデコンパイラとしては、最近 Sothink SWF Decompiler 4 というのが登場したようだけど、AS3 に押し寄せる OSS 化の波の力を借りれば、無料でデコンパイルできるんじゃね?
ということで、Google Code で公開されている flash-decompiler を試してみた。
まずはどんなものなのかを知るためにビルドしてみる。
さっそくソース修正
Flex3 SDK で r45 をビルドするにはソースの修正が必要だった。
src/com/ludicast/decompiler/util/HeaderParser.as の5行目、
import mx.automation.codec.ArrayPropertyCodec;
をコメントアウト。
src/FlashDecompiler-app.xml で content が設定されていないので、手動で設定してあげる。
<content>FlashDecompiler.swf</content>
ビルド&実行
ビルド:
amxmlc FlashDecompiler.mxml -source-path+=..\locales\en_US
実行:
adl FlashDecompiler-app.xml
試しに実行
- URL of Remote SWF に SWF の URL を突っ込む。
- Parse ボタンを押す
- 情報が表示される!
Tags タブを開くと、SWF の中のタグ一覧が表示される。タグにはいろんな種類があって、シェイプとか画像とかABCの情報が入ってるようだ。
Tags の中から ABC(ActionScript ByteCode)のものだけを抜き出して表示するのが AS3 Classes。今は、クラス一覧を表示するだけっぽい。
とある Web サービスの SWF を解析した図。
channel3 とか mx.* とかがリストアップされてる。ふむふむ。
ソース読み
flash-decompiler のソースを覗く。クラス列挙をどうやってるのかが気になる。
まず、DoABC タグを ByteArray で取り出している。DoABC というのは ActionScript ByteCode が格納されているタグの名前のようだ。
次に、ByteArray を com.ludicast.decompiler.util.tamarin.Abc でパースしている。この、Abc というクラス、よく見てみると、tamarin の abcdump.as にある Abc クラスと全く同じ。
どうやら、com.ludicast.decompiler.util.tamarin.* のファイルは、abcdump.as をクラスごとにファイル分割したもののよう。asc.jar だと1ファイルに複数の public なクラスを定義できるけど、mxmlc だとビルドできないからね。
ということは、もう1工夫すれば、abcdump の出力結果を画面に表示することもできるはずだな…(続く)