zoukankan      html  css  js  c++  java
  • 二进制解析swf

    转自:http://www.cppblog.com/sleepwom/archive/2008/12/17/69652.html


    首先得到swf的file_format_specification_v9.pdf,这个需要接受adobe公司的协议才可以看具体的google一下吧。
    基础工具二进制查看工具,自己随便找个方便的吧,呵呵。

    下面进入正题
    未压缩swf十六进制原文如下:
    46 57 53 09 4F 00 00 00 78 00 05 5F 00 00 0F A0
    00 00 0C 01 00 44 11 08 00 00 00 43 02 FF FF FF
    BF 00 23 00 00 00 01 00 70 FB 49 97 0D 0C 7D 50
    00 01 14 00 00 00 00 01 25 C9 92 0D 21 ED 48 87
    65 30 3B 6D E1 D8 B4 00 00 86 06 06 01 00 01 00
    00 40 00 00 00

    现在一点点的看
    46 57 53 09 //FWS未压缩的swf9版本
    文件头以三个字节的
    0×46、0×57和0×53(FWS)或者0×43、0×57和0×53(CWS)开头。FWS表示swf文件没有被压缩,CWS表示swf文件从开始的8个字节之后都用开源的ZLIB压缩过。关于ZLIB在1950-1952年的Request for Comments(RFCs)中有介绍,swf6之后才使用的。第四个字节是版本信息,版本信息不实ascii码,而是8bit的数字。比如swf4就是0×04,而不是ascii 中的”4″(0×35).
    4F 00 00 00 //文件未压缩时的大小79字节,
    压缩后的swf,此值不变
    78 00 05 5F 00 00 0F A0 00
    //9位定义Rectangle长宽,也就是舞台宽高
    //0111 1000 0000 0000 0000 0101 0101 1111 0000 0000
    //0000 0000 0000 1111 1010 0000 0000 0000
    //前5位 01111 ==>15 Nbits表示以后每次读15位
    //000 0000 0000 0000 ==> 0 = Xmin
    //0101 0101 1111 000 ==> 11000 = Xmax
    //0 0000 0000 0000 00==> 0 = Ymin
    //00 1111 1010 0000 0==> 8000 = Ymax
    00 0C //0x000C ==> 0x0C00 ==> 0x0C (忽略后面) = 12 FrameRate
    01 00 //0x0001 ==> 0000 0000 01 = 1 FrameCount
    44 11 08 00 00 00 //flash8 or later FileAttributes
    //metaInfo
    43 02 FF FF FF //0x0243 ==> 0000 0010 01 = 9 SetBackgroundColor && 000011 = 3 背景颜色RGB

    舞台中的元件暂不分析,大家自己研究吧,说来话长阿.... file_format_specification_v9.pdf这个有298页,呵呵

    最后
    40 00 //0x4000 ==>> 0x0040 ==>> 0000 0000 0100 0000 //Tag type = 1 = ShowFrame //length = 0
    00 00 //0x0000 0x0000 0000 0000 0000 0000
    //Tag type = 0 = end
    //length = 0

    FrameSize定义了swf文件显示的宽高,该信息存储在一个矩形结构中,就是说它的字节数可能会根据需要表示的坐标范围发生变化。FrameSize矩形包含Xmin和Ymin,两个参数的值都是0,还包含Xmax和Ymax,定义了舞台的尺寸。

    FrameRate就是帧率了,实际上当flash运行了一个比较龊的cpu上的时候帧率是得不到保证的。

    FrameCount表示swf文件的总帧数。

  • 相关阅读:
    作业:ATM
    软件开发目录规范
    re模块
    logging模块
    ConfigParser模块&hashlib模块&subprocess模块
    json模块&pickle模块&shelve模块&xml模块
    时间模块time&datetime
    vue里面render详细写法
    node.js创建服务
    vue退出功能的实现
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/1723178.html
Copyright © 2011-2022 走看看