如何防止SWF文件被反编译?
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-08
|
的技术。
首先,我举一个现实世界的例子:
|
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和随后两个字节),然后所有的东西都得到反编译。
3dd29">这儿是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编码显示不可 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
|