我正在使用 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/