• Flash 加密和破解


    关于Flash(swf),我们需要明确一点:

    ***Flash字节码的意义都是公开的 所以如果cracker真的有足够的耐心他最终还是可以破解掉你的Flash。我们能做的只是尽量提高Flash被破解的门槛让cracker破解它需要消耗的时间大于自己更新版本的间隔就好了。

    一般而言,对于游戏,无非是为了防止cracker修改游戏数据,制作外挂,当然也有人为了破解游戏,提取素材,提取音频,提取音乐等等。

    现在Flash页游已经走下坡了,没多少人关注了,而且这种加密方案也比较成熟了。但是,正因为Flash小游戏很多,这里边大量的素材资源,也许就是非常不错的资料来源。

    先简单回顾一下怎么做游戏的加密,防止破解或外挂:

     1、关键数据加密

    适用防范对象
      使用内存修改工具妄图直接修改关键数据的初级cracker
    原理
      关键数据不使用明文保存
    具体做法
      对关键数据的存取使用AES或XOR等算法进行处理保证关键数据在内存中不以明文保存(做一个类用于存取,每次把数据取出后用临时变量做加密解密)

    2、修改数据包

    适用防范对象
      使用Fiddler等各种工具篡改回包或使用假数据发包的初中级cracker
    原理
      加密数据包并在数据包里面加入防伪信息
    具体做法
      对数据包内容进行简单的AES或XOR加密并在其中加入类似TCP/IP协议的Sequence ID前后台共同对数据包进行校验。

    3、Flash初级加密

    适用防范对象
      会用Flash破解工具破解之后尝试对Flash源码进行修改的中高级cracker
    原理
      提高使用工具破解Flash之后读懂源码并进行修改的门槛
    具体做法
      直接使用工具如DoSWF等对Flash的关键代码进行加密和混淆

    4、Flash高级加密
    适用防范对象
      没有足够的时间和耐心的高级cracker
    原理
      使用各种恶心的技巧对自己的Flash关键内容进行保护
    具体做法
      (1)对关键代码进行混淆 ——提高破解后读懂代码的门槛
      (2)将保有关键逻辑的main.swf以二进制形式嵌入到工程里在外层使用loader的loadBytes()方法进行读取并实例化 ——提高直接被抓包抓到关键SWF的门槛需要cracker解析文件二进制内容才能拿出来关键的swf
      (3)加载main.swf之前检测关键类是否已经被定义过并且将main.swf加载到与loader.swf不同的ApplicationDomain ——防止cracker用preloader等方法事先定义关键类用来顶替main.swf中的同名关键类提高类替换的门槛(父程序域覆盖子程序域)
      (4)关于第2点,还可以把二进制做得更绝一些,例如把二进制加密了,然后再在程序里边解密,而解密程序,又可以用Pixelbender来做(Pixelbender的破解又难了很多)。当然,最重要的是,必须先把loader部分混淆,让反编译软件无法直接得到可运行代码,这样cracker就失去耐心了。
     
     
    好了,说完加密,那么现在这么多flash小游戏,破解一下,拿点素材来使用也是不错的选择。
    反编译提取素材,当然要依赖于Sothink等反编译软件了,但是很多游戏的素材和主swf都以二进制形式嵌入的,这样对于sothink swf decompiler来说是无能为力的。反编译出来只有这样的空类:
    这时候需要自己根据swf格式说明,写个程序提取出对应的二进制数据,再用sothink来反编译。
  • 相关阅读:
    【转】linux常用命令
    【转】C++三大特性
    插入排序
    shixi
    【转】TCP协议
    【转】排序算法稳定性
    面筋BD
    斐波那契数列
    【面试题】D
    【学习笔记】OI模板整理
  • 原文地址:https://www.cnblogs.com/kenkofox/p/3994213.html
Copyright © 2020-2023  润新知