您现在的位置: 骇客基地 >> 黑客文章 >> 黑客攻防 >> 黑客编程 >> 正文

swf文件的反编译入门
骇客基地 阅读: 时间:2007-6-1 7:32:19 来源:www.hookbase.com
  
/*------------------------------------------------------ 
作者: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 = 

[1] [2] 下一页

今天广告
参与评论:
注意事项:
【swf文件的反编译入门】文章由骇客基地网上搜集,其立场行为并不代表本站。
如果您发现该文章若无意中侵犯到您的权利,请联系我们!
未经本站明确许可,任何网站不得非法盗链及抄袭本站资源;如引用页面,请注明来自本站,谢谢您的支持!
最近更新
最新推荐
     
 
黑客首页 | 服务指南 | 软件发布  | 关于我们 | 本站声明  | 隐私声明 | 诚征英才 | 网站地图 | 友情链接 |
 
 
中国·黑客·骇客·基地 请使用IE6.0版本, 分辩率1024×768进行浏览 www.hookbase.com 站长:利客 Email:hookbase@163.com
Copyright © 2004-2009 All Rights Reserved. 粤ICP备05000985号