【问题标题】:How would I go about strengthening protection of my .swf file?我将如何加强对我的 .swf 文件的保护?
【发布时间】:2010-12-25 04:22:47
【问题描述】:

总的来说,我还是个 Flash 新手,我正在尝试加强对我的 .swf 文件的保护。

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

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

我真的很想将 .swf 拆分为多个部分,将它们放在不同的区域,以使其更难以逆转,但我不太确定这会有多有效,更不用说如何实际执行了。关于外部类(术语?),由于我无法找到如何在我的项目中实现它,所以我想从我找到的反向 .swf 中挽救函数并将它们添加到我的内部脚本中。即便如此,这个包还是以public class $Base64 extends Object 开头——extends我假设只是为对象添加了额外的功能,但我认为这不是完全必要的。

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

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

    保护 swf 的最常用方法是:

    1. 混淆 - 对随意的反编译器/黑客很有帮助。
    2. 像 mochi 这样的外壳 - 对反编译器毫无用处,但如果它也添加了混淆功能也可以。
    3. 服务器端代码 - 提供最佳保护,但仍不完美,它会减慢您的 swf 文件速度,并且需要 Internet 访问才能使用 swf。

    如果您认真保护您的代码,则必须在服务器端进行。

    【讨论】:

    • 我没有问题使它成为服务器端 :) 我想通过让启动器请求实际的 .swf 文件来使其更加安全,这反过来会请求从我的请求其他功能的功能网络服务器。成立。我将如何向我的项目添加外部 AS3 脚本?
    【解决方案2】:

    如果您想保护您的 swf,使任何人都无法对其进行反编译并查看您的 ActionScript 编码,那么您应该使用 Amayeta SWF Encrypt 之类的 swf 加密工具对您的 swf 进行加密。您可以查看http://www.amayeta.com/ 并获取一些有用的详细信息。

    谢谢。

    【讨论】:

    • 解密器可以通过简单的 Google 搜索轻松绕过该工具:/
    【解决方案3】:

    您可以使用 AS3 混淆器

    保护您的 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

    【讨论】:

      【解决方案4】:

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

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

      顺便说一句,如果你想混淆,我知道一个很酷的混淆技巧:可以将 swf 作为字节数组嵌入到 swf 中。创建一个新的 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() );
                  }
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2012-03-31
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-22
        • 2017-03-22
        • 1970-01-01
        • 2011-01-16
        • 2011-06-11
        相关资源
        最近更新 更多