我如何加强对.swf文件的保护?

时间:2010-12-25 04:22:47

标签: flash actionscript-3

我一般都是flash的开头,我正在尝试加强对.swf文件的保护。

我的一个想法是将.swf文件分开,就这样说;创建一个具有敏感但重要的功能和值的新swf,将其存储在我的网络服务器上,并让启动器在通过一些验证过程后请求文件。只有这个想法的缺陷,我不知道如何在我的项目中添加一个类(如果这是正确的术语?)。我转换了另一个.swf文件,其中包含使用Base64加密的相同方法,但我不太确定如何添加外部.as文件以在我的项目中执行。

当然,我还发现了其他方法,例如使用DCOMSoft SWF Protector(效果不大)和混淆程序(也可以反过来)。我最近发现了一个名为AS3Crypto的.SWC,我不知道如何使用。我已将文件添加到我的AS3属性中,但就我所知。 AS3Crypto的其余部分及其谜团对我来说仍然含糊不清,我无法通过Google找到任何有用的信息。

我真的想将.swf拆分成不同区域的部分以使其更难逆转,但我不太确定它会有多么有效,更不用说如何实际操作了。关于外部类(术语?),由于我无法找到如何用我的项目实现它,我想到从已发现的反转.swf中挽救函数并将它们添加到我的内部脚本中。即使这样,软件包也以public class $Base64 extends Object开始 - extends我假设只是为对象添加了额外的功能,但我不认为这是完全必要的。

4 个答案:

答案 0 :(得分:0)

如果你想保护你的swf没有身体可以编译它并查看你的ActionScript编码,那么你应该用swf加密工具加密你的swf,比如Amayeta SWF Encrypt。您可以查看http://www.amayeta.com/并获取一些有用的详细信息。

感谢。

答案 1 :(得分:0)

基本上,如果有人做得足够多,他们就会解密并拼凑信息。我理解你的使命,当我开始AS3时,我有同样的感觉。

保护瑞士法郎的最常见方法是:

  1. 混淆 - 善于对抗偶然的反编译器/黑客。
  2. 像mochi这样的壳 - 对反编译器毫无用处,但如果它也增加了混淆,那就没关系。
  3. 服务器端代码 - BEST PROTECTION可用,但它仍然不完美,它会降低你的swf文件速度并需要访问互联网才能使用swf。
  4. 如果您认真保护代码,则必须在服务器端执行此操作。

答案 2 :(得分:0)

您可以使用 AS3 Obfuscator

保护您的ActionScript代码

AS3Obfuscator是一个应用程序,它允许您对ActionScript源代码进行模糊处理,使其在反编译时难以阅读。

您可以看到示例here

不要忘记您可以将您的SWF锁定到特定域名

function pageDomainCheckInit(event:Event):void {
    if (url != "http://www.domainName.com/siteFolder/sitePage.html") {

        warning_txt.text="This file is running on the wrong URL. Content Access Restricted!";
        closeBoxTop.x = 0
        closeBoxTop.visible = true;
        closeBoxTop.height= stage.stageHeight/2
        Tweener.addTween(closeBoxTop,{width:stage.stageWidth, alpha: 0.8, time:1, transition:"easeInOutExpo"});

        closeBoxBottom.x = stage.stageWidth
        closeBoxBottom.visible = true;
        closeBoxBottom.height= stage.stageHeight/2
        Tweener.addTween(closeBoxBottom,{width:stage.stageWidth, time:1, alpha: 0.8, transition:"easeInOutExpo"});
    } else {

        warning_txt.text=" ";
        closeBoxTop.visible = false;
        closeBoxBottom.visible = false;
    }
    stage.removeEventListener(Event.ENTER_FRAME, pageDomainCheckInit);
}

stage.addEventListener(Event.ENTER_FRAME, pageDomainCheckInit);

有关详情,请点击here

答案 3 :(得分:0)

创建Flash文件(或其他客户端文件,如xml等)时,您应该做的最好的事情是尽可能使它变得愚蠢。 不要在其中存储密码,id,guid或重要数据,而是创建服务器端服务/ API,根据用户输入将所有数据传递到Flash /客户端。制作安全的API比创建受保护的SWF文件更容易。

使用'charles proxy'或fiddler监控自己的项目http流量也是个好主意(还有firefox / chrome插件)。了解数据是如何传输的,以及数据是否可预测以及是否易于操作。

不过,如果你想要混淆,我知道一个很酷的混淆技巧:可以将swf嵌入swf作为bytearray。创建一个新的flashproject并将此类标记为Main-document。将原始.swf文件放在项目中。确保将文档设置(舞台大小等)设置为与输入SWF相同。

    package 
    {
        import flash.display.Loader;
        import flash.display.Sprite;

        /**
         * @author Mark Knol
         */
        public class ByteArrayLoader extends Sprite
        {
            [Embed(source='../swf/myFlashFile.swf', mimeType='application/octet-stream')]
            private static const bytes:Class;

            public function ByteArrayLoader()
            {
                Loader( addChild( new Loader() ) ).loadBytes( new bytes() );
            }
        }
    }