一个例子:解说swf文件的Header Tag DefineBitsJPEG2 DoAction DefineSound

 

用一个能用16位查看东西的软件,打开swf。我使用的是ultraedit-32,习惯了。哈哈

你就能看到一组16进制的数据。

46  57  53  08  c4  f1  5e  00  80  00  02  51  c0  00  01  96  40 

00  00  1e  01  00 44  11  00  00  00 43  02  ff  ff   ff| 7f   05

7a  c8  15  00  01  00  ff d8| 3f  03 69  00  00  00 ‎88  36  00

07  00  7a  6d  74  78  74  31  00  e5  bc  80  e5  8f  a3  e6  9e

a3  00  7a  6d  74  78  74  32  00  e5  a4  a9  e5  a4  a9  e5  ad

a6  e4  b9  a0  00  74  78  74  31  00  74  65  78  74  00  74  78

74  31  00‎ 96  04  00  08  00  08  01‏ 3c ‎96 04  00  08  02  08

03‎ 3c‎ 96  02  00  08  04‎ 1c ‎96  04  00  08  05  08  00‎ 1c‎ 4f

96  02  00  08  06‎ 1c ‎96  04  00  08  05  08  02 ‎1c‎ 4f‎ 07 ‎00

00 44  0b  26  00  00  00 bf  03  b8  e0  00  00  01  00  26  40

Dc  04  00  00 ‎00

是不是很晕。不要晕了。慢慢看。

你看,前3个,不是 46 57 53 就是 43 57 53 ,代表的是FWSCWSfws是未使用ZLIB压缩的,cws是使用了的,有为什么区别,一个容量小了,一个不变啊。不过,这样就说明,一个要转换,一个不用。ps:压缩功能是从flash6开始有的,之前都没有。

 

打字真累,先休息,等下继续。

----------继续---------

后面有一个数字 08 或者是其他的数字,就是flash 的版本,8就是flash86就是flash6。恩恩

明白了吧。

现在,我们就明白了前4组数字的意思了。

 

开始,后四个数字呢,代表了swf的字节数,要注意呢。他是倒序的。

 

比如: c4 f1 5e 00

实际的字节就是 00 5e f1 c4 .转成10进制(你可以用科学计算器转)就是6222276字节。恩恩,对对,就是那么大。

 

好了吧。明白了?

下一个,说说swf文件的尺寸。

现在已经解析了前面8个数组了,从第九个数组开始,我这个是

80 00 02 51 c0 00 01 96 40 00 .......

 

开始跟着我分析

8010000000 16进制转2进制)

取前面5位(不要问我为什么,我也不知道。)

10000162进制转10进制)

 

我们在重新算一下需要的数组数,4×1656969/8=8.625==9

这样,9个数组就好了。

80 00 02 51 c0 00 01 96 40这个就够了。

ok,明白了,它是以16位来区分的,意思就是,它每16个数字一组,来确定其尺寸。

80 00 02 51 c0 00 01 96 40.......2进制就是

 

10000000 00000000 00000010 01010001 11000000 00000000 00000001 10010110

 

重新划块。

 

10000    0000000000000000    0100101000111000    0000000000000000    0011001011001000    000

 

第一块是定义数位

第二块是xmin0

第三块是xmax010010100011100019000,然后除以20(这个是别人定的,我也不好说什么),950出来了。哈哈,可见xmax950

这样一算,widthxmaxxmin950

 

如此类推,第四块是ymin0,第五块是ymax650。所以,height650

 

第六块放弃,丢掉。

 

这样,swf的尺寸就出来了,950×650

 

明白了吧?

 

到现在为止,我们处理了多少个数组了?17,哈哈,好有效啊。

下面,开始处理下面2个数组

 

下面2个数组是 代表了帧频。我的是00 1e,一换算,就是30。恩恩。很好。

 

接下去2个数组是 代表了帧数。我的是01 00 ,这个也要倒序来算,所以,就是1,正确。

 

好了,下一个数组开始,就不是文件头了。开始真正的解析swf了。

 

请在详细看看最上面的文章,好好理解一下什么是tag,还有tag的类型。

 

接下来就来讲解这个tag了。

 

恩,我们之前已经读到44 11 00 00 00。。。了。

开始分析

由于是字节,要高低位之分,低位在前,高位在后。。(什么是高低位,我这么知道。我就知道这样做而已。)

看这个 44 1111 44 0001000101000100 4420,哈哈。但是由于要判断他的类型,得2进制的东西向右移6位,就是作去掉后六位的意思。这样,实际上就是000100010169 看到了,它的tag类型是69,下面我会介绍类型分别代表什么意思的。

 

后面去掉的那六位,0001004,不是63,就是二进制的时候不是111111,所以,是短tag,这个就是字节数。

所有,第一个tag包含的东西有(短tag类型:2+length[6bit位决定]

44 11 00 00 00 00 

 

现在来说明一下,tag类型69是代表了什么。

FileAttributes----不是很明白这个是什么,字面意思是文件属性,而且,后面的属性均为0,不清楚。。

 

43 02 ff ff ff ...看明白吗?

不用明白,解析出来后就知道了。

43 0202 4300000010 01000011

分开解读,0000001001 000011 分别是 tag类型9,字节数为3。恩

意思就是,他的类型是SetBackgroundColor,就是控制背景颜色的了。后面3个字节就是它的属性。

所以,ff ff ff 就是他的背景颜色,可见,是255 255 255的白色。

 

继续研究。研究到 7f 05 7a c8 15 00

开始研究文件头

7f 05 =05 7f =0000010101111111

分开 0000010101 111111

tag类型000001010121,为DefineBitsJPEG2,哈哈,找到图片了。

长度11111163,终于出现了,长字节型的,以接下去4个字节为它的大小。(长Tag类型 2+4+length[4个字节(bytes)决定]

7a c8 15 0000 15 c8 7a1427578

图片大小出来了。。

 

怎么多了2个字节?

奇怪了。。

对比一下,图片的文件头是 ff d8

而这个却是01 00 ff d8,可见,虽然不知道前面2个字节是干什么的,但是,去掉。哈哈。

这样就出来了。

 

图片就这样被我导出来了。。

 

今天我们不来讲到处音乐。

来讲查看代码,就是查看as了。

 

这个就是包含几普通语句的代码。当然,为了容易解释,我都是用未压缩的swf

 

开始解析。

 

46 57 53 08 没有问题,fws形式的flash8版本的swf

 

24 01 00 00 00 00 01 24292 字节。

 

80 00 02 51 c0 00 01 96 40 代表了他的尺寸,950×650,不懂的看前面。

 

00 1e 30/

 

01 0000 011

 

44 11 00 00 00 00 FileAttributes 不明白

 

43 02 ff ff ff =背景颜色是 白色

 

3f 0303 3f 00000011 00111111 0000001100 111111 tag 类型 12 ,长字节,算后面四个

 

69 00 00 0000 00 00 69105 个字节就是这tag类型12 的东西。

 

tag类型12 DoAction,就是语句了。。

 

DoAction结构:

Field              Type                        Comment

Header          RECORDHEADER Tag              type = 12

Actions        ACTIONRECORD [zero or more]  List of actions to perform(seefollowingtable,ActionRecord)

ActionEndFlag      UI8 = 0                  Always set to 0

 

看后面的东西,叫做ACTIONRECORD,可以为0 也可以很多(说明书这样写的)。。

 

ACTIONRECORD结构:

Field               Type                          Comment

ActionCode          code = UI8         An action code (see following)

Length           If code >= 0x80 UI16   The number of bytes (after this) inthe ACTIONRECORD.

 

后面是 88 36 。。。

 

查到0x88ActionConstantPool,动作常数池?算了,不翻译了。。就是这个。

 

先看看ActionConstantPool结构:

Field                  Type               Comment

ActionConstantPool      UI8               Action = 0x88

Count                   UI16              Number of constants to follow

ConstantPool         STRING[Count]        String constants

 

后面是 36 00 00 36 54个字节,是这个池子里面的东西。。

开始看池子里面的东西了。

 

再看看STRING结构:

Field         Type                   Comment

String       UI8[zero or more]       Non-null string character data

StringEnd     UI8                    Marks end of string; always zero

                                    结束标记,碰到0x00就结束)

继续,

 

07 00 7a 6d 74 78 74 31 00 e5 bc 80 e5 8f a3 e6 9e a3 00

 

开始读取

07 (注释:响铃) (此处有疑问,应该像后面的一样把??)

00 =分隔符(StringEnd字段)

7a 6d 74 78 74 31 zmtxt1 (对照ASCII对照表看)

00 =分隔符

e5 bc 80 e5 8f a3 e6 9e a3=开口枣 (这个怎么来的?这个。。。这个。。。啊,看,飞碟。。胡编,总之这里就是一个字符串类型的数据)

接着

00

7a 6d 74 78 74 32 zmtxt2

00

e5 a4 a9 e5 a4 a9 e5 ad a6 e4 b9 a0=天天向上

00

74 78 74 31 txt1

00

74 65 78 74 = text

00

74 78 74 31 = txt2

00

 

好,刚好54个字节。

后面就不在是这个池子里面的东西了。

 

96 这个由于还在105 字节内,所以,还是action,看看他的类型是什么。

ActionPush,汗一个,是动作推。。。。不要翻译了,就是放置了。

04 这个是。。。。

晕了。。

先看看ActionPush结构:

Field                 Type               Comment

ActionPush           ACTIONRECORD      The ActionCode in ACTIONRECORDis0x96.The Length in ACTIONRECORD represents the total number of type and value bytes in this ActionPush.

 

                                       [ACTIONRECORD 中的 Length 还反应着ActionPush 的长度。]

 

Type                  UI8              0 = string literal

1 = floating-point literal

 

The following types are available in SWF 5 andlater:

2 = null

3 = undefined

4 = register

5 = Boolean

6 = double

7 = integer

8 = constant 8

9 = constant 16

String          If Type = 0, STRING     Null-terminated character string

Float           If Type = 1, FLOAT    32-bit IEEE single-precision little-endian floating point

value

RegisterNumber  If Type = 4, UI8      Register number

Boolean         If Type = 5, UI8      Boolean value

Double          If Type = 6,DOUBLE    64-bit IEEE double-precision little-endian doublevalue

Integer         If Type = 7, UI32     32-bit little-endian integer

Constant8       If Type = 8,  UI8      Constant pool index (for indexes < 256) (see ActionConstantPool)

Constant16      If Type = 9, UI16     Constant pool index (for indexes >= 256) (see ActionConstantPool)

 

96 就是push ,就是var的意思了

 

04 00= 4 ACTIONRECORD 中的 Length,指明了ActionPush 的长度

即下面的(08 00 08 01

08 Constant8是后面的索引index的意思

 

00 就是指池子里面的第1个常量,就是说是 zmtxt1,

 

08 索引池子(同上)

 

01 2个常量 开口枣

 

3c  ActionDefineLocal,看解释是说,一个常量被定义之后的信息.

 

这样看来,就是这样解释

 

push zmtxt1 开口枣

 

直接弄成flash语句就是:

var zmtxt1="开口枣"

 

同理

96 就是push ,就是var的意思了

 

04 00= 4 ACTIONRECORD 中的 Length,指明了ActionPush 的长度

即下面的(08 02 08 03

08 Constant8是后面的索引index的意思

 

02 就是指池子里面的第3个常量,就是说是 zmtxt2,

 

08 索引池子(同上)

 

03 4个常量 天天向上

 

3c ActionDefineLocal,看解释是说,一个常量被定义之后的信息.

 

这样看来,就是这样解释

 

push zmtxt2 天天向上

 

直接弄成flash语句就是:

 

var zmtxt2="天天向上"

 

后面呢

 

96

02 00 = 2 ACTIONRECORD 中的 Length,指明了ActionPush 的长度

 

08 04, 就是指池子里面的第5个常量,就是说是txt1

 

1c ActionGetVariable,获取参数,就是说txt1的参数是获取的,

 

就是说,

txt1=

 

就这样,没有後文了,继续解读

 

96 push

04 00 = 4熟悉的影子

08 05 =text

08 00 = zmtxt1

 

1c 获取参数

4f ActionSetMember,就是把这个参数设置到 member就是说设置到场景里面.

 

这样,回忆flashas,可得

就是说,

txt1.text=zmtxt1

 

 

后面同理

96

02 00 = 2 ACTIONRECORD 中的 Length,指明了ActionPush 的长度

 

08 06, 就是指池子里面的第7个常量,就是说是txt2

 

1c ActionGetVariable,获取参数,就是说txt2的参数是获取的,

 

就是说,

txt2=

 

就这样,没有後文了,继续解读

 

96 push

04 00 = 4熟悉的影子

08 05 =text

08 02= zmtxt2

 

1c 获取参数

4f ActionSetMember,就是把这个参数设置到 member就是说设置到场景里面.

 

这样,回忆flashas,可得

就是说, 解读出

txt2.text=zmtxt2

 

 

07 00....

后面的东西下次在说..

今天真的累了..

想想...

07 ActionStop,就是stop()

...

 

就是这样了..

 

计算一下,加上后面的00分隔符,就是105个字节

,语句解析完毕

 

整个语句就是

 

var zmtxt1="开口枣"

var zmtxt2="天天向上"

txt1.text=zmtxt1

txt2.text=zmtxt2

stop()

哈哈,简单吧...

强吧...

真的就是这样哦..

hoho

 

今天就来解析所谓的音乐了...

 

这个...

mp3为例,如果是wav,好像到flash里面也是mp3.

不管了,

一齐来看看就知道了.

 

46 57 53 08 没有问题,fws形式的flash8版本的swf

 

24 01 00 00 00 00 01 24292 字节。

 

80 00 02 51 c0 00 01 96 40 代表了他的尺寸,950×650,不懂的看前面。

 

00 1e 30/

 

01 0000 011

 

44 11 00 00 00 00 FileAttributes 不明白

 

43 02 ff ff ff =背景颜色是 白色

 

ok,接着

 

44 0b 26 00 00 00

 

44 0b =0b 44==0000101101000100=0000101101 000100,tag类型 45,长度 4,

tag 类型45 SoundStreamHead2,恩恩音乐的.

 

-----------------休息---------------

 

4,就是后面4个直接就是属性

看看SoundStreamHead2的结构:

 

26 00=0010011000000000= 0010 01    1    0        0000    00    0    0

分别代表了.Reserved=0010=3,好像没有什么用

PlaybackSoundRate=01=1,就是11hz....

PlaybackSoundSize=1=1就是 16bit....

PlaybackSoundType=0=0,就是mono

 

StreamSoundCompression=0000=0,uncompressed,未压缩.

StreamSoundRate=00 ,5.5hz...

StreamSoundSize=0,8bit

StreamSoundType=0 ,mono

 

00 00 代表了StreamSoundSampleCount

 

这些..全部不懂得是为什么...不解释了..

 

bf 03=03 bf=0000001110111111=0000001110 111111 ,tag类型是14,长字节,后面4个字节是大小.

 

tag 14,Define Sound,这个就是声音了.

 

b8 e0 00 00=00 00 e0 b8=57528 音乐有57528字节大小.

恩恩

看看Define Sound的结构:

 

01 00 =00 01 =1,是这个声音的id

 

26=00011010=0001 10 1 0,    0001=1,代表这个声音的类型是ADPCM,    10=3,代表了这个声音的频率是44hz,    1=1,代表了16bit, 0=0,代表了声音是mono

 

40 dc 04 00 ,这四个嘛...SoundSampleCount,Number of samples. Not affected by mono/stereo setting; for stereo sounds this is the number of sample pairs.

 

不是很明白..

 

但是不影响..

继续

 

00 这个是SoundData,The sound data; varies by format.

也是不明白,...

 

后面那个00,肯定就是休止符了...

 

然后后面57528-9=57519字节就是声音数据了...

就是这样,声音就这样导出来了..

 

恩恩...

 

 

疑问还是狠多,但是,还是成功了嘛....

 

好了

 

今天就到这里..

其实,说了那么多了。。

基本都应该入门了。

 

 

我就不讲那么多了。。

现在,把这本英文版的 swf说明说给你们。自己开始研究吧。

我也该收手了。

 

现在来讲一下,为什么在这个板块说这个。

主要就是,zcom的模板就是通过直接修改swf来实现的。现在,大家都明白了吧。我就不说什么了

 

本文由豫新论坛提供http://bbs.yuxinnet.cn 如果你觉得好,请推广给您的朋友,谢谢您的支持!

 

转载于:https://www.cnblogs.com/qdlgx/archive/2008/09/03/1282534.html

swf文件结构解析 第1节swf文件的整体结构是 header + body的组成。文件的开始是一个[文件头]它的结构如下:字节      名称            说明1          Signature     “F”表示非加密格式,“C”表示加密格式1          Signature     “W”无特殊意义1          Signature     “S”无特殊意义1          Ve 阅读详情

相关推荐

KLayout教程(二)编辑不同的形状

首先画一个基础的矩形,然后双击他可以定义他的坐标

集成光电子 1万+

swf文件格式解析入门(tag解析)

上文把文件头解析完成了,接下来就是解析标签 swf文件把所有的资源都打包在标签内部 如字体,位图,嵌入的2进制,代码等等 tag有两种类型,1种为短tag,1种为长tagtag的长度是小于63个字节的 短标签格式 RECORDHEADER (short) Field               Type    Comment TagCodeAndLength    UI

yoshikun的专栏 6728

FakeNewsGPT4:通过知识增强的大规模视觉语言模型推进多模态假新闻检测

当前,多模态假新闻的大量涌现导致了显著的分布差异,这一现状亟需我们开发具备广泛适用性的检测器。然而,现有假新闻检测器因特定领域内的训练方式,难以有效获取开放世界中的事实信息。这种训练的封闭性限制了传统检测器的能力,特别是在面对跨域假新闻时,其表现往往不尽如人意。具体而言,开放世界中的假新闻在两个方面具有显著的分布差异:一方面,其操纵内容多种多样,新闻的任一部分都可能受到创意策略的操控;另一方面,真实背景复杂多变,不同地区的新闻背景和主题焦点存在显著差异。

qq_52053775的博客 792

swf文件格式解析(二)

上一篇教程可能写的有点乱 ,本回合开始之前先做一个概述吧,引用官方白皮书的原文 概述 SWF 文件是由一个文件头,和跟在后面的一系列的标签组成。标签有定义型标签和控 制型标签两类。定义型标签把对象定义为角色存储在字典里,控制型标签操作这些角色并控 制影片的流程。 如下图 上回合已经解析完文件头 本会合接着解析Tag 首先,官方理论知识补充 定义型标签和控制型标...

weixin_30648963的博客 224

解析swf文件的音频数据并生成mp3

#pragma once#include #include #pragma comment(lib,"Shlwapi.lib")#include #include typedef unsigned char  UI8;typedef unsigned short UI16;typedef unsigned char UB;typedef unsigned int  UI32;typedef

SmartWan的专栏 2664

swf 头标签tag

<br />从swfdec工程COPY出来的,对解析swf文件有帮助.<br /><br />static struct tag_func_struct tag_funcs[] = {<br />  [SWFDEC_TAG_END] = {"End", tag_func_end, SWFDEC_TAG_DEFINE_SPRITE },<br />  [SWFDEC_TAG_SHOWFRAME] = {"ShowFrame", tag_func_show_frame, SWFDEC_TAG_DEFINE_S

thinkvd dvd and video converter 1281

swf文件格式解析入门(文件头解析)

swf文件格式解析入门(文件头解析)2010-12-02 10:49<br />这里是使用as3语言来对swf文件做解析,其它语言可以参考。<br />一,准备工作<br />从Adobe官网下载一份swf文件格式说明文档<br />http://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf_file_format_spec_v10.pdf<br />avm2虚拟机说明文档<br />http://www.adobe.com/content/da

singandsong的专栏 1901

swf文件解析(二) 文件分解及Tag获取

Extensibilit The format is a tagged format, so it can be evolved with new features while maintaining backward compatibility with earlier versions of Flash Player. ///////////////////////////////////

工作ing 2693

swf文件解析(一) 文件header部分解析

SWF(shock wave flash)是ADOBE公司的动画设计软件Flash的专用格式。

工作ing 4386

swf文件格式说明书(中文+英文)

SWF文件头  字段                类型                     备注 标识                8位                   标识字节:                                           F代表未压缩                                       

yjh0628的专栏 1050

常见图像文件格式详解

 电脑每一张靓丽的墙纸图片都可以表达个人的情调和风格;当我们设计网页时,往往也少不了图片的装饰。那么平常我们接触的图像到底有哪些呢?常见的图像文件格式又有哪些呢?  一、BMP格式  BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所

黑色幽灵的专栏 2098

swf 解析

引用:http://blog.sina.com.cn/s/blog_6859df370100wtk4.html 概述 SWF 文件是由一个文件头,和跟在后面的一系列的标签组成。标签有定义型标签和控 制型标签两类。定义型标签把对象定义为角色存储在字典里,控制型标签操作这些角色并控 制影片的流程。 如下图 上回合已经解析完文件头 本会合接着解析Tag 首先,官方理论知识补充 定义型...

weixin_33859231的博客 423

swf tag 学习笔记

Swf 6 版本tag功能表            Control Tags

dingding1984的专栏 1038

swfheader 0.10 Released

    swfheader一个处理swf文件的工具脚本,可用于读取swf文件头信息、压缩和解压缩swf文件。很早以前发布过一个0.01版。最近复审了代 码,发现了一个愚蠢的读二进制文件错误导致没办法正确的解压或者压缩swf文件。今天更正了此bug,重构了部分代码并做了更多测试,已经可以正常使用。 项目地址: http://code.google.com/p/swf-util/ 项目描述:  ...

庄周梦蝶 170

SWF9文件格式规范中文翻译(一)

http://hi.baidu.com/zoujun1314/blog/item/42f09bfa01c8509c58ee907a.html   前言:      最近很想用AIR开发一个游戏里自动生成SWF素材包的工具,所以需要了解清楚SWF文件的格式和结构。网上找了一下只有官方的英文文档,找不到比较完善一点的中文资料。所以索性自己翻译了一份,放出来跟大家一起分享。目前只翻译了Introdu...

AS3 376

Now in Android:安卓官方架构学习

这篇文件介绍了Now in Android项目。这是一个严格遵循安卓推荐架构,用Kotlin和Jetpack Compose构建的Android应用。

Meteors.的博客 88

Android Jetpack Compose 与 Kotlin 协程:内存泄漏的根源、排查与完全解决方案

Compose 和协程的组合极大地提升了开发效率和代码可读性,但它们对开发者的生命周期感知能力提出了更高的要求。内存泄漏不再是单纯的内存问题,而是结构化并发设计是否严谨的体现。遵循“谁创建,谁清理”的铁律,利用 Compose 提供的副作用 API 明确划分职责边界,配合 LeakCanary 等工具的实时监控,你将能构建出既流畅又稳健的高性能应用。未来的 Android 开发,不仅需要“写得出”,更需要“关得掉”。

天空之城 256

腾讯AnswerBit(GEO优化监测平台)技术拆解:UI自动化如何采集真实AI回答

腾讯企点营销云2026年8月推出AnswerBit,定位AI搜索品牌可见度分析平台,覆盖豆包、元宝、DeepSeek、Kimi、千问五大大模型,累计分析AI回答500万+条。本文从工程视角拆解其采集方式(UI自动化模拟真人)、指标设计(提及率/引用信源/表述质量/竞品对照)与能力边界(监测≠优化),供技术读者参考。

RoseMarketing的博客 286

STM32F407+Bootloader+U盘升级

关于STM32平台U盘升级的实现方法,网上说法比较多也比较乱,也很难找到能落地,可行性高的方案,本文基于STM32F407 MCU,实现U盘升级固件,亲测有效。(详细编写说明见主页文章)

上一篇: 一个例子:说明swf文件的Header,Tag,Shape,Placeobject2
下一篇: swf文件格式说明书(中文+英文)
a543513
博客等级 码龄12年 1粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值