Недавно у меня были проблемы с людьми, обманывающими использование приложения для пользователей root под названием Gamecih. Пользователи Gamecih позволяют пользователям приостанавливать игры и изменять переменные во время выполнения.Обфускать исходный код с помощью ProGuard
Если я запутываю свой код, мне будет сложно, чтобы читеры знали, какие переменные меняются во время выполнения, но я также беспокоюсь, что это может вызвать некоторые другие проблемы.
Я сериализую игровые объекты, используя интерфейс Javas Serializable, а затем записываю их в файл. Теперь предположим, что я сериализую объект класса «Player». Он становится сериализованным и сохраняется в файле. Затем пользователь загружает обновление с помощью реализации Proguard. Proguard переименует имена классов и классов. Не будет ли причиной серьезных ошибок при попытке чтения в уже сохраненном объекте Player?
Если бы я еще не начал свою игру, это не было бы проблемой. Но теперь некоторые игроки играют в одной и той же сохраненной игре (это RPG) в течение нескольких месяцев. Они были бы очень разозлены, если бы они загрузили обновление и должны были начать с нуля.
Я знаю, что могу поручить Proguard не запутывать определенные классы, но это класс Player, который мне действительно нужно запутывать.
Разъяснение: Допустим, у меня есть следующий простой unobfuscated класс:
public class Player {
private int gold;
private String name;
//Lots more.
public Player(String name)
{
this.name = name;
}
public int getGold() {
return gold;
}
public void setGold(int gold) {
this.gold = gold;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Игрок создан, сериализованная и сохранены в файл. После того, как я реализую обфускатор, это может выглядеть следующим образом:
public class Axynasf {
private int akdmakn;
private String anxcmjna;
public Axynasf(String adna)
{
anxcmjna=adna;
}
public int getAkdmakn() {
return akdmakn;
}
public void setAkdmakn(int akdmakn) {
this.akdmakn = akdmakn;
}
public String getAnxcmjna() {
return anxcmjna;
}
public void setAnxcmjna(String anxcmjna) {
this.anxcmjna = anxcmjna;
}
}
Представьте себе, что я после обновления теперь и игрок, который имеет unobfuscated версия проигрывателя загружает это обновление. При попытке прочитать этот объект будут разные имена участников и другое имя класса. Скорее всего, я получу ClassCastException или что-то в этом роде.
Оффтопик, но почему? Если некоторые геймеры хотят играть в мошенничество, пусть они, это не так, как если бы они повлияли на вас или других. – SJuan76
@ SJuan76: Потому что у меня есть глобальные списки рекордов и пвп-битвы. – Emiam
Немного больше deatil об игре было бы полезно. Также я не совсем понимаю, что вы делаете на стороне клиента, что может вызвать проблему? –