Laan's steps..

Feed Rss

关于as3的代码混淆

03.26.2009, flash, by .

这个功能在DoSWF1.x版本就实现过,使用的是一种比较傻同时又不太准确的方案:根据代码中使用到的内部类信息来组成一个特殊字符集,这个特殊字符集在混淆过程中是不会被混淆。比如你使用了MovieClip类,于是MovieClip, alpha, visible,等所有MovieClip中的关键字段都被定义为特殊字符集了。

有了这个特殊字符集后,混淆就好办了。首先提取出所有类的类名、包名、方法名、属性名,把这些字段一一用混淆字段替换——当然,在特殊字符集中的字段被忽略。比如你写了override public function get width():Number 方法,由于width已收录在特殊字符集中,于是这个字段不会被混淆。

混淆结束后,对新的数据进行重组,生成一个新的swf。这样就完成了混淆过程。不过这个方案会造成很多的误杀,以致很多程序混淆后几乎不能运行了。比如你使用了ExternalInterface.call(“getURL”)来调用js代码,在这种方案下,“getURL”无法检测出来,于是被混淆了。这样就破环了原先程序。于是一直在寻找一种更好的方案。

首先想到的是模拟AVM来运行所有指令,根据运行状态来得到特殊字符集。后来一想,乖乖不得了,完全不可能实现。马上放弃,慢慢想别的出路… 一边生活一边工作,有空就想象这个东西该怎么做。

直到上周六,有人加我QQ说已经破了我DoSWF的授权控制了。强汗~~ 也该升级了。都已经磨蹭快4个月了。奋起。没有别的办法了,写一个指令运行器吧。忙了两天,终于得到一个勉强还可以运行的东西了。植入到DoSWF中去,发现还真的比以前的方案精确了不少。

趁热,把原先的代码了升级。将资源提取功能继承到DoSWF中,下载:http://www.doswf.org/?page_id=9
在线版本:http://www.laan.so/?p=441

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>