/*------------------------------------------------------
作者: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: winroot@gmail.com
                                                                                             blog: http://blog.csdn.net/winroot

swf文件的反编译入门相关推荐

  1. Java的class文件批量反编译成Java文件

    Java的class文件批量反编译成java文件 Class文件是java文件编译后产生的一个文件,class文件便于在软件上运行,但是我们无法阅读中间的程序,所以我们需要将class文件转换成jav ...

  2. jar包、class文件批量反编译并解压

    jar包.class文件批量反编译并解压 该脚本可以在一个java工程目录下自动搜寻jar包.class文件,并在同级目录下创建一个新的文件夹来保存反编译和解压结果. 使用反编译插件为fernflow ...

  3. 安卓反编译入门(二)

    很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的 ...

  4. 游走Android系列之APK文件的反编译、修改和重新编译打包

    Android apk反编译.重新编译和签名 将apk文件解压后有两部分文件需要处理,一种是xml文件,另一种一个dex文件(.dex),我们可以从.dex文件中得到.class,再将.class处理 ...

  5. 【apk破解尝试之旅】-——apk文件的反编译与回编译

    前段时间玩了个手游,中途碰到一个副本迟迟无法攻破,又不没钱氪金,想着弄个破解版的,搜了半天没找到,于是决定自己动手干! 首先要对apk有个初步的了解,..apk文件是一种压缩文件,网上有种说法:apk ...

  6. Apk文件破解反编译(转)

    首先我们了解下什么是apk APK是AndroidPackage的缩写,即Android安装包(apk).APK是类似Symbian Sis或Sisx的文件格式.通过将APK文件直接传到Android ...

  7. 【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )

    文章目录 一. 购买加固服务 二. 设置资源加固 三. 设置 SO 文件保护配置 四. 设置 SO 防盗用文件配置 五. 反编译验证加固效果 本博客用于记录下 360 加固保 加固应用流程 ; ( 上 ...

  8. 如何修改apk文件,反编译(转)

    APK文件的解包打包和修改 相信每位玩机的人对APK文件都不陌生.你可能每天都与APK文件打交道,无论是安装和卸载有用的应用工具.插件.好玩的游戏等等...你可曾知道这些每天都伴随着你的APK文件是什 ...

  9. java的class文件批量反编译成java

    近来刚做完项目闲来无事就研究起了反编译,之前做一个orc识别vin码功能在度娘出来的全是那几家公司在做广告,后在在公司数据破解的同事帮助下弄了个apk过来.反编译看看是怎么实现的,后面反编译出来看到是 ...

  10. java的class文件批量反编译

    在上一篇文章中,已经将jad加入到了%JAVA_HOME%/bin中,也配置了环境变量,接下来就可以在命令行中使用. 例如:将需要反编译的多个文件放在指定路径下.为了方便操作,我将文件放在C盘根目录下 ...

最新文章

  1. Google I/O 2019上提及的Javascript新特性
  2. 下列哪个可以选中矩形文字块_AI制作字母块文字效果
  3. tcp 的ack, seq
  4. 前端也要会的数据结构 (不定期更新篇)
  5. yml的mybatis的sql查看
  6. 论文浅尝 | 使用循环神经网络的联合事件抽取
  7. 解决 IntelliJ IDEA 读取不了 datasource.properties
  8. 链接时出现LNK2001错误的解决方法
  9. 错误-trustAnchors参数必须为非空
  10. Javascript版-显示相应图片的详细信息
  11. C语言中多维数组的内存分配和释放(malloc与free)(转)
  12. c#oracle数组超出,急问:System.IndexOutOfRangeException: 索引超出了数组界限解决方案
  13. OCX控件注册及无法注册的原因总结
  14. 关于极限编程简单介绍
  15. CentOS7安装无线网卡驱动和更新yum源
  16. CCF CSP 202104-1
  17. python123 测验6:组合数据类型
  18. 快手Java开发二面面经分享
  19. 二维数组--二维数组的遍历
  20. 怎么做表情包微信gif?好用的制作方法介绍

热门文章

  1. linux系统配置设置网络端口映射,Linux 配置端口映射
  2. 测试经典用例练习之水杯测试用例
  3. ROBOCOPY命令
  4. mybatis简明教程
  5. LINUX系统使用锐捷客户端认证校园网(华中科技大学)
  6. SoapUI 使用教程链接
  7. 苹果发信用卡——大数据解读硅谷巨头如何发力金融科技
  8. python调用java完整教程
  9. Visio 2016专业版 激活方式
  10. python2线程池_python 线程池调用类方法不执行?