Tamarin の abcdump.as から abcdump.exe を作成する方法 2009年1月版

abcdump.exe を作った方法をメモしておく。Windows での話。

完成品の abcdump.exe はこちら。

使い方

abcdump xxxx.abc

xxxx.abc って何?

ABC は ActionScript ByteCode のこと。SWF の中には ActionScript のソースコードを abc に変換したものが埋め込まれている。

xxxx.abc を作成するには次のような2つの方法がある。

asc.jar を使って xxxx.as から変換する

  • このあとの 3. あたりを参照
  • Sprite とか MovieClip とかを含むコードは asc.jar ではビルドできないはず

既存の SWF から abc を取り出す

(追記)Mac OS X 版と Flash 10 対応版も登場

Mac OS X 版
Mac OS Xで(も)tamarinのabcdump.asからabcdump.exeを作る:nod::ぶろぐ:RIA::Flex/AIR/Flash
Flash 10 対応版 (Windows 用)
Adobe AlchemyはFlashの隠し命令を使っているみたい - yukobaの日記

.


以下、abcdump.exe の作り方。

1. Tamarin のソースコードを入手する

  1. Mercurial をインストールしていない場合は hg.exe を導入する (ダウンロード元:BinaryPackages - Mercurial)
  2. hg を実行してソースを拾ってくる。
    $ hg clone http://hg.mozilla.org/tamarin-central tamarin-central
  3. 落ちてくるまでしばし待つ

(参考) Tamarin Build Documentation - MDC

2. asc.jar を入手する

Flex SDK の lib フォルダに入ってる。

全部持ってくるのが面倒な人は、SVN 上の http://opensource.adobe.com/svn/opensource/flex/sdk/branches/3.2.0/lib/ からダウンロードするといいと思う。

3. abcdump.as から abcdump.abc を作る

  1. tamarin-central/core/builtin.as を abc に変換する
    java -jar asc.jar core\builtin.as
  2. tamarin-central/shell/ByteArray.as を abc に変換する
    java -jar asc.jar -import core\builtin.abc shell\ByteArray.as
  3. tamarin-central/utils/abcdump.as を abc に変換する
    java -jar asc.jar -import core\builtin.abc -import shell\ByteArray.abc utils\abcdump.as

java の実行に失敗する場合は java のバージョンが古いのかも。最新の JRE をダウンロードしておくべし。

(参考) 5 1/2 blog ≫ AS3 decompiler

4. avmplus で実行

abcdump.abc を実行するには avmplus.exe が必要。avmplus.exe は tamarin のソースを Visual C++ でビルドしたら作れるのだけど、Flex SDK のソースに付いてくるので今回はこれを使う。

avmplus abcdump.abc -- xxxx.abc

5. avmplus と結合して abcdump.exe を作る

avmplus がないと動かないのが面倒なので、avmplus と結合して abcdump.exe を作っちゃう。

java -jar asc.jar -exe avmplus.exe -import core\builtin.abc -import shell\ByteArray.abc utils\abcdump.as

これで abcdump.exe ができた。