首页
社区
课程
招聘
[原创]swf文件的反编译入门
2004-8-3 17:26 39759

[原创]swf文件的反编译入门

2004-8-3 17:26
39759
/*------------------------------------------------------
作者: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 到临时文件.
Execute Flasm macros embedded in SWF.
Make trivial optimizations automatically:
remove double nots, replace 0.0 with 0, rebuild constant pools, clear register arguments.
Create .$wf backup, update the original SWF. 

It's a good idea to update the final version of SWF with flasm -u. Don't expect the SWF to be noticeably faster, it will just make it a bit smaller. 

-x foo.swf
Decompress foo.swf, create .$wf backup. 

-z foo.swf

大概翻译一下(后面的看不懂)
呵呵我们可以看到有2个flasm command我们需要
-d反编译
-a编译一下
呵呵,开工!!!!!!!!!!!!!!
运行cmd找到flasm所在的文件夹flasm -d 07.swf > 07.flm(或者flasm 07.swf)
看一下flash所在的目录生成了一个07.flm的文件
然后用UltraEdit打开--替换“FV_AllowFromHDD_bool = FALSE”为“FV_AllowFromHDD_bool = TRUE”
保存!
就绪flasm -a 07.swf
07.flm successfully assembled to 07.swf, 2829511 bytes
呵呵,运行一下,ok了~~~
===========================================================================
其实这篇文章非常简单,各位高手不要笑偶~~~~
呵呵,但是对于混乱器的东东,我就不知道怎么弄了
希望各位高手指点~~~~这里向您请教,希望哪位高手能指点一二
(声明:本人只是用来研究,并无其它商业目的)
                                                           WiNrOOt[FCG]
                                                          17:21 2004-8-3
                                                  e-mail:     [email]winroot@gmail.com[/email]
                                                    blog:    http://blog.csdn.net/winroot

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞7
打赏
分享
最新回复 (43)
雪    币: 279
活跃值: (375)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
lordor 6 2004-8-3 17:45
2
0
Good!

有空也连接一下我的那个blog
http://blog.csdn.net/lordor
现在有空可以更新一下内容了
雪    币: 2093
活跃值: (1635)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
学习 2004-8-3 19:15
3
0
学习!谢!
雪    币: 2093
活跃值: (1635)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
学习 2004-8-3 19:22
4
0
有swf格式详细的讲解?
想破swf很容易,用闪客之锤直接可以修改swf的!
雪    币: 255
活跃值: (266)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
WiNrOOt 5 2004-8-3 19:46
5
0
最初由 学习 发布
有swf格式详细的讲解?
想破swf很容易,用闪客之锤直接可以修改swf的!

不会把闪客之锤能修改?
是Sothink SWF Quicker吧
你有最新版吗?
雪    币: 896
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 85 2004-8-3 19:53
6
0
学习  :D
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sonic530 2004-8-3 20:19
7
0
学习,还没见过这个呢,呵呵
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
nbw 24 2004-8-3 23:11
8
0
没太看明白
高手.以后多指点
雪    币: 338
活跃值: (1688)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
sungy 1 2004-8-3 23:34
9
0
要用到的先看看在眼里
雪    币: 2093
活跃值: (1635)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
学习 2004-8-4 08:39
10
0
最初由 WiNrOOt 发布

不会把闪客之锤能修改?
是Sothink SWF Quicker吧
你有最新版吗?


“闪客之锤”就是“Sothink SWF Quicker”只不过前者是中文版,后者是英文版。网上最新版是1.5
雪    币: 425
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鸡蛋壳 2004-8-4 09:28
11
0
交给我,我直接把它做成FLA格式。随便改。
雪    币: 255
活跃值: (266)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
WiNrOOt 5 2004-8-4 09:30
12
0
最初由 鸡蛋壳 发布
交给我,我直接把它做成FLA格式。随便改。

:D 你能教教我吗?
或指点一下
雪    币: 255
活跃值: (266)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
WiNrOOt 5 2004-8-4 09:30
13
0
最初由 学习 发布


“闪客之锤”就是“Sothink SWF Quicker”只不过前者是中文版,后者是英文版。网上最新版是1.5

:D 你有注册版吗?
雪    币: 2093
活跃值: (1635)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
学习 2004-8-4 10:25
14
0
最初由 WiNrOOt 发布

:D 你有注册版吗?


只有英文破解注册版,网上多的是。
低版本的swf可以用imperator软件直接转换成fla就可以任意修改了。

你有swf格式的全中文说明???
雪    币: 255
活跃值: (266)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
WiNrOOt 5 2004-8-4 12:03
15
0
最初由 学习 发布


只有英文破解注册版,网上多的是。
低版本的swf可以用imperator软件直接转换成fla就可以任意修改了。


你有swf格式的全中文说明???

1.5的注册版你有吗?
swf我只有英文版的
中文的就是你发的
雪    币: 2093
活跃值: (1635)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
学习 2004-8-4 12:28
16
0
最初由 WiNrOOt 发布

1.5的注册版你有吗?
swf我只有英文版的
中文的就是你发的


网上的1.5英文破解注册版多的是。http://www.blueren.net/SoftView/SoftView_8859.html
我发的swf格式中文不够详细。
雪    币: 115
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Aluco 2004-8-7 14:59
17
0
高,认真学习。
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
heici 2004-11-27 18:49
18
0
闪客之锤最新版(中文)哪有下?
最好是注册版
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
riijj 7 2004-11-27 19:16
19
0
学习 !
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xuanqing 2004-11-27 20:49
20
0
如果只是玩FLASH游戏不爽的话
Decompile看一下
然后UE自己改一下就OK了
前两天就改了两个玩
要是改的多就要用工具了
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一刀一刀 2005-1-6 13:37
21
0
1.5的汉化版
http://www.86dl.com/soft/data/25945.html
雪    币: 328
活跃值: (925)
能力值: ( LV9,RANK:1010 )
在线值:
发帖
回帖
粉丝
liyangsj 25 2005-1-7 08:49
22
0
学习
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一刀一刀 2005-1-10 09:19
23
0
http://www.chinadforce.com/viewthread.php?tid=101480&fpage=1&highlight=swf
这里有一个更猛的软件,直接生成.fla

SWF Decompiler MX 2005 是一款用于浏览和解析Flash动画(.swf文件和.exe文件)的工具。最新版本有着强大的功能,可以将swf文件导出成FLA文件。它还能够将flash动画中的图片、矢量图、声音、视频(*.flv)、文字、按钮、影片片段、帧等基本元素完全分解,最重要的是可以对动作的脚本(Action Script)进行解析,清楚的显示其动作的代码,让对Flash动画的构造一目了然。最新版本能更好的支持Flash MX和动作脚本2.0。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
楚乖 2005-8-11 13:47
24
0


   请问各位,我用闪客之锤转了一个SWF到FLA,但是出来的FLA在FLASH里面看不到祯动作,上面显示都是灰色的,图库里面可以看到有提取的素材,我转了几个只要2个有这样的问题,被的都是好的!!

                   帮忙!!
  
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
shoooo 16 2005-8-11 13:53
25
0
既然被楼上顶上来了,那偶就再学习一下
游客
登录 | 注册 方可回帖
返回