智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...

导航

Flash Player安全高级攻略

Posted on 2009-12-18 17:43  Bill Yuan  阅读(626)  评论(0编辑  收藏  举报

转自:http://flash.9ria.com/thread-41568-1-1.html

 

说一些显而易见的:

  • SWF很容易被反编译得到ActionScript代码。
            像"Sothink SWF decompiler"这样的应用在任何时间都可以做到。下一步...
  • 浏览器会缓存已经下载的SWF以便在将来更快的访问。
            IE缓存文件夹在“C:\Documents and Settings\USER\Local Settings\Temporary Internet Files\Content.IE5”(Window通常都隐藏这个文件夹,即使你把很多东西设置为可见,在地址栏中输入路径)。下一步...
  • 没有任何方法知道swf是否已经被篡改。
            没有签名...没有检查。下一步!
  • 客户端程序永远不能信任
            这是个事实。下一步?
  • 文件不能被加密(基本上大部分)
            Flash Player必须能够读取你的文件,因为它不知道你用什么加密,你必须"载入"一个加密的文件,加密文件的算法加载器中。但是你如何处理加载器呢?

你必须关心的一些事情:

  • 在flash调用"ApplicationDomain"时的特征。
            ApplicationDomain类是一个分离类定义的组的容器。Application domains通常用于区分在相同安全域的类。它与徐同一类存在多个定义,也允许子类重复使用父类的定义。
  • 通常,触发从浏览器缓存中重新加载SWF的唯一一件事情是它的文件大小。(如果文件大小不是完全相同,则重新下载)。
  • Flash Player没有办法知道一个SWF是否被授权。
  • 浏览器没有办法知道一个SWF是否被授权。
  • Flash Player不关心SWF是否在文件的结尾填充了null字符。
            SWF包含它的大小,将被装入相应的大小,但是后面跟的是什么并不关心。


案例1

难点:我们必须这样做?

让我们找一些想CheatEngine一样的软件,找到一些你想改变的有趣的数字(查看你的分数?),查找你的数字并改变它。做的好,朋友!

应用程序被入侵,但是它不会再发生了!
我添加了一些加密算法(AES/XOR)在内存值中

案例2

难点:开发人员知道内存欺骗的基本知识

因此,它不工作...(你找不到任何感兴趣的东西)

下载包注入软件(例如:Packet Porge或者额任何其他)。一些数据伪装包你想改变...改变它...然后将它发送到服务器。或者不改变它,发送几次相同的内容以添加交互频率。

应用程序被入侵,但是它不会再发生了!
我添加了一些加密(AES/XOR)包以增加包的数量递增ID以检测注入。

案例3

难点:开发人员知道关于网络包注入的基本知识

因此,它不工作...(你不知道在这些包装中都传输了些什么,复制他们好像没有任何效果)

描述:应用程序是由2个SWF文件组成(一个preloader和主程序)

打开你的浏览器缓存,找到"Main.swf",把它拷贝到其他地方。

在Sothink中运行它...反编译...重新编译FLA文件,修改你想要改变的地方(修改分数乘以10或者完全删除案例1和2中的保护措施),确保文件的大小与原来的大小完全一致(可以在文件的结尾添加NUL间隔,或者如果有需要的话删除一些素材确保它变小),然后将文件放回缓存中,重新载入文件。

你做到了!

应用程序被入侵,但是它不会再发生了!
我通过某些东西加密了Main主文件,所以它不会被反编译。

案例4

难点:所以开发人员也知道反编译器?

因此,它不工作了...(Main主文件不是一个SWF,且不能被反编译。)

但是Flash Player可以运行这个应用... 当然可以了!加载器下载了主文件,加密文件,任何使用"Loader.loadBytes()"从内存中载入它。因为在loader中含有算法?是的!反编译...改变代码以ByteArray形式输出"加密文件"到一个文件中,通过"flash.net.FileReference"代码保持到你桌面。

你现在已经有用Sothink反编译好的Main.swf了.(看案例2)

你做到了!

应用程序被入侵,但是它不会再发生了!
我在整个工程中使用了代码混淆。他们不理解做了什么处理!