转自: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)
你做到了!
应用程序被入侵,但是它不会再发生了!
我在整个工程中使用了代码混淆。他们不理解做了什么处理!