【问题标题】:Any reverse engineers have experience with secureSWF?任何逆向工程师都有使用secureSWF 的经验吗?
【发布时间】:2009-08-11 11:35:55
【问题描述】:

我正在编写一个 Flash 应用程序,我担心它会被反编译。为了尽量减少这种机会,我想对文件进行混淆处理。

我听说过secureSWF (http://www.kindisoft.com/),他们确实列出了一些“用户cmets”。然而,这些人是如此乐观,以至于他们很难相信。没有一个悲观的评论(甚至没有关于例如用户界面或支持),所以有些事情告诉我他们可能不会全部发布。根据我的经验,即使是最好的公司也会时不时地受到某种批评。

那么,这里的任何逆向工程师都可以告诉我您在这项工作中的经验如何 - 以及您是否设法对安全SWF 混淆文件进行逆向工程?如果是这样,您大约花了多长时间?你会推荐这个软件吗?

非常感谢。

【问题讨论】:

    标签: actionscript-3 flash obfuscation reverse-engineering


    【解决方案1】:

    规则 1:

    任何有智慧和决心的人总会获得你的代码/密钥/源/文件/数据
    您所做的任何事情都只会增加妥协所需的潜在时间/精力

    无论有没有 SecureSWF,人们都会自找麻烦吗?

    一个快速的谷歌建议没有太多的尝试来反编译使用secureSWF创建的SWF文件......但它们仍然必须符合编译字节码的规范......所以它只是混淆了。缺乏测试表明:

    1. 没有人真正独立测试过它,因此它的安全性没有任何价值
    2. 人们已经测试过了,它非常有效,但人们没有发布结果

    我认为前者的可能性更大。如果您说 Flash 应用程序的作用,那么这些点可能会更具体。

    我会寻找与发布后多久这些东西被逆转有关的数据来源而不是系统本身的安全性(这无关紧要)。

    同时确保确保您的源代码安全(而不是与社区合作)是最好的策略,因为在某些时候,一个坚定的头脑将能够访问您的逻辑。

    从业务的角度来看,您的战略定位不应该是让您的逻辑混乱......因为这是徒劳的。您可以随心所欲地拥有所有权......但人们会绕过它(只需询问游戏行业)。严厉的安全措施会引起强烈反对(参见 DRM)。

    如果您确信您的应用程序如此出色以至于人们会努力扭转它,请寻找另一个价值主张。

    Flash 就是其中之一,就像 JavaScript 一样,你能做的只有这么多,这真的很重要吗?如果没有链中的其他环节,应用程序逻辑有什么好处?

    无论如何,寻找反转编码所需的努力而不是软件客户端的感知强度。

    无论如何,祝你好运!

    【讨论】:

    • 谢谢。我知道代码总是可以得到的。然而,有可能使所需的努力更高——到付出的努力不再值得“利润”的地步。该应用程序是一个多人游戏。我注意到没有太多使用 SecureSWF 的经验,您认为(或其他人)其他软件可能更好吗?是否有使用该软件的经验(从逆向工程师的角度)?
    • 这就是问题所在。该软件可能会将标准提高到 99.9% 的人不能被嘲笑的地步……但只需要 0.1% 就可以让 99.9% 的区块变得毫无价值。
    • 不过,只有当这 0.1% 的人要公开来源时。
    【解决方案2】:

    免责声明:我为 Kindisoft 工作。

    secureSWF 是目前最好的 ActionScript 混淆器。我相信这是毫无疑问的: https://www.mochiads.com/community/forum/topic/which-obfuscator-should-i-use-as3

    http://asgamer.com/2009/why-how-to-encrypt-your-flash-swf

    代码混淆器应该使逆向工程师无法使用可以检索可读源代码的自动化工具(即反编译器)。在这方面,secureSWF 非常成功。由于不再可能使流程自动化,因此对混淆应用程序进行逆向工程的时间和精力取决于其大小。应用程序越大,逆向工程就越复杂和耗时。从头开始重写代码通常更简单。

    混淆不是加密。它应该是一个单向的过程。重命名标识符时,原始名称不再存在。让他们回来的唯一方法是猜测。同样的事情也适用于控制流混淆。修改指令和更改代码在字节码中的执行方式并不遵循 ActionScript 的相同规则。考虑以下几点:

    
    // swapping the values of a and b
    var t = a;
    a = b;
    b = t;
    // will be compiled to something similar to:
    get a
    set t;
    get b;
    set a;
    get t;
    set b;
    // and will be obfuscated to something similar to:
    get a
    get b
    set a
    set b
    // then it can become:
    goto l1:
    l2:
    set a
    set b
    goto l3
    l1:
    get b
    get a
    swap
    goto l2
    l3:...
    // after that it becomes:
    goto l1:
    l2:
    set a
    set b
    goto l3
    get b
    dup
    add
    l1:
    get b
    get a
    swap
    goto l2
    l3:...
    // and finally (? denotes an unprinted char)
    goto l1:
    l2:
    set ?
    set ?
    goto l3
    get ?
    dup
    add
    l1:
    get ?
    get ?
    swap
    goto l2
    l3:...
    

    现在想象一下,这适用于您的所有代码。每次都以不同的方式。我会走得更远,而不是声称逆向工程 SWF 文件变得与本机代码一样难。我说它变得更加困难。

    但这可能吗?当然可以。如果您有如此重要的东西,攻击者会为此陷入困境,那么绝对不应该在可能充满敌意的环境(客户端)中执行它。尽管它有帮助,但不应将混淆主要视为一种安全措施。更多信息可以在这里找到: http://en.wikipedia.org/wiki/Security_through_obscurity

    其他替代方法包括保持敏感代码在服务器上运行和加密。服务器端编码并不总是可行的。在许多情况下,您确实需要您的代码在客户端上运行。加密更糟糕,解密必须在客户端进行,您必须将解密代码和密钥发送给客户端,以防止攻击者自己解密代码。

    我希望我提供了足够的技术内容来支持我的观点。现在回到无耻营销:)。下载演示版并自行测试。它没有时间限制并且功能齐全,除了我们在处理过的文件上留下的水印。由于我们在论坛和 stackoverflow.com 上寻求帮助,因此我们的技术支持服务绝对超出预期;)

    更多信息可以在这里找到: http://www.kindisoft.com/secureSWF/faq.php

    【讨论】:

    • +1,内容丰富的帖子,具有产品背景,不考虑就业偏见:)
    • // and will be obfuscated to something similar to:: 你的意思是“优化”吗?
    • 不太好。我试图反编译受secureSWF保护的swf。 secureSWF 设置的域锁定非常容易移除。
    • 现在有谁知道如何联系这家公司,我尝试向销售部门发送电子邮件,但显然没有人回复。 (我觉得这家公司倒闭了,现在那个flash基本没了)
    【解决方案3】:

    我在混淆器方面没有丰富的经验,但几个月前我被要求为一个特定的项目尝试其中的几个(它实际上是一个 -- 相当简单 -- 多人游戏)。我尝试了 SecureSWf 和 A​​mayeta SWFEncript(两个试用版,如果我没记错的话,功能齐全)。

    两者都对更“高级”的功能存在一些问题。如果我只选择重命名标识符,事情就会顺利进行。但是即使使用默认设置(最少的控制流混淆),其中一个混淆器也会产生非法字节码,即它会被玩家的验证者拒绝。这会产生一个异常,仅此而已。我真的不记得是哪一个了,但是一运行 swf 就失败了。

    我没有进一步测试,但它让我看到这也是你必须考虑的事情。 使用此工具需要额外付费。对于您的目的而言,这可能是可接受的,也可能不是,但您应该考虑到这一点。 一旦你改变和扭曲了你的 swf,它就不再是你调试和测试过的同一个 swf。所以,现在你将有两倍的工作测试,因为混淆器有可能引入了错误。我看到的那个很明显,立刻让玩家大吃一惊,但可能还有更微妙、更难的。如果你碰巧有一个只在你的“安全”版本中出现的错误(或者更糟糕的是,它看起来只在你的安全版本中出现,但你并不积极),调试它就不会很有趣。

    当然,这不是一个正确的评论,只是我有限的经验。大多数混淆器都有免费试用版,因此您可以自己尝试。而且我还应该说,反编译和反汇编的代码很好,真的很模糊,理解它是一项艰巨的任务。

    然而,我想我会添加一个不常提及的不同视角。

    【讨论】:

    • 在混淆后,您只需遍历您的应用程序即可对其进行测试。混淆器引入的任何错误都会被验证器立即捕获。如果发生这种情况,您将返回混淆器并对其进行配置(即告诉它不要重命名动态引用的标识符)。这是一个直接的过程,每个错误都有一个解决方法。而且它绝对不需要您重新调试和测试您的应用程序。
    • 是的,您可以找到几乎所有错误的解决方法。我的意思是你必须这样做,而且需要一些额外的时间。一些并不总是提到的东西。我不认识你,但我把这种事情称为测试。如果您发现问题,我将修复它的过程称为调试。所以,我想说你必须测试并可能调试混淆的 swf。
    • @Ammar:不一定。验证器可能没有 SWF 规范那么严格,因此即使无效字节码现在可以正常工作,也不能保证它可以与下一版本的 Flash Player 一起工作。
    【解决方案4】:

    看看开源编译器,例如 SWFMill 和 Haxe http://haxe.org/,它们在最终的 swf 中生成了不同的字节码,可能会导致许多流行的反编译器崩溃。 很明显,可以像普通的adobe编译的swf一样获得代码,但是很多反编译器将无法使用它,所以如果您想增加“所需的工作量”,我建议您看看这个解决方案并可能创造出混合所有这些的东西。

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 2011-09-30
      • 2011-07-24
      • 2023-03-24
      • 2014-04-08
      • 2018-12-22
      • 2011-12-21
      • 1970-01-01
      相关资源
      最近更新 更多