我正在开发使用LibGDX框架的游戏。我想知道如何让游戏更安全。例如,拥有扎根android设备的用户可以更改保存的.xml文件,以便游戏被黑客入侵,或者他/她可以使用GameKiller或类似的程序并更改游戏运行时值(金钱,exp等)。那我该如何防止这些?LibGDX:Android游戏安全
和桌面版本一样,保存文件不隐藏,玩家也可以在PC上找到该文件。并且可以使用CheatEngine或其他程序进行黑客攻击并再次更改运行时值。
我正在开发使用LibGDX框架的游戏。我想知道如何让游戏更安全。例如,拥有扎根android设备的用户可以更改保存的.xml文件,以便游戏被黑客入侵,或者他/她可以使用GameKiller或类似的程序并更改游戏运行时值(金钱,exp等)。那我该如何防止这些?LibGDX:Android游戏安全
和桌面版本一样,保存文件不隐藏,玩家也可以在PC上找到该文件。并且可以使用CheatEngine或其他程序进行黑客攻击并再次更改运行时值。
如果没有存储专用/重要数据,但只希望使其难以破解您的游戏(例如,通过与你的游戏水平变化的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但JSONs - 中y更方便,重量更轻。 Read how to handle it here
请记住,通常客户端加密是不是很不错的主意,总是能以某种方式被黑 - 但我敢肯定,如果它不是钱的问题没有人会认为它的价值。
如果您对保存数据更高级的方式感兴趣,最好的办法是通过SSL发送所有数据并将其保存在一些保安服务器中 - 尽管我不确定Libgdx是否具有良好的SSL机制,并不知道我可以推荐的第三方库。
保存文件的服务示例可以是Shephertz(我正在使用他们的AppWarp,并在我的应用程序中实现这个)。
请注意,此加密在此上下文中提供与使用一个字节异或的相同安全性。为什么? Java很容易反编译。所以我只是反编译jar/apk(甚至有在线工具),复制代码并解密/加密保存文件。人们至少应该试着隐藏/模糊密钥,以便找到它更“难”。 –
可以使用那些用于运行时
双床用于cheatengine和gamekiller
int health=15;
int twinhealth=15;
if(HPtaken())
{
health+=10;//those twins will always change together
twinhealth+=10;
}
if(health!=twinhealth)//if they are different this means there is hack attempt
{
//punishment for hacker
}
事实上,它不是一个隐藏的变量,所以黑客不能通过gamekiller或cheatengine改变easly。
int health=15*7;
int twinhealth=15*7;
if(HPtaken())
{
health+=10*7;//those twins will always change together
twinhealth+=10*7;
}
drawhealth(health/7);// So hacker going to see and search wrong value on cheatengine
哈克禁止冷冻,并用相同的值同时改变双。所以至少有一个双胞胎会被加密。
int health=15;
int twinhealth=15*5;
if(HPtaken())
{
health+=10;//those twins will always change together
twinhealth+=10*5;
}
if(health!=twinhealth*5)//if they are different this means there is hack attempt
{
//punishment for hacker
}
当然黑客可以反编译apk和破解你的游戏,但它使得更难以破解游戏。顺便说一下,您可以使用随机变量来编辑变量。
你可以申请到XML或偏好那些,但你可以使用一点点复杂的地穴,因为速度不是问题,因为你只导入/导出几次。
我想运行你的游戏在服务器上,只有坚持数据没有一个选项?否则,你只能让它“更难”作弊,但你永远无法完全防止它。如果您需要在用户拥有的设备上操作。 –
如何让它变得更难? –
混淆你的代码/保存文件。一个选项是“加密”保存文件并在代码中模糊密钥。加密可能是一个简单的XOR或转换。但是你不应该付出太多的努力,因为如果你的游戏变得流行起来,那么它就会被破解,破解者很可能会发布他们的作品,等等......代码混淆可以通过程序来完成,但这是最重要的可能是基于意见的问题。 –