第1节 在遇到SWF文件,游戏资源分析用得到

swf文件的整体结构是 header + body的组成。

文件的开始是一个[文件头]
它的结构如下:

字节 名称 说明
1 Signature “F”表示非加密格式,“C”表示加密格式
1 Signature “W”无特殊意义
1 Signature “S”无特殊意义
1 Version 版本号,它表示对应播放器版本
4 FileLength 整个文件长度,低位在前
N FrameSize RECT结构体,表示屏幕大小,具体结构和长度根据数据变化,分析方法另外讨论。
2 FrameRate 帧频,默认为12,高位在前
2 FrameCount 帧数,表明文件根下的帧数,低位在前

以上是swf中,最简单的一个tag,一个完整的swf文件是由很多独立的tag组成的。每一个tag都包括一个头和一个数据体,头有2种类型,短tag型和长tag型。

短tag型由2byte构成,前10个bit表示tag类型,后6个bit表示tag长度。

长tag型由6byte构成,前10个bit表示tag类型,后6个bit固定为全1,后4个byte代表tag长度。

tag的长度不同于文件头的长度FileLength,它是除去tag头后的长度。

(另外)只有非加密的swf文件可以直接用以上的方法解析,加密的文件需要另外增加一步处理。具体方法由于牵涉到版权问题,这里我不加说明。

这份资料可能对flash设计意义不大,但如果有人用的着,我会继续分析一下,如果有人也在做这方面的调查,欢迎和我一起讨论。

第2节

前节说明了swf文件是由1个head和1个body构成的。
并且解析了header的结构,和一个tag的header部分的简单说明。

下面余下的就是swf文件的body了。

整个文件body是由大量的tag组成的,通过分析tag的head部分,可以立刻知道这个tag的类型代码和长度。

如果你无法识别这个tag的类型,也可以利用tag的长度,直接跳过这个tag。

这种方式保证了版本的兼容性,即使出现了新的tag,老版本的播放器还是能够解析完整个swf文件而不出现错误,大不了就是不能提供新的功能而已。

以下就是swf文件结构的一个形象概念。

(文件header)(文件body)
|
(tag 1)(tag 2)(tag 3)(……)
|
(tag header)(tag body)
|
(tag 类型代码)(tag 长度)

这样大家是否对swf文件的结构有了一个基本的认识?

下一节我会分析一下几个swf必有的tag,包括 backgroundColor tag,showFrame tag和end tag

第3节
setBackgroundColor tag

这个tag是直接跟在文件head后面的第一个tag,是文件中必然存在的。
它的结构如下:

长度(bit) 名称 说明
16 header tag头,短tag型 类型码为9
24 BackgroundColor RGB类型,右3个字节,分别表示红、绿、蓝

showFrame tag

这是文件最后第2个tag,它是必然存在的。
结构如下:

长度(bit) 名称 说明
16 header tag头,短tag型 类型码为1

end tag

结束tag,它的作用不用我说了,必然是文件的最后一个tag。

长度(bit) 名称 说明
16 header tag头,短tag型 类型码为0

下一节我将讲的是character ID 和Depth的意义和textField的基本tag组成。
(另外)感谢AOL的补充和解释。

第4节
一个textField就是一个文本框,文本框有3种,静态的,动态的,和输入型。作为tag的话,它只有2种,静态的和动态的,输入型不过是动态的一种特别形式。

这里讨论动态文本框的组成。
它由3个tag组成,2个定义tag和一个控制tag
分别是:
定义tag DefineFont2 DefineEditText (针对player 7.0 如有不同情况请检查播放器版本)
控制tag PlaceObject2

DefineFont2 定义了一个字体信息, DefineEditText引用了定义的字体,并定义了显示的文字信息,而PlaceObject引用了定义的文字信息,并控制了文字的显示。

他们之间的引用就是依靠character ID进行的。

character ID就是一个从1开始的数字标示,如果中间出现缺漏,从缺漏开始的所有character ID都被忽略,而重复的话,后出现的将覆盖先出现的tag。

DefineFont2用一个character ID 来标示自己,DefineEditText和PlaceObject2也同样如此。但并不是所有的tag都有character ID。
另外,PlaceObject2虽然也有character ID,但它并不是用来标示自己的,而是用来调用的。

而深度Depth在3个tag中只有PlaceObject2拥有。

这3个tag的关系就是这样。这3个tag的结构我会在下节中说明。(抱歉,每次都说一点点!)

第5节

DefineFont2
这个tag的作用是定义一个字体,或者一组静态轮廓字,用以给DefineEditText使用。

关于文字的几乎所有信息,都可以在这个tag中进行设置,因此,这也是一个相当复杂的tag。
它的结构如下:

长度(bit) 名称 说明
headerLength header tag头,类型码为48
16 FontID character ID,唯一的标示
1 FontFlagsHasLayout 根据字面解释,判断是否有变型的标记
1 FontFlagsShiftJIS 是否使用ShiftJIS编码
1 FontFlagsSmallText 是否使用小字体显示
1 FontFlagsANSI 是否使用ANSI编码
1 FontFlagsWideOffsets 是否使用32位偏移量
1 FontFlagsWideCodes 是否使用16位文字编码
1 FontFlagsItalic 文字是否是斜体
1 FontFlagsBold 文字是否是粗体
8 LanguageCode 语言编码,有相应的编码表对应
8 FontNameLen 文件名长度
FontNameLen8 FontName 文件名称(使用utf8编码)
16 NumGlyphs 轮廓字个数
32/16 OffsetTable 根据FontFlagsWideOffsets,为32位,否则为16位
32/16 CodeTableOffset 同上
不定
NumGlyphs GlyphShapeTable 轮廓字信息,为shape结构(又是一个复杂结构)
16/8 CodeTable 根据FontFlagsWideCodes,为16位。编码表,为固定值UCS-2
16/0 FontAscent 根据FontFlagsHasLayout,为16位,否则没有该字段
16/0 FontDescent 根据FontFlagsHasLayout,为16位,否则没有该字段
16/0 FontLeading 根据FontFlagsHasLayout,为16位,否则没有该字段
16/0NumGlyphs FontAdvanceTable 根据FontFlagsHasLayout,为16位,否则没有该字段
RECT
NumGlyphs FontBoundsTable 根据FontFlagsHasLayout,为16位,否则没有该字段
16/0 KerningCount 根据FontFlagsHasLayout,为16位,否则没有该字段
KERNINGRECORD*KerningCount
FontKerningTable 根据FontFlagsHasLayout,为16位,否则没有该字段

SWF游戏软件逆向基础知识1相关推荐

  1. 《软件需求分析(第二版)》第 1 章——软件需求基础知识 重点部分总结

    文章目录 前言 一.单选题 二.填空题 三.判断题 四.简答题 总结 前言 软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素.需求分析是软件定义 ...

  2. 软考软件设计师基础知识—法律法规知识

    软考软件设计师基础知识-法律法规知识 视频的地址: https://open.163.com/newview/movie/free?pid=GETVIB0OT&mid=JETVSHAMA 保护 ...

  3. 游戏开发unity基础知识系列:(一)unity 2019 下载与安装

    游戏开发unity基础知识系列:(一)unity 2019 下载与安装 声明:未经作者允许,严禁商用,转载请标明出处和来源,谢谢 零.前言 本人在unity2d方面使用较多,关于unity的使用后面预 ...

  4. [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. 软件技术基础知识复习

    一.引言 随着找工作的不断深入,发现在算计技术基础这块基本上是空白,看来还是得看书复习一下. 软件技术基础一般包括数据结构.操作系统.软件工程方法.数据库和计算机网络.而这其中的每一部分知识点,都可以 ...

  6. 计算机网络的软件技术基础知识,[计算机软件技术基础知识要点.doc

    [计算机软件技术基础知识要点 <计算机软件技术基础>知识要点 ww心整理 收到的记得粉我哦~~~ 信息与计算机 信息是经过加工的数据. 数据是现实世界客观存在的实体或事物的属性值,即指人们 ...

  7. 软考-软件设计师 - 第11章 标准化和软件知识产权基础知识【附补充常考知识点】

    11.1 标准化基础知识 11.1.1 基本概念 1.标准分类: 1)根据适用范围分类: (1)国际标准 (2)国家标准 (3)区域标准 (4)行业标准 (5)企业标准 (6)项目规范 2)根据标准的 ...

  8. 计算机硬件和软件的基础知识,计算机软件和硬件基础知识

    计算机软件使人们能够在日常活动中完成所需的工作.对计算机软件的更复杂定义是:软件是使计算机能够执行特定任务的程序,与系统的物理组件相反.系统的物理组件是我在上一篇文章中讨论的内容,即人们可以物理触摸的 ...

  9. 如何掌握zbrush软件的基础知识

    大家好!我是up主:基础建模 我整理了一些知识,希望能帮助的大家 一.基本简介 ZBrush软件是一个数字雕刻和绘画软件 它以强大的功能和直观的工作流程彻底改变了整个三维行业. 在一个简洁的界面中,Z ...

  10. 萌新小白学习必备,3D游戏建模入门基础知识!你都知道吗?

    游戏建模是指游戏内的场景.角色和道具按照比例制作设计成的物体,是设计师为游戏打造的场景动画建筑模型. 3d游戏建模常用软件: maya.3dmax.zbrush.bodypaint. 1.maya:主 ...

最新文章

  1. 如何把2d目标检测的bbox转化到现实世界坐标系的?
  2. Visual Studio中的Build和Rebuild区别
  3. 开发一个爆款 VS Code 插件这么简单!
  4. android源代码
  5. Google Map二次开发——API方式
  6. 后台给前台传值 php,前后台传值的几种方式(html,js,php)
  7. spring新注解说明
  8. redis 下载源地址
  9. jtopo 实现一键布局
  10. isp邮件服务器是什么,与ISP企业邮箱共建邮件服务器
  11. 会议安排问题C++贪心算法
  12. 使用Fiddler抓取HTTPS的包(Edge、Google)
  13. android原生TTS+语音引擎 实现纯离线 免费的中英TTS
  14. Codeforces 1089K King Kog's Reception(线段树)
  15. Spring理论--Spring MVC学习
  16. USB鼠标、键盘数据格式
  17. 【老九学堂】【C++】数组与指针
  18. 北欧蓝rgb_北欧游戏果酱回顾
  19. 【转】互联网盈利模式分析
  20. 学习bootstra前端框架2

热门文章

  1. (c语言详解)06-图3 六度空间 (30分)(详细解释)
  2. Unity之Touch触摸屏单指、多指触碰
  3. 银行卡收单之网络传输加密
  4. Dockerfile概念简介
  5. 从微软中国下载Windows系统并安装
  6. 兰州大学计算机专业保研率,兰州部分高校保研率排名,“兰州大学”保研率竟出乎人意料!...
  7. 关于文件你必须了解的一些基本概念
  8. python 基础学习(小甲鱼)
  9. **Unity环境光遮蔽(Ambient Occlusion)Shader实现逻辑**
  10. vs code 国内镜像源