第十一章 软件保护技术(三)(资源保护)

资源保护

  • 主要应用在:
    • App 资源被篡改
      • AS 正常开发生成的 APK,若未经加密处理,用 ApkTool 反编译后,可完整地重现 res 目录下的资源信息
      • 上述情况下 App 面临的安全隐患
        • 资源被恶意盗用
        • 资源与代码被修改并重新打包发布(即“重打包)
    • 游戏素材资源被窃取
      • 游戏的资源很重要
      • 山寨游戏大量盗用
    • 游戏脚本资源被破解
      • 游戏和 App 最大的区别
        • 游戏为保证高实时的动态特性,会采用脚本语言驱动程序运行
      • 大量的游戏逻辑用脚本语言编写,使游戏的安全问题转移到游戏脚本的保护策略上,低保护强度的游戏脚本易因被破解而暴露整个游戏的安全问题

App 资源被篡改

  • 对此问题,早期的软件保护壳采取加密保存 App 中的资源,并在程序加载运行时动态解密

  • 一段将程序中使用的图片加密保存到 assets 目录,并在运行时动态解密的代码:

    public static Bitmap decodeImage(Context context, String fileName) {
        Bitmap image = null;
        AssetManager am = context.getResources().getAssets();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        try {
            InputStream is = am.open(fileName);
            byte[] buffer = new byte[1024];
            is.read(buffer);
            while ((len = inputStream.read(buf)) != -1) {
                os.write(buf, 0, len);
            }
            byte[] data = os.toByteArray();
            for (int i = 0; i < data.length; i += 1) {
                byte temp = data[i] ^ 0x1f;
                data[i] = data[i + 1];
                data[i + 1] = temp;
            }
            image = BitmapFactory.decodeByteArray(data, 0, data.length);
            is.close();
            os.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return image;
    }
    
  • 这种方式在程序运行时增加了解密步骤,会影响程序的运行效率,很多加密方案后来只对部分关键资源加密

  • 由于运行状态下的资源处于解密状态,可从内存中抓取,通常配合反调试和运行环境检测等动态保护方案共同实施


游戏素材资源被窃取

  • Android 平台,使用 Cocos2d-x 和 Unity3D 开发游戏的场景居多
  • 用 Cocos2d-x 开发的游戏,由于其本身开放源代码,开发人员可对其资源加载部分的代码深度改造,形成自己的保护方案
  • 用 Unity3D 开发的游戏,长期受到逆向分析人员关注,已形成成熟的资源解密方案。对未经特殊处理的 Unity3D 游戏,可用 disunity 解密游戏中的所有资源。要想保护,开发人员要自行实现游戏资源包的格式,并在游戏加载时将资源包动态解密

游戏脚本资源被破解

  • Cocos2d-x 支持用 Lua 和 JavaScript 开发游戏。最初因开发人员没考虑 Cocos2d-x 游戏的安全问题,只要解压 APK 即可查看游戏的所有代码,进而破解
  • 手游市场火爆后,游戏厂商开启加密时代,反编译和破解的难度随着版本的更新而提高
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值