swf文件的反编译入门
/*------------------------------------------------------
作者:WiNrOOt[FCG]
使用工具:flasm http://www.nowrap.de/flasm.html
UltraEdit
Sothink SWF Decompiler
目的:让带有服务器校验的swf能在本地播放(主要目的还是希望各位高手有所指点)
目标:**工硕数学辅导swf文件
--------------------------------------------------------*/
大家好!我是WiNrOOt,菜鸟一个。
各位大虾见笑了,小弟在这里说一下关于如何使带有服务器校验的swf能在本地播放的问题。
对于各位高手来说很简单,但是对于我这个外行人来说还是花了一点时间的。
==========================================================================
最近我需要一些教学资料,就上网找发现xdf的flash不错,非常喜欢!呵呵就在bt上下了一些
发现资料不全,就萌生了破解之意!于是就对flash破解产生了兴趣,但是对flash一窍不通就从头学起。
正好一位朋友的**工硕数学辅导swf文件(不是xdf)在本地不能播放,于是我们就开始了.......
1.swf文件结构(转贴一点)
先看一下官方的swf文件格式说明在看就明白了
http://www.half-serious.com/swf/format/
******************************转贴部分*************************************************
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 帧数,表明文件根下的帧数,低位在前
每一个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文件是由1个head和1个body构成的。
下面余下的就是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 长度)
******************************转贴部分*************************************************
补充一点
tag分为两种Definition Tags 和Control Tags
Control tag又被分为: Display List tags Control tags 和Action tags
个人理解:Definition Tags就是存放所有的资源
Control tag就是存放控制代码
通过以上了解我们知道,关于校验的信息一定存放在Action中
开始干活...........
用Sothink SWF Decompiler反编译
看看Action--------〉MainMovie
哇哈哈哈哈你才我们看见什么了(菜鸟的表现)
代码:--------------------------------------------------------------------------------// Action script...
// [onClipEvent of sprite 1 in frame 1]
//Component construct()
{
FV_AcceptedURLs_array = [];
FV_AcceptedURLs_array[0] = "www.****.cn";
FV_AcceptedURLs_array[1] = "www.****.net";
FV_AcceptedURLs_array[2] = "www.******.com.cn";
FV_AcceptedURLs_array[3] = "www.******.net.cn";
FV_AcceptedURLs_array[4] = "www.******.cn";
FV_AcceptedURLs_array[5] = "www.******.net";
FV_AcceptedURLs_array[6] = "www.******.com";
FV_AcceptedURLs_array[7] = "www.******.com";
FV_AcceptedURLs_array[8] = "www.******.net.cn";
FV_ExactURL_bool = false;
FV_AllowFromHDD_bool = false;
FV_ShowWarning_bool = false;
}
// [onClipEvent of sprite 1 in frame 1044]
//Component construct()
{
FV_AcceptedURLs_array = [];
FV_AcceptedURLs_array[0] = "www.****.cn";
FV_AcceptedURLs_array[1] = "www.****.net";
FV_AcceptedURLs_array[2] = "www.******.com.cn";
FV_AcceptedURLs_array[3] = "www.******.net.cn";
FV_AcceptedURLs_array[4] = "www.******.cn";
FV_AcceptedURLs_array[5] = "www.******.net";
FV_AcceptedURLs_array[6] = "www.******.com";
FV_AcceptedURLs_array[7] = "www.******.com";
FV_AcceptedURLs_array[8] = "www.******.net.cn";
FV_ExactURL_bool = false;
FV_AllowFromHDD_bool = false;
FV_ShowWarning_bool = false;
}--------------------------------------------------------------------------------
//为了避免不必要的麻烦这里隐去网站信息
大家注意FV_AllowFromHDD_bool = false;
我是傻瓜,但我知道它定义了一个变量,让它等于false
变量名是什么?AllowFromHDD允许从硬盘播放?
呵呵,我很懒的~~~~大家都知道
所以我们就只要修改FV_AllowFromHDD_bool = true就能看了(猜想)
可是怎么才能修改呢?Sothink SWF Decompiler是不能修改的(也许我没找到^_^)
我们请出今天的主角:flasm http://www.nowrap.de/flasm.html
先来看一下帮助
代码:--------------------------------------------------------------------------------
flasm command filename
command
-d 反编译 SWF文件到控制台(cmd)
-a 编译Flasm project
-u 更新SWF, replace Flasm macros(看不懂)
-z 压缩SWF with zLib
-x 解压缩 SWF
-d foo.swf
Disassemble foo.swf to the console.
-d foo.swf > foo.flm
反编译foo.swf保存到foo.flm. 最简单的方法 flasm foo.swf 创建 foo.flm 到相同的文件夹.
-a foo.flm
编译 foo.flm and 更新 在SWF 文件中的定义。
创建备份 .$wf .
-u foo.swf
反编译foo.swf 到
上一篇: 隆市长欢迎你
下一篇: 从学者的角度分析谁适合学习编程语言
推荐阅读