狠狠撸

狠狠撸Share a Scribd company logo
笔贬笔での厂奥贵编集とその応用

   2011年4月23日(土)
   “よや” yoya@awm.jp
自己紹介
? 六本木で携帯サイト作ってます。

? PHPer & バイナリエンジニアです。
 – http://d.hatena.ne.jp/yoya/


? 一日中 SWF を眺めて暮らしてます。

? Flash オーサリングツールは使えません。(キリっ
宣伝
? こんなの作って公開してます。

 – http://sourceforge.jp/projects/swfed/
 – http://openpear.org/package/IO_SWF
   (SWF を改造するライブラリ)

 – https://github.com/yoya/phpopengl
   (PHP4 対応版の PHP5 への移植 + α)

 残念ながら、全部 PHP 用のライブラリです。
はじめに
? 前半は、「SWF って何?」「それ知って何か嬉
  しいの?」といった方がターゲットです。




? 後半は、SWF編集の実例をしめします。
SWF について
? Flash の実行ファイル




? ネットワークからダウンロードして実行するので、
  画像や音声等のコンテンツも SWF の中に一塊に
  なる事が多い。
     http://awm.jp/~yoya/php/swfed/index.php?i
d=7795756057059e4f 分解結果
携帯Flash の世界
? PCデスクトップ環境に比べて
 – 貧弱なリソース。CPU もメモリも。
 – 貧弱なディスプレイ。横240x
 – 貧弱なネットワーク。
 – Flash Lite 1.x の仕様がアレ ☆
注) 最新端末ではかなり改善されてますが、
   古めの端末も対応したい。
Flash Lite 1.xの仕様がアレな感じ
? SWF のサイズは 100KB まで (通信込みで)
? 動的に画像を取って入れ替えとか面倒。(それ以
  前に、ユーザは loading とか待ってくれない)
? 起動後にアプリが勝手に通信出来ない。ボタン
  を押す等のイベントをトリガーにしないとダメ
? そもそも、パラメータ(argc 的な奴)を渡せない。

   何も出来ないじゃん。。。。
例えば、携帯Flashでやりたい事
? Flash ゲームを作りたい (キャラクタや敵キャラ
  の組み合わせで大量に SWF 作る?)
? 地図ソフトとか (地区ブロック毎に SWF 用意
  する?位置パラメータ渡せないんだけど)
? 待ち受け Flashとか (任意の画像を含めたい
  ので、そもそも無理)
バッドノウハウ盛況
? (仕方ないので) SWF バイナリを弄っちゃえ
                               サーバ
            HTTP request
                           PHP,    SWFの元
                           etc..    データ


                               ここで最低限必
                               要な画像に絞っ
? Flash Lite なら処理するデータの        てSWFに入れたり、
                               パラメータを埋め
  種類は少ないし、最大 100KB なので            たりする
  ストリームみたいな事せず力づくで OK
SWF編集イメージ


ABC    ?            PHP
                class object

            ?      ABC

XYZ    ?

                          XYZ
PHP で SWF を編集
? ming (編集でなく、一から生成する)
? swfmill (swf ? xml 変換。テキストで編集)
? swftools (swf 対して操作。高機能。SWF 合成も簡単。
  おしむらくは PHP binding が無い事か)

   以上の話しは、普通すぎるのでしません。

? バイナリを直接弄りたくなるよね?
  – まずバイナリエディタで弄る
  – 手動が面倒になったら PHP とかで弄る
  – ライブラリ整備として整備していく > SWFEditor, IO_SWF
SWF の参考資料
? 仕様書
 – http://www.adobe.com/devnet/swf.html 公式
 – http://www.m2osw.com/swf_alexref.html
 – http://hkpr.info/flash/swf/ 日本語
? 解説
 – http://codeazur.com.br/fitc/HackingSWF.pdf
 – http://doruby.kbmj.com/hal_on_rails/20100411/S
   WF
 – http://labs.gree.jp/blog/2011/01/2353/ 図解
SWF の参考コード
? swftools (C言語)
  – http://www.swftools.org/
? IO_SWF (PHP)
  – http://openpear.org/package/IO_SWF

  どちらも抽象化も何もないベタな 素直な
  実装なのでサンプルとして読みやすい。

  (ming 読もうとしたけど、よく分からなかったデス)
SWF dump (hexdump)
? SWF dump 色々。(よりどりみどり)
? hexdump -C
SWF dump (swftools)
? swftools
SWF dump (swfmill)
? swfmill
で、
? こういうの見ると。。
自分で作りたくなりますよね?
? よね?よね?
SWF Dumpツールの作り方
? 仕様書を読みとく。


 – http://labs.gree.jp/blog/2010/08/631/
    ↑ この記事を読むと多分、分かります。


 図を引用して基本構造だけ解説。
SWF Header 構造
SWF

  Header       Tag     Tag        Tag



Header

Signature   Version   FileLength         FrameSize   FrameRate   FrameCount


 3 bytes    1 byte      4 bytes                        2 bytes     2 bytes

            FrameSize (RECT)
              NBits   Xmin        Xmax     Ymin      Ymax

              5Bits   NBits    NBits       NBits     NBits
SWF tag 構造 (short 形式)
  SWF

    Header        Tag        Tag         Tag



        Tag
          Tag &
                   Content
         Length

                                   TagCode       Length
  Tag & Length                      10 bits      6 bits
    1byte    1 byte             1 byte         1byte



                        Byte Swap
SWF tag 構造 (long 形式)
         Tag
              Tag &
                          Content
             Length



  Tag & Length
    1byte       1 byte              Length

    Byte Swap
                                    4 bytes
    1 byte      1byte

    10 bits      6 bits
    TagCode       111111=0x3f
細かい事は
? ↓この辺、参考にしてください。



? http://labs.gree.jp/blog/2011/01/2353/



? 画像関连の解説がそこそこあります。
作ってみた (php で dump)
? https://github.com/yoya/misc/blob/master/p
  hp/swf/BitIO.php
? https://github.com/yoya/misc/blob/master/p
  hp/swf/YSwf.php
作ってみた (ruby で dump)
? https://github.com/yoya/misc/blob/master/ru
  by/SWF/Header.rb
? https://github.com/yoya/misc/blob/master/ru
  by/SWF/Tag/Factory.rb
作ってみた (perl で dump)
? https://github.com/yoya/misc/blob/master/p
  erl/SWF.pm
更に本気で作ってみた (PHP で)
? http://openpear.org/package/IO_SWF




? 16進と並べて表示 (デバッグに便利)
? Tag の中身も少し解析 → 次ページ
DefineMorphShape も対応
と言う訳で
? 仕様書に抵抗を感じる方も、以上の
  PHP/Ruby/Perl サンプルがとっかかりになれ
  ば幸いです。

? この勉強会場に、そんな軟弱な言語を使う
  ユーザはいない気もしますが。。。
ここから応用編
? 実際に、SWF を書き換えた話。

? LL 言語でのバイナリ書き換えは、CPU やメモ
  リが勿体ないので、アクセスの多いサービス
  では、C 言語で実装して binding してます。

? http://sourceforge.jp/projects/swfed/
画像表示に関连するタグ
            SWF

              Header         Tag     Tag       Tag

Tag (DefineBitsJPEG2)
                             JPEG Data               画像データ
  Tag=3 | Length

Tag (DefineShape)
                                                     画像貼り付け
  Tag=3 | Length        RECT + STYLE + SHAPE         パターン指定

Tag (PlaceObject)
  Tag=26 | Length          MATRIX , etc…              表示場所


Tag (ShowFrame)
                                                     画面表示指示
  Tag=1 | Length
画像入れ替えデモ
? ↓Ust ごめんなさい。権利的にアレなので


? http://diary.awm.jp/~yoya/?20080514#2008051
  41 (実験記録)
? http://awm.jp/~yoya/php/swfed/index.php?id=2
  c9763264074a8f0 (画像dump)


? ↑ Ust まずいのはココまで。(失礼しました)
画像サイズ調整
 Tag (DefineShape)
   Tag=3 | Length     RECT + STYLE + SHAPE   RECT: 枠サイズ

                                             TYPE: 貼り付けパターン
 FILLSTYLE (BITMAP)
                                             MATRIX: 表示スケール
      TYPE=4X           RefID + MATRIX




? http://diary.awm.jp/~yoya/?20101027#20101
  0270
ムービークリップ関连タグ
               Tag (DefineShape)

               Tag (PlaceObject2)
               Tag (ShowFrame)       Tag (PlaceObject2)
                                     Tag (ShowFrame)
               Tag (RemoveObject2)

               Tag (PlaceObject2)    Tag (RemoveObject2)

メイン (root) の   Tag (ShowFrame)       Tag (PlaceObject2)
  TimeLine
                                     Tag (ShowFrame)
               Tag (DefineSprite)

                                              ムービークリップ の
                                                TimeLine
               Tag (PlaceObject2)
ムービークリップ入れ替えデモ
? http://diary.awm.jp/~yoya/?20110319#20110
  3190
ベクター画像のデフォルメ

? http://labs.gree.jp/blog/2011/04/2328/




? サイズ削減 40KB => 35KB
実際の所
? ming も swfmill も swftools もできない事ある
  し、Lite とか考えてない所あるし、不具合もあ
  るので、SWF バイナリが分らないと結局、どこ
  かで壁にぶつかる。
? ので、知ってる人が開発チームに独りはいる
  といいかも。
? でも、HTML5 が流行りそうなので、Flash Lite
  はもったとしてあと一年かな。。。という刹那
  的な技術。(。。と、個人的には思ってる)
质问タイム
ご清聴、ありがとうございました。

More Related Content

What's hot (13)

PDF
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
?
PDF
マイクロサーヒ?ス时代の动画配信基搁耻产测×驳辞=∞
DMM.com
?
PDF
Play_using_Proxy
Kunio Miyamoto, Ph.D.
?
PDF
笔贬笔+惭测厂蚕尝を使ったスケーラブルなソーシャルゲーム开発
infinite_loop
?
PDF
サーハ?ー未経験者か?ソーシャルケ?ームを通して知ったサーハ?ーの事
Manabu Koga
?
PDF
职场て?使用している翱厂厂の开発に参加してみた!
infinite_loop
?
PDF
贬罢惭尝からの本文抽出
Lintaro Ina
?
PDF
大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~
infinite_loop
?
PPTX
ケ?ームエンシ?ニアのためのテ?ータヘ?ース设计
sairoutine
?
PPTX
笔贬笔基础勉强会
Yuji Otani
?
PDF
摆鲍贰4闭マテリアルの注意すべきこと!~テクスチャロードと厂飞颈迟肠丑~
com044
?
PPTX
【颁贰顿贰颁2014】アセットパイプラインを构筑する上で重要な事~映像业界?ゲーム业界双方の视点から见た本质的なパイプライン
RYUTARO OSAFUNE
?
PDF
まめフラスコで游ぼう
libpanda
?
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
?
マイクロサーヒ?ス时代の动画配信基搁耻产测×驳辞=∞
DMM.com
?
Play_using_Proxy
Kunio Miyamoto, Ph.D.
?
笔贬笔+惭测厂蚕尝を使ったスケーラブルなソーシャルゲーム开発
infinite_loop
?
サーハ?ー未経験者か?ソーシャルケ?ームを通して知ったサーハ?ーの事
Manabu Koga
?
职场て?使用している翱厂厂の开発に参加してみた!
infinite_loop
?
贬罢惭尝からの本文抽出
Lintaro Ina
?
大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~
infinite_loop
?
ケ?ームエンシ?ニアのためのテ?ータヘ?ース设计
sairoutine
?
笔贬笔基础勉强会
Yuji Otani
?
摆鲍贰4闭マテリアルの注意すべきこと!~テクスチャロードと厂飞颈迟肠丑~
com044
?
【颁贰顿贰颁2014】アセットパイプラインを构筑する上で重要な事~映像业界?ゲーム业界双方の视点から见た本质的なパイプライン
RYUTARO OSAFUNE
?
まめフラスコで游ぼう
libpanda
?

Viewers also liked (16)

KEY
Flash Is Dead, Long Live Flash!
Rye Corradini
?
PPT
Handlersocket 20110517
akirahiguchi
?
PPTX
PHP AV BINDING
Yo Ya
?
PPTX
GoImagickThumbnail
Yo Ya
?
PPTX
Imagemagickknowhow
Yo Ya
?
PPTX
PHP でバイナリ変換プログラミング
Yo Ya
?
PPTX
php5-gd で画像を弄る話
Yo Ya
?
PDF
退职笔顿贵メーカーの作り方
Yo Ya
?
PPTX
wildimagebinary
Yo Ya
?
PPTX
TwitterImgUpload
Yo Ya
?
PPTX
コンヒ?ュータ画像うんちく
Yo Ya
?
PPTX
chokaizomae
Yo Ya
?
PPTX
How to read SWF
Yo Ya
?
PDF
锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境
Yo Ya
?
PPTX
goimagick-syokai-II
Yo Ya
?
PPTX
go-thumber-imagick
Yo Ya
?
Flash Is Dead, Long Live Flash!
Rye Corradini
?
Handlersocket 20110517
akirahiguchi
?
PHP AV BINDING
Yo Ya
?
GoImagickThumbnail
Yo Ya
?
Imagemagickknowhow
Yo Ya
?
PHP でバイナリ変換プログラミング
Yo Ya
?
php5-gd で画像を弄る話
Yo Ya
?
退职笔顿贵メーカーの作り方
Yo Ya
?
wildimagebinary
Yo Ya
?
TwitterImgUpload
Yo Ya
?
コンヒ?ュータ画像うんちく
Yo Ya
?
chokaizomae
Yo Ya
?
How to read SWF
Yo Ya
?
锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境
Yo Ya
?
goimagick-syokai-II
Yo Ya
?
go-thumber-imagick
Yo Ya
?
Ad

Similar to 笔贬笔での厂奥贵编集とその応用 (20)

PDF
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
?
PDF
ミニマムswfエンジン for iOS
flare phoenix
?
PDF
动画共有ツール
tamtam180
?
PPT
Web上でのゲーム製作(Kanasan.JS LT 080114)
hoge1e3
?
KEY
Swf研究会 アクションスクリプト実行処理系
Kohei Morino
?
PPT
Flash Builder4 と FlashCatalyst を使ってみた
guest0ba46c3
?
PDF
贵濒补蝉丑を肠辞肠辞蝉2诲虫で再生
AimingStudy
?
PDF
Flash Lite
smallworkshop
?
PPT
GIF89a Oldtype
takesako
?
PPT
20110224 flamixer
Inada Naoki
?
PPTX
インタラクティブコンテンツにおける贬罢惭尝5と贵濒补蝉丑
Yasunobu Ikeda
?
PDF
Flashup 8
Katsushi Suzuki
?
PPTX
贵-蝉颈迟别発表资料「贵濒补蝉丑ユーザーが今覚えておきたい贬罢惭尝5」
Yasunobu Ikeda
?
PDF
openFrameworks Workshop in Kanazawa v001
Teruaki Tsubokura
?
PDF
How to make a Flash based Wii Ware
Tamotsu Machida
?
PDF
ExGame さくっと入門
Soshi Kido
?
PDF
20100416 devlove(flex) final
dsdseg
?
PPTX
SWF LOVE (ASを使わないFlash勉強会)
ken39arg
?
PDF
Flashup 9
Katsushi Suzuki
?
PDF
齿狈础とはなにか?齿狈础うれしいところ、うれしくないところ
IGDA Japan
?
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
?
ミニマムswfエンジン for iOS
flare phoenix
?
动画共有ツール
tamtam180
?
Web上でのゲーム製作(Kanasan.JS LT 080114)
hoge1e3
?
Swf研究会 アクションスクリプト実行処理系
Kohei Morino
?
Flash Builder4 と FlashCatalyst を使ってみた
guest0ba46c3
?
贵濒补蝉丑を肠辞肠辞蝉2诲虫で再生
AimingStudy
?
Flash Lite
smallworkshop
?
GIF89a Oldtype
takesako
?
20110224 flamixer
Inada Naoki
?
インタラクティブコンテンツにおける贬罢惭尝5と贵濒补蝉丑
Yasunobu Ikeda
?
Flashup 8
Katsushi Suzuki
?
贵-蝉颈迟别発表资料「贵濒补蝉丑ユーザーが今覚えておきたい贬罢惭尝5」
Yasunobu Ikeda
?
openFrameworks Workshop in Kanazawa v001
Teruaki Tsubokura
?
How to make a Flash based Wii Ware
Tamotsu Machida
?
ExGame さくっと入門
Soshi Kido
?
20100416 devlove(flex) final
dsdseg
?
SWF LOVE (ASを使わないFlash勉強会)
ken39arg
?
Flashup 9
Katsushi Suzuki
?
齿狈础とはなにか?齿狈础うれしいところ、うれしくないところ
IGDA Japan
?
Ad

Recently uploaded (9)

PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
?
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
PPTX
色について.pptx .
iPride Co., Ltd.
?
PPTX
勉強会_ターミナルコマント?入力迅速化_20250620. pptx. .
iPride Co., Ltd.
?
PPTX
Vibe Codingを始めよう ?Cursorを例に、ノーコードでのプログラミング体験?
iPride Co., Ltd.
?
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
?
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
色について.pptx .
iPride Co., Ltd.
?
勉強会_ターミナルコマント?入力迅速化_20250620. pptx. .
iPride Co., Ltd.
?
Vibe Codingを始めよう ?Cursorを例に、ノーコードでのプログラミング体験?
iPride Co., Ltd.
?

笔贬笔での厂奥贵编集とその応用