我正在编写Flash应用程序,担心它将被反编译。为了最大程度地减少这种机会,我想对文件进行模糊处理。
我听说过secureSWF(http://www.kindisoft.com/),它们确实列出了一些“用户评论”。但是,他们是如此乐观,以至于难以置信。没有一个悲观的评论(甚至没有关于用户界面或支持的评论),所以有些事情告诉我他们可能不会全部发表。根据我的经验,即使是最好的公司也时不时会有某种批评。
因此,这里的任何反向工程师都可以告诉我您的工作经验如何-以及是否设法对安全的SWF模糊文件进行反向工程?如果是这样,您大约花了多长时间?您会推荐此软件吗?
在此先多谢。
最佳答案
免责声明:我为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文件变得像 native 代码一样困难之外,我将走得更远。我说这变得更加困难。
但是有可能吗? 当然是。如果您有如此重要的事情,那么攻击者将为此而陷入麻烦,那么绝对不应在可能具有敌意的环境(客户端)中执行它。尽管混淆有帮助,但不应主要将混淆视为安全措施。更多信息可以在这里找到:
http://en.wikipedia.org/wiki/Security_through_obscurity
其他替代方法包括使敏感代码在服务器上运行并进行加密。服务器端编码并非总是可行的。在许多情况下,您确实需要在客户端上运行代码。加密甚至更糟,解密必须在客户端上进行,您将必须将解密代码和 key 发送给客户端,而没有任何东西可以防止攻击者自己解密该代码。
我希望我提供了足够的技术内容来支持我的观点。现在回到无耻的营销:)。下载演示版本并自己进行测试。它没有时间限制,并且除了我们留在已处理文件上的水印外,它的功能都完整。由于我们在论坛和stackoverflow.com上寻求支持,因此我们的技术支持服务绝对超出了我们的期望;)
更多信息可以在这里找到:
http://www.kindisoft.com/secureSWF/faq.php