大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 网络媒体 -> FLASH -> 如何防止SWF文件被反编译

如何防止SWF文件被反编译

时间: 2021-07-31 作者:daque

这篇作品的题目所提出的题目的谜底是“不大概”。起码对我来说是不大概的。借助符合的东西,咱们不妨反编写翻译任何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方法的文献,将精细证明还好吗创造如许的受养护文献

    非表露字符和污染器

除去遏制反编写翻译器的本领除外,咱们还不妨使反编写翻译的截止不简单读。你不妨欣赏对于污染器的网站。

基础上,它是对变量和因变量的名字举行重定名。

function -3(-4){trace(-4);}    function -1(0,-2){     if(0<-2){-3(1);}    }

确定的是,盗窃者不许只是是正片、粘贴就能运用那些代码。编写翻译器不承诺你对一个因变量举行如许的定名。

污染器的控制是变换因变量的名字大概给底下的剧本代码带来烦恼。

function myfun(){trace("myfun");}    a="my";    b="fun";    this[a+b]();

另一个本领是使因变量的名字不行表露。比方,用中国字动作因变量名,反编写翻译器大概就会不许很好的表露它。而后,咱们便会看到:

function ?(){?,?){?.?=?;}

asv 4运用unicode源代码表露不行表露字符,以是,截止是易读的,只然而减少了点微弱的难度。

自我养护

即使你找到一个很好的本领来养护本人的swf不备反编写翻译,不要与旁人瓜分这个本领,起码不要再因特网上公然它。固然,它不许过100%的防反编写翻译,起码对我来说是如许。然而,不是一切的人都对swf的方法一目了然。很多,盗窃者只是只会借助软硬件来反编写翻译swf。所以,即使你的手段是尽大概少的盗窃者不妨盗窃你的swf,那么请养护好你的(白虎swf的)神秘本领。

不过在此指示你,你的swf是无养护的。对于熟习swf方法的人来说,一切货色都是毫无掩饰的。即使你的目的不过养护“少许因变量”的话,它该当是安定的。她们偶然会夺取你的因变量,她们会编写本人的因变量。

通用养护办法

咱们在网站上放了个联机游戏,悲惨的是,很多考察者不过考察咱们的站点只是一次罢了,而后运用载入的版从来离线玩。偶尔,咱们以至创造咱们的游戏出此刻其余的站点上。

为了制止这种情景爆发,底下是可采用的养护办法:

1. 分属范围查看

编写剧本查看_url,即使_url是"http://www.mydomain.net/game.swf"就播放片子,要不不播放大概退出。当离线播放的功夫,_url该当像"file://c| somesub/game.swf";但它在其它domain中时,_url就形如"http://www.others.net/game.swf"。所以,这个本领不妨适合的加上少许养护。固然,对于心存不良的反编翻译来说是无效的。那些剧本不妨借助flasm来简略大概窜改为不查看。纵然在其它公然场所偶然能看到被破译的swf文献,然而离线也不妨播放的swf就大概爆发上述情景。

2. 效劳端口令考证

编写剧本,而且在发端游戏时从效劳端加载暗号。即使暗号为空,则遏止游戏大概退出游戏。这很简单被怀有歹意的用户破译,她们只有编纂swf文献,将那些剧本简略即可。哪些剧本不不妨被简略呢?当发端游戏时,从效劳端加载的舆图数据是举行游戏必需的,以是心存不良的用户不大概简略那些剧本。为了举行游戏,它必需供给那些舆图数据。固然,它不妨从缓生存偶尔文献夹中的数据中抉择舆图数据,供给给swf,进而激活游戏。

3.将swf大概变量置于效劳端

这是第二种本领的扩充、蔓延,该本领仍旧普遍的运用着。开始的游戏(swf)文献不过个承载器,当单击播放(或发端)按钮后,将加载另一个swf文献。当须要舆图文献的功夫,便从效劳端加载舆图数据。当加载数据遇到遏制时,将从效劳段再次加载遭到遏制的swf文献。新层上的数据也是从效劳端传过来。

从这边。咱们不妨看到一个规则:提防反编写翻译的最佳本领是“不给”。

即使少许笨拙的扒手只载入game.swf文献,他不大概玩这个游戏。 他须要在缓存中抉择出一切的swf文献和变量。翻开一切的swf文献,编纂那些变量的名字,使它与缓存中的变量的名字普遍。

即使咱们的舆图由cgi随机爆发,那么扒手只大概具有一份舆图,他没有随机爆发舆图的权利。即使是个迷宫游戏的话,充其量,他只能玩一个迷宫,他没有“动静爆发迷宫”的功效。即使心存不良的用户玩这个游戏将碰到一个新的遏制,由于在他的缓存中没有这个新的遭到遏制的swf文献,以是将没辙举行游戏。

所以,很多算法和功效都放在效劳端,谁人swf文献不过个界面罢了。这是个完备的养护办法,然而缺点是这件爆发一个转为游戏处事的cgi,而不是flash。咱们正在计划对于swf的养护题目,这个处置计划是不妥贴的,由于swf文献自己得不到养护。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.