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