2015-04-05 3 views
0

Рекорды в моей игре в настоящее время хранятся в SharedPreferences:SharedPreferences и обмана в Android игр

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
    <long name="level_1_score" value="1000" /> 
    <long name="level_2_score" value="1100" /> 
</map> 

Как это, счет можно манипулировать на укорененных устройств. (Файл xml вытаскивается на ПК, редактируется, а затем возвращается на устройство).

Каков наилучший способ предотвратить это?

+0

Почему вас беспокоит, если пользователь меняет свои собственные баллы на своем собственном устройстве? – CommonsWare

+0

Общий балл должен быть представлен публичным лидерам. Эта оценка вычисляется путем суммирования индивидуальных показателей уровня. – Pawel

+0

Тогда почему значение в 'SharedPreferences' является чем-то большим, чем локальный кеш данных, где система записи является сервером? – CommonsWare

ответ

1

Возможно, вы можете использовать sharedPreferences с MODE_PRIVATE, но если вы хотите убедиться, что можете использовать имена и значения хэша, а также добавить дополнительные неиспользуемые поля, чтобы определить, пытается ли кто-то изменить настройки, которые вы узнаете. например

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
    <long name="asdadadad" value="ASDASDASDAS" /> 
    <long name="asdadadadas" value="ADQOWI232DJQO1231" /> 
    <long name="level_1_score" value="1000" /> 
    <long name="level_2_score" value="1100" /> 
</map> 

Как вы уже назвали имена и ценности, вы получите изображение, подобное этому. когда вы расшифруете asdadadad, вы получите level_1_score, а когда вы расшифруете ASDASDASDAS, вы получите некоторое целое число (записано в строке). Если пользователь изменяет хеш, он может быть дешифрован как не целое значение (это не будет возможно разобрать на целое число)

Невозможно расшифровать без знания вашего хэширующего ключа, этот ключ будет сохранен как некоторое постоянное поле в вашей программы.

И вы можете сделать некоторые ловушечные поля, подобные этому, пользователь может подумать, что оценка имени xml равна level_1_score, но если пользователь меняет это, вы можете поймать пользователя для обмана. (Потому что он не используется)

2

Самый простой способ - использовать PreferenceObfuscator из библиотеки лицензирования приложений Google. Это можно побить, декомпилируя приложение, но барьер намного выше.

0

Да, даже в MODE_PRIVATE приложения с корневыми устройствами могут получить доступ к вашим общим префайлам. Хуже того, с тем же UID, что и общие привилегии вашего игрового приложения, можно редактировать.

Однако, почему бы вам не попробовать его шифровать !? ;)

Обязательно сохраните ключ на сервере.

+0

Если вы сохраняете ключ на сервере, вы должны указать https-соединение: D или пользователь может поймать трафик с помощью программы «wirehark», а не расшифровывать ее. Но кто это сделает за игру? O.o –

+0

Да, всегда есть способ. Но это защитит от большинства крекеров, поскольку ключ не будет жестко закодирован в коде. если кто-то получает руки на apk игры, они могут разворачивать классы и находить ключ. – Kay

+0

Да, самое лучшее, что вы можете сделать, это не дать пользователям легко взломать ваш код. –

Смежные вопросы