`
hereson
  • 浏览: 1428861 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

如何防止SWF文件被反编译?

阅读更多

这篇文章的标题所提出的问题的答案是“不可能”。至少对我来说是不可能的。借助适当的工具,我们可以反编译任何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)"

闪吧新社区:Y9FFPX0S2`V
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个字节的数据压入堆栈。

因此,字节码砍成单独的句子。每个句子由命令和数据组成,并且以命令打头。因此,每个句子都是一个基本的单元。理论上来说,对于这种方法没有什么错误。


}2s-]3M q0使播放器从句子中间开始读数据

让我们开始讨论“是播放器从句子中间读数据”的破坏反编译器的技术。

首先,我举一个现实世界的例子:

John says good morning.
:tux VW@bRg,}0Mary says thank you.
e^LH)DQ5T4Ko0现在生成SWF文件:闪吧新社区}X*f ?

分享到:
评论

相关推荐

    swf 反编译工具,将swf反编译成fla文件

    swf 反编译工具

    百度文库反编译其swf文件获得最全的解析文件

    抽空再花时间,整理下具体的代码含义。 这提取的较完整的swf反编译的fla.. 纯参考研究用...希望对下载的童鞋有帮助..

    反编译swf(Flash Decompiler Trillix)

    中文很强大的反编译swf软件,导出包含脚本非常好用。ps使用规则打开swf文件后选择转换,指定转换目录,点击全部转换。转换完后就可以用ps软件打开。

    swf反编译工具

    flash、swf反编译工具,无时间限制限制,支持flash cs5及以上版本,exe文件

    flash游戏开发之 如何反编译.swf文件得到actionscript3 as3源代码.zip

    flash游戏开发之 如何反编译.swf文件得到actionscript3 as3源代码.zip

    swf二进制封装加密防止反编译

    flex flash swf二进制封装加密防止反编译 flex flash swf二进制封装加密防止反编译 flex flash swf二进制封装加密防止反编译

    jQuery Webcam Plugin jscam.swf文件反编译工具使用说明

    jQuery Webcam Plugin jscam.swf文件反编译工具使用说明

    SWF反编译工具SWiX Free

    SWiX Free是一款SWF编辑工具,准确的说是一款调试、更新SWF文件的XML编辑器,SWiX可以将SWF文件反编译为SWIX的XML格式(SWiX-format XML),支持全系列Flash格式(Flash 5/6/7/8/9/10),反编译为XML格式会支持语法...

    SWF文件加密器 V9.0

    用户必须得到您的授权才可以播放,同时还可以防止您的swf文件被反编译或者被一些工具提取;您可以为用户创建播放密码,播放密码与用户的电脑硬件绑定,用户无法传播播放密码和文件。新增了防止屏幕翻录功能;新增...

    swf_file_format_spec_v10.rar_flex文件格式分析_swf反编译

    swf文件格式说明文档,用于反编译swf文件

    FFDec(swf反编译工具)5.0.2免费版.rar

    Flash Decompiler即FFDec是一款SWF反编译软件,可通过打开图标或者拖动SWF文件到软件窗口中来开始反编译FLASH SWF/GFX/SWC文件。能够打开编辑FLASH,提供里面的图形、文本、图像、视频、声音、按钮以及字体框架...

    ActionScriptViewer 反编译工具

    Action Script Viewer是一个SWF反编译应用程序,准确的说是一款调试、更新SWF文件的XML编辑器。支持AS1到AS3,能让你查看 SWF 文件里面的动作脚本;能让你取位图、音频、视频、字体等原始文件;能让你浏览 SWF 文件...

    SWFDecompilerMagic

     这款swf文件反编译工具可以让用户将一个SWF文件导出资源并保存为其他格式的声音、图像、形状、框架、逐渐、字体、文本、按钮、动画层和Actions cripts,用户也可以直接导出可以在Flash中进行修改的源格式FLA数据。

    QQ游戏反编译文件

    QQ游戏反编译代码文件 可以见到游戏的算法及运行流程,高手分析

    swf反编译.rar解压可用

    swf反编译软件。actionscript源码查看,可以用于swf后缀的文件的反编译。一般拿来研究加密方式

    原创:AnyExe2Swf flash exe文件还原、反编译工具

    小巧的(仅58K)的,将大部份工具制的flash exe还原/反编译成swf,已经测试官方工具和多个第三方工具生成的flash exe,直接将要还原的文件拖到此程序上即可。

    SWix flash反编译工具

    SWiX Free是一款SWF编辑工具,准确的说是一款调试、更新SWF文件的XML编辑器,SWiX可以将SWF文件反编译为SWIX的XML格式(SWiX-format XML),支持全系列Flash格式(Flash 5/6/7/8/9/10),反编译为XML格式会支持语法...

    flash反编译工具FlashDecompiler

    Flash Decompiler是一款反编译Flash的工具,可以把SWF文件转换为FLA格式,可以在原生Flash环境中进行编辑。软件还可以从FLASH文件swf格式中提取所有资源,包括:声音、图像、视频、图形、帧画面、文本、字体、按键、...

    Flash 反编译工具 Flash Decompiler Trillix 5.3.1400 中文汉化版.zip

    Flash EXE 文件反编译的方法一样常见的 SWF 文件。 Flash Decompiler Trillix 5.3.1370 汉化版也可以转换成 Adobe 的 Flex 文件,由 Adobe Flex Builder 中创建的。 Flash Decompiler Trillix 汉化版为您提供有关...

    Flash反编译|SWF转换FLA |SWF压缩Flash修改

    反编译 SWF 文件,在几秒钟内获得源代码 FLA。它支持批量转换,所以你可以给它留下一堆不同的任务和做任何其他事情,虽然我们的应用程序工作。 方便的时候你不需要重新做一遍整个 SWF 文件中,只是它的某些元素。您...

Global site tag (gtag.js) - Google Analytics