Home2009年04月 ≫ [メモ]swf内の画像置換

2009 04/ 2 (木) 11:09

アナログな方法だけど、実験でとりあえず動いたので自分用メモ。

クライアント鯖にswfmillやming系のモジュール等が入れられない、
厳しい環境で、phpで無理矢理swf内画像を入れ替える方法。

1.予めswf作成前に置換ターゲット先となるJPEGを任意のファイルサイズにしとく。
 例えば2345バイトならダミーで1バイトづつ追加し3000バイトに偽装しとく。
 (追加するダミー文字は「X:バイナリでは58」とする。)
 ≫参考:4.ファイル偽装の技術 ― 1.添付型
http://www.x68uec.org/other/press/2002/lecture/gisou.html

2.次に先ほど作成したJPEG(3000バイト)を使いFlashでswfを作成する。
 これでテンプレートとなるswfが完成。

3.次に差し替え用画像も「1」と同様に3000バイト化しておく。

4.次にphp:unpackでswfをバイナリ展開。$swf_data_unpack
 差し替え用画像もunpackでバイナリ展開。$img_data_unpack

5.そしてswfのバイナリ文字列からJPEG部分を探し出し差し替え用と置換。
 例:
 $swf_data_new =
 eregi_replace(“ffd8ffe000104a464946(.*)58585858585858585858”,
 $img_data_unpack, $swf_data_unpack);
//ffd8ffe000104a464946はJPEGのheader
//58585858585858585858はダミー追加した「X」の文字

6.そして置換済みのバイナリ文字:$swf_data_newをpack化し、
 header→swfで出力したら画像が変わっている。お疲れ。

とりあれずできた。かなり無理矢理感とか危険度満載。
いろんな欠点があり柔軟性とか悪いけど、とりあえずこれで十分かな。
あとはもうちょっと安全に動くようにいろいろ改良していくさ。
この方法でいろいろサービス作れるな。ってことでおしまい。
(ここまでしてクライアントの要望に応える俺は・・・orz)

Comments

この案、
パラ●イスネットのFlashLiteのTOPページに採用。

画像の縦横サイズとか固定仕様になるが動的出力できる。別にswfmillとか使わなくてもこの方法でやれるな。手軽に更新できるし柔軟性もある。

バイナリ万歳。

by:YO (2009年12月09日 19:04)

Comment form










 

Track back

この記事のトラックバックURL:
http://www.wauke.net/cgi/mt/mt-tb.cgi/838

Search

RSS feed

Category

Archives

Recent TrackBacks

Recent Comments