android - LibGDX : Android Game Security

标签 android security libgdx

我正在使用 LibGDX 框架开发游戏。我想知道如何让游戏更安全。例如,拥有 root 权限的 android 设备的用户可以更改保存的 .xml 文件,这样游戏就会被破解,或者他/她可以使用 GameKiller 或类似的程序并更改游戏运行时值(金钱、exp 等)。那么我该如何预防呢?

桌面版也一样,保存文件没有隐藏,玩家也可以在 PC 上找到该文件。并且可以使用 CheatEngine 或其他程序进行黑客攻击并再次更改运行时值。

最佳答案

如果您不存储私有(private)/重要数据,而只是想让破解您的游戏变得困难(例如,通过更改带有游戏关卡的 xml),您可以基于 GWT Crypto library 实现加密。

初始化加密器的方式是:

    //this will be used for encrypting and decrypting strings
    private TripleDesCipher encryptor;  

    ...

    //creating key for encryptor
    TripleDesKeyGenerator generator = new TripleDesKeyGenerator();
    byte[] key = generator.decodeKey("04578a8f0be3a7109d9e5e86839e3bc41654927034df92ec"); //you can pass your own string here

    //initializing encryptor with generated key
    encryptor = new TripleDesCipher();
    encryptor.setKey(key);

    ...

使用方法:

    private String encryptString(String string)
    {
        try 
        {
            string = encryptor.encrypt( string );
        } 
        catch (DataLengthException e1) 
        {
            e1.printStackTrace();
        } 
        catch (IllegalStateException e1) 
        {
            e1.printStackTrace();
        } 
        catch (InvalidCipherTextException e1) 
        {
            e1.printStackTrace();
        }

        return string;
    }

    private String decryptString(String string)
    {
        try 
        {
            string = encryptor.decrypt(string);
        } 
        catch (DataLengthException e) 
        {
            e.printStackTrace();
        } catch (IllegalStateException e) 
        {
            e.printStackTrace();
        } catch (InvalidCipherTextException e)
        {
            e.printStackTrace();
        }

        return string;
    }

我还建议您不要使用 XML,而应使用 JSON——它们更方便且重量更轻。 Read how to handle it here


请记住,客户端加密通常不是一个好主意,并且总是可以通过某种方式被黑客入侵 - 但我很确定,如果不是为了钱,没有人会认为它值得。

如果您对保存数据的更高级方法感兴趣,最好的办法是通过 SSL 发送所有数据并将其保存在一些防护良好的服务器中——尽管我不太确定 Libgdx 是否有任何好的 SSL 机制并且不知道我可以推荐的第 3 部分库。

保存文件的服务示例可以是Shephertz (我正在使用他们出色的 AppWarp,并且打算在我的应用程序中也实现这个)。

关于android - LibGDX : Android Game Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33198028/

相关文章:

android - 无法从 Android 卸载 SoundHound 应用程序

android - 无法在 Trigger.io Android 应用程序上启动接收器 com.parse.ParseBroadcastReceiver

java - 是否有支持 NIST 标准的随机生成器的 Java 8 实现?

php - "random"盐比 "unique"盐有什么好处?

Java - Libgdx -TiledMap | Java - Libgdx -TiledMap |获取 map 中每个单元格的 screenX 和 screenY

java - LibGDX FitViewport 正确调整大小,但在更改屏幕后重置

java - 即使我的文件已加载(Android Studio、libGDX、Java),AssetManager.get() 也会返回 null

android - android中的ActionBar和滑出菜单

Android:如何让自定义 View 部分重绘?

windows - 我要去哪里学习编写必须非常非常安全但确实暴露外部服务(在标准 Windows 或 Linux 操作系统上运行)的代码