> makibishi throw|

JPEXS FF Decでswfファイルのドメイン判定を外す

自作フラッシュのコンパイル環境が再現出来なくなってしまったので、代わりに Flash のでデコンパイラ「JPEXS FF Dec」を使って swf ファイルの編集を行ったという話です。

背景

Flash のサポートが 2020 年末で終了するので自作のフラッシュをローカル環境で動くようにし、再配布しようとしていました。ただ、一つ問題があり、そのフラッシュには下記のようなコードが含まれていたのです。

public function Preloader() {
  super();
  var info:LoaderInfo = root.loaderInfo;
  if(info.url.toString() != "http://〜〜")
  {
    className = "UNK";
  }else{
    className = "Main";
  }
}

これは swf が他のページで勝手に公開されることを防ぐためのコードで、Preloader でフラッシュの動作している url をチェックし、想定していないものであれば間違ったメインクラスを呼び出すというものです。

配布のためにはこの判定を取り除いた状態で再度コンパイルしないといけないのですが、相当昔に作ったフラッシュの flex sdk ビルド環境を整えるのに相当骨が折れそうだったので、直接 swf ファイルを編集することで判定を取り除くことにしました。

手順

  1. まずはjpexs-decompilerをダウンロードしてきます。Mac 版が動作しなかったので、ZIP (Windows, Linux, Mac OS)を選びます。
  2. Requirementsによると java 8 で動かす必要があるので、java 8をインストールします。Mac を使っているので、この記事を参考に一時的に java13→java8 に切り替えました。
  3. ./ffdec.shで JPEXS FF Dec を起動し、編集する swf ファイルを開きます。Windows っぽい GUI ですね。

ffdec

  1. ファイルツリーの scripts から、コード修正したいクラスを選びます。左に actionScript のコード、右に p-code が表示されています。p-code は Action Script 仮想マシン、AVM2 向けのバイトコードです。actionScript を編集する機能は experimental で、さらに flex sdk などが必要ですが、p-code の編集はそのまま行うことが出来ます。

ffdec

  1. p-code の書き換えたい箇所を見つけました。条件に関わらず Main クラスを使いたいので、「Edit P-Code」からそのように書き換えます。

ffdec

ffdec

  1. これで、ローカルで動作しなかった swf が動くようになりました!