快速业务通道

如何防止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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

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号