- 浏览: 511176 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
michao:
大哥,还有aperture.exe吗? 发我一份,找不到呀,m ...
使用aperture框架让AS3与C++通信,执行本地代码 -
Aaron-Joe-William:
文件被删除了。下不了。
SQLite 数据库加密的一种解决方案 -
hanmiao:
樓主的文章不就是來自IBM Developers里的http: ...
mina 入门 -
howesen:
断包与粘包问题,需要处理下就好了
mina接收数据不全(2) -
sniciq:
git clone --recursive git://git ...
ESB学习笔记(Spring Integration实战)
这篇文章的标题所提出的问题的答案是“不可能”。至少对我来说是不可能的。借助适当的工具,我们可以反编译任何SWF文件。所以,不要将重要的信息置于SWF文件中。SWF文件中不要包含个人的帐号或者密码。
我将简要的论述“保护”技术的历史,和他们是如何失败的,接着我将说明我们能尽的最大努力。中国古语有云,“规则只能防君子,不能仿小人”。
公开的文件格式
在
讨论之前,我们先要知道,SWF的文件格式是公开的。公开的文件格式,意味着SWF文件并不是只能由Flash生成。其他公司也能制作可以在SWF播放器
上播放的SWF文件。公开的文件格式意味着从什么位置获取什么信息是众所周知的,也就意味着每个字节都是众所周知的。因此,如果我有时间来一个字节一个字
节的检查SWF文件,我可以了解所有的细节。
当然,对于一个2M大小的SWF文件,我没有时间来逐个字节的检查。因此,我就借助软件来完
成这个工作。如果软件遇到问题,我会暂时接管这个工作,检查发生问题的字节。修正它,然后继续。所以,没有什么东西能够掩藏的住,其限制只是我的时间和我
的耐性。如果反编译一个SWF文件的酬劳是数百美元的话,我想我会花上数年时间来逐个字节的读取它。
好了,以下是反编译和保护技术之间的战争历史。
防止被导入
伴
随着Flash的出现,Macromedia提供给开发者一个“防止导入的口令保护”功能。如果你给SWF文件加上导入口令的话,这个SWF文件就不能被
导入了(知道倒入密码除外)。SWF文件不加保护的话,其中的矢量图形可以被导入到fla文件中。这种保护没有什么用处,仅仅是假想的安全。
试
想一下,你的SWF被用户的播放器来播放的,你不可能利用用户的播放器来保护你的SWF文件。因此,它是如何来保护SWF文件的呢?很简单,这种保护存在
于你所买的Flash开发工具中。Flash开发工具不能导入有(导入)密码的SWF文件。没关系,对吧?我可以用十六进制编辑打开那个SWF文件,删除
保护密码,从而也就移除了保护功能。
如此简单,所以忘记导入保护功能吧。
转换成放映机文件并且压缩
如
果我将它转化成exe格式的放映机文件,还可以被反编译吗?答案:是的,SWF文件仍然存在其中。借助软件可以很容易的将SWF文件从exe文件中释放出
来。压缩可以使SWF文件不能被十六进制编辑器读取,压缩是一种保护措施吗?压缩算法类似于zip算法,很容易被破解。
FLASM AND THE P-CODE
在
flash5的时代,出现了两种流行的工具,免费的“Flasm”和商业的“ASV 2.0”。Flasm就是“Flash
asm”,它将SWF中的字节码解释成可理解的简短代码(p-codes)。比如“a=3”显示为"push ''a'', 3",
"setVariable";SWF中的字节码是:"96 08 00 00 61 00 07 03 00 00 00
1D"。如果想学习“SWF格式结构”的话,这是个非常有价值的工具。
程序员喜欢用高级语言(比如:C、C++)来开发软件,但是当讲求
效率的时候,他们会在其中混合使用低级的汇编语言。因此,有时候开发者会利用Flasm编写低级别的p-codes来增加效率。所以,Flasm编辑
SWF中的actionscript是强有力的。你可以参考例子,了解如何利用这种技术来优化3D代码,但是怀有恶意的用户能够“编辑”SWF文
件,SWF中的任何保护措施都可以不费力的移除。我们不需要知道密码就可以移除保护措施。
这儿有个通用、知名的技术来保护我们的影片不被
偷窃并在其它的范围内显示。我们编辑脚本来检查_url属性,如果_url不是我们(合法)的范围,就使功能失效并显示一条“You are
thief”的消息。可是,借助Flasm可以很容易删除这条脚本语句。不需要1分钟便可以破解这种保护措施。
ACTIONSCRIPT VIEWER AND "void (a)<=b>"c" || 0(!1 && !0)"
ASV(ActionScript Viewer)能够从SWF中提取出角色,例如::声音、形状和位图等都可以被窃取。
它
同样可以提取actionscript字节码,ASV 2尝试将p-codes匹配成高级别的actionscript。当遇到"push
''a'', 3",
"setVariable";时显示"a=3"这样的等同于actionscript的语言。然而我们能够创造没有任何模式来匹配的代码,从而破坏ASV
的解析。利用Flasm,可以容易的编写不同于标准模式的代码,从而使ASV不能进行匹配工作。扰乱ASV
2工作的一句有名的代码是“;”,这是一条jung代码。它不做任何事,但是能搞乱ASV 2的工作。
但是,当保护脚本众所周知时,ASV的作者(Burakk)当然不会放过它。这种保护技术对于ASV 3来说就失效了。
飞速发展的反编译工具
之后是MX时代的到来,许多反编译工具的出现,加快了Flash厄运的速度。
现
行版本的ASV
4除了显示得到匹配的actionscript代码,得不到匹配的代码以p-codes形式显示。如果解释成p-codes发生问题,将显示SWF中的字
节码。它同样能够显示代码在SWF文件中所处的偏移量,这意味着它不会失效。你不可能扰乱它的工作,因为,至少它能显示SWF文件中的“字节码”。
更甚的是,Flash MX2004提供通过JavaScript API来生成”fla”文件。那使它能够建立发布成SWF格式的fla文件。此刻,所有的东西都在那边了。
更不用说声音、形状和位图了,偷窃者不喜欢这些东西,因为它们套容易取得了。偷窃者喜欢切的actionscript,因为其中隐藏着密码,因为其中有阻止此影片正常播放的脚本代码,
如果ASV只能将脚本反编译成字节码,那么它对于大多数偷窃者是没有用处的。因此很多人进他们的最大努力来阻止ASV 4将脚本反编译成actionscript或者p-codes。实际上,对于大多数反编译者来说,脚本得不到匹配,反编译工具就无用了。
这是曾经用过的一些技术,当它们在因特网上发布并且被反编译组织揭示之后,每种技术的保护效果最终都会变得非常薄弱和气数将尽。
依据数据尺寸(句子)分块反编译
大多数之所以能够成功的迷惑或者破坏反编译器,原因在于播放器和反编译器的不同行为。播放器逐个的执行字节码,就像现实世界中的读书一样,一个单词,接着下一个单词。然而反编译器通常将字节链分成有意义的片断,犹如现实世界中的读书一样,一个句子,接着下一个句子。
反
编译器的行为如此简单的原因在于大多数的p-code都是遵循数据大小规律的。对于字节码("96 08 00 00 61 00 07 03 00
00 00
1D"),反编译器遇到代表"push"操作的0x96时会想“push什么呢”?下个字节(0x0008)指示的内容:接下去8个字节中的内容压入堆
栈,即把("00 61 00 07 03 00 00
00")压入堆栈。所以,通常反编译器依据数据大小将简短的片断切成一块一块的,这样便会解释成“push something”。因此,("96
08 00 00 61 00 07 03 00 00
00")就成为一个句子。下一个字节是下一个句子的开始,就是代表"setVariable"的0x1D。这样8个字节的"something",将被更
进一步解释成一个字符串“a”和一个数字“3”。
让我们来看一下字节码:("99 02 00 05 00
96")。0x99意味着分支(或者跳转),在哪里分支呢?接下去的是(0002),因此数据存储在机下去的两个字节中,将它在下面两个字节处截断。总
之,我们知道"99 02 00 05 00"是个句子。接下去的是0x96,代表下个句子的开始。
再看第三个例子,字节码:("88
08 00 03 00 63 00 62 00 61 00 96 07
00")。0x88代表定义常数,定义的常数内容是什么呢?后续字节(0008),表明常数内容存储在后继的8个字节中。所以,句子就是:("88
08 00 03 00 63 00 62 00 61 00")。代表下个句子开始的("96 07 00
...),意味着将7个字节的数据压入堆栈。
因此,字节码砍成单独的句子。每个句子由命令和数据组成,并且以命令打头。因此,每个句子都是一个基本的单元。理论上来说,对于这种方法没有什么错误。
使播放器从句子中间开始读数据
让我们开始讨论“是播放器从句子中间读数据”的破坏反编译器的技术。
首先,我举一个现实世界的例子:
John says good morning.
Mary says thank you.
现在生成SWF文件:
skip 9 words
Tom says John says good morning.
skip 3 words
back 7 wordsMary says thank you.
如果逐个字读的话,结果和原来一样,然而反编译器按句子来读取,自然发生错误。第一,它知道Tom说了什么,但语法不对,汇报出错;第二,它没有看到第二
个“skip”命令,因为它处于句子中间;第三,当它被迫退回7个字后,感到迷惑,认为应该从“Tom
said”开始执行整个句子;第四,这个错误使它在第二行和第三行之间陷入无限循环之中。
总之,我们增加了“Tom said”这句垃圾代码,并提供整个句子长度的错误数据大小信息。这个错误的长度覆盖了“skip”命令。
来看个真实的例子,请注意,这些技术需要操作字节码,纯actionscript不能够实现。
例1 :
向前跳转的包含无效尺寸数据的死代码。
push True
branchifTrue label2
constants ''''label2:push ''a'',3setVariable
你仔细看的话,会发现"constants ''''"这行是垃圾代码,它不可能被执行到。然而,理论上,当第二行的结果为"not True"时,它将被执行。因此,反编译器尝试对它进行反编译。
让我们来增大"0x88 - constants"后面的"sentence size",从而包括知道脚本结尾的所有字节。你知道,反编译器将把字节码砍成像这样的3个句子:
push True
branchifTrue label2
constants label2: push ''a'',3 setVariable
如
果你试图反编译此SWF文件,根据我前面提到的4个错误,一些反编译器将碰壁。仍旧有些反编译器幸存,但只是显示:"if(false){};"。ASV
3也不能显示此脚本,但是ASV 4能够显示。为了破解这个SWF,我们移除死代码"constant xxxx",
(0x88和随后两个字节),然后所有的东西都得到反编译。
这儿
是zip格式的文件,将详细解释怎样制作这样的受保护文件。
例2:
先后跳转的包含无效尺寸数据的死代码。
push ''b''
label1:
push ''a'',3
setVariable
branch label2
branch label1
label2:push
''b''是句垃圾代码,我们将修改它,用来使ASV 4碰壁。让我们来修改push ''b''的"length of
sentence"。修改"0x96"后面的2个字节的数据,使句子的长度增长到分支Label1之前。这样,反编译器将把字节码作为3个句子:
push label1: push ''a'',3 setVariable branch label2
branch label1
label2:
现
在,反编译器不知道将把什么压入堆栈,同样它将在第一个句子和第二个句子之间形成死循环。这种技术将使大部分反编译器碰壁。Flasm、ASV
4同样也无效。为了破解这个SWF,我们手工删除"push b" (0x96和后随的2个字节),这样所有的东西都可反编译了。
当这个技术流传后,burakk将修改ASV 4,使它能正确处理死循环。这样下个版本的ASV就可对付这种技术了。
这儿
是zip格式的文件,将详细解释怎样制作这样的受保护文件
发表评论
-
十个Flex/Air疑难杂症及解决方案简略
2010-05-31 17:17 3346最近去一家台企面 ... -
Windows环境下配置+运行red5源码+AS3连接red5简单示例
2010-04-19 13:39 5185Windows环境下配置+运行red5源码+AS3连接red5 ... -
使用aperture框架让AS3与C++通信,执行本地代码
2010-04-08 16:48 3260我们都知道,AIR的效果是非常出色的,这也是大家喜欢她的原因, ... -
SQLITE入门至精通
2010-04-07 11:13 3028关键 ... -
教你解析FLEX JSON中的一个问题 关于键值 和键
2010-04-01 15:25 2328字符串:message = ' "param&quo ... -
air写文件保存在安装目录
2010-03-31 15:46 3224AIR中..保存文件我们般会像下面这样操作 var f ... -
弱弱的一个小问题,bitmapdata pngencoder base64 bytearray
2010-03-31 14:16 1156好久没写东东了,呵呵。随便写点点。关于bitmapdata如何 ... -
FLASH教程:SWF间的双向通信
2010-03-02 18:23 1363假设有一个主 SWf 名为 m ... -
如何把as文件生成swf格式文件
2010-03-02 18:22 5291一,从http://opensource.adobe.com/ ... -
Flex数据交互方法 :httpservice, webservice, RemoteObject, socket
2010-02-27 17:06 1914【转载】 文章分类:Flash编程 http://h ... -
理解Flash Player 9垃圾回收机制
2010-02-02 18:27 1089理解Flash Player 9垃圾回 ... -
BlazeDS入门教程-很详细-赞原创作者一个
2010-01-11 23:51 1723什么是BlazeDS呢?BlazeDS是一个基于服务器的Ja ... -
一些漂亮的Flex主题下载
2010-01-11 10:31 6180一些漂亮的Flex主题下载1Digg meWindows Cl ... -
通过Stratus 服务器在Flash Player中使用RTMFP 开发 点对点应用(一)
2010-01-08 17:43 5402作者:Jozsef Vass 译者:巴巴鲁 ... -
ActionScript 3.0著名开源库 大集合
2009-12-29 17:26 2048这篇文章开始于对Adrian ... -
Flex 读取XML配置文件总结
2009-11-19 11:45 1990在Flex中我 ... -
一个list定义组件,网上找了很久没有,自己做了一个。
2009-10-29 11:55 1254一个list定义组件,网上找了很久没有,自己做了一个。希望对大 ... -
如何使用Flex RemoteObject components 与JAVA交互
2009-10-08 18:04 53152008-12-25 | 22:53分类:前端开发 ... -
flex 在线录制视频语音
2009-09-12 17:45 3651<?xml version="1.0" ... -
flex 蒙板 遮罩
2009-09-11 17:09 3876方法一 <mx:Image source=&q ...
相关推荐
总之,防止SWF二进制文件被反编译是Flash/Flex开发中的一项重要任务,涉及到加密、混淆、动态加载等多种技术手段,并且可能结合使用特定的工具如HN_Hex-Ed.exe。同时,理解和遵循相关的法律措施也是保护自身权益的...
swf 反编译工具
描述中提到"这提取的较完整的swf反编译的fla",FLA是Flash Authoring File的缩写,它是Adobe Animate(以前称为Flash Professional)使用的源文件格式,包含图形、动画、脚本和其他元素。反编译SWF的目标就是将这种...
本文将深入探讨如何反编译SWF文件来得到AS3代码,这涉及到一系列工具和技术。 首先,我们需要了解SWF文件的结构。SWF是Adobe Flash的二进制文件格式,用于存储包含动画、交互式内容、游戏等的Flash应用程序。这些...
总之,SWF反编译是开发者和设计师重要的辅助工具,它能帮助我们深入了解SWF文件的内部构造,实现资源复用和代码学习。选择合适的免费中文版反编译软件,并合理使用,可以有效地提高工作效率,同时要注意遵守相关的...
标题“swf反编译为as”涉及到的是Adobe Flash相关技术,主要关注如何将SWF文件转换为其ActionScript(AS)源代码。SWF是一种用于网络的多媒体文件格式,常用于展示交互式内容,如游戏、动画或者应用程序。...
这时,一款强大的反编译工具就显得至关重要,而"Flash Decompiler Trillix"就是这样的一款专业软件,专为中文用户设计,提供了便捷高效的SWF反编译功能。 Flash Decompiler Trillix的核心功能在于它能够将SWF文件...
1. **Setup.exe** - 这通常是安装程序文件,用户运行它来在自己的计算机上安装swf反编译工具。 2. **Patch.exe** - 可能是补丁程序,用于更新或修正已安装软件的某些功能或错误。 3. **Instructions.txt** - 提供...
1. **反编译ActionScript**:它可以解析SWF文件中的ActionScript代码,无论是ActionScript 2还是ActionScript 3,转化为可读性强的文本格式,方便开发者分析代码逻辑。 2. **资源提取**:工具能够提取SWF中的图像、...
标题中的“Flash SWF反编译工具”是指用于解析和逆向工程Adobe Flash的SWF文件格式的软件。这些工具通常被开发人员、设计师或安全研究人员使用,以便查看和提取SWF文件内的动作脚本(ActionScript)、图形、音频和...
SWF反编译工具是一种专门用于解析和提取Adobe Flash SWF文件内容的软件。SWF文件格式是Flash平台上广泛使用的格式,它包含了动画、交互式内容、音频、视频等多种元素。在开发、调试或资源回收时,反编译工具能够帮助...
在某些情况下,我们可能需要对已经编译的SWF文件进行反编译,以获取源代码或进行修改。以下将详细讲解Flash和Flex反编译的相关知识点。 1. **什么是反编译**: 反编译是将已编译的二进制代码转换回源代码的过程。...
SWF反编译可以用于多种场景,比如恢复丢失的FLA源文件、分析SWF文件中所使用的动画和编程技术、教育和学习目的、甚至安全分析。它能够帮助开发者提取出SWF文件中的ActionScript代码、图形元素、声音资源等,进而进行...
市面上有许多SWF反编译工具,如Flash Decompiler Trillix、Sothink SWF Decompiler等。这些工具提供了图形界面,使得用户能够方便地查看和编辑SWF文件内部的代码和资源。 六、学习与应用 了解SWF文件格式对于开发者...
### jQuery Webcam Plugin jscam.swf 文件反编译工具使用说明 #### 一、概述 jQuery Webcam Plugin(简称“插件”)是一个跨浏览器的摄像头控制插件,它支持IE、Firefox以及Chrome等多种浏览器,主要用于实现...
Flash Decompiler即FFDec是一款SWF反编译软件,可通过打开图标或者拖动SWF文件到软件窗口中来开始反编译FLASH SWF/GFX/SWC文件。能够打开编辑FLASH,提供里面的图形、文本、图像、视频、声音、按钮以及字体框架...
了解并掌握ASV 6.0这样的SWF反编译工具,可以帮助开发者和设计师深入探究Flash内容,提升工作效率,实现更高效的内容复用和创新。同时,它也对研究Flash技术、教学和逆向工程等领域有着重要的作用。通过运行“去时间...