快速业务通道

如何防止SWF文件被反编译

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-14
法没有什么错误。 使播放器从句子中间开始读数据 让我们开始讨论“是播放器从句子中间读数据”的破坏反编译器的技术。 首先,我举一个现实世界的例子: 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](); 另一个技术是使函数的名字不可显示。比如,用汉字作为函数名,反编译器可能就会不能很

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号