2016-09-04 2 views
0

Я разрабатываю простую игру быстро, но используя GamePlayer (на Cydia, cheat-engine), я могу найти, отслеживать и изменять свой счет.Swift: предотвращение отслеживания адресного геймплея

мне было интересно, как я могу предотвратить такого рода обманов ... Я попытался создать новый экземпляр элемента всякий раз, когда он изменяется, например:

score = Int(score + 1) 

Я также попытался сбросить вар к нулю и повторно назначить его:

let tmp = score + 1 
score = nil 
score = tmp 

Но это не работает ... Мой первый вопрос: можно ли изменить адрес переменной в стрижа? И предотвратит ли отслеживание адресов?

Мой второй вопрос: Еще одна вещь, которая может работать, кодируя мой результат, но стоит ли работать?

+1

Обычно «безопасность по неизвестности» не работает вообще. Но здесь это может помочь. Классический трюк - создать уникальный ключ для каждой игры. Не изменяйте переменную счетчика напрямую, используйте выделенный метод для этого, где вы * также * udpate закрытая переменная, в которой вы храните счет, умноженный на этот секретный ключ (или бит-сдвиг, или стробированный и искаженный, или что-то еще). Когда вы читаете переменную оценки, всегда сравнивайте ее со своей секретной копией, выполняя обратную операцию. Если оценка была смягчена во время выполнения, вы это узнаете, потому что секретная переменная больше не будет синхронизироваться. – Moritz

+0

Хорошо, я понимаю, что вы имеете в виду, и это можно реализовать довольно быстро! Но только для моих общих знаний, знаете ли вы, можно ли изменить адрес переменной в swift? – Dliix

ответ

0

Вы можете ввести переменную score в struct и использовать copy-on-write. Затем, когда вы меняете значение, вы получаете новую копию score. Возможности и способы работы с копиями на запись описаны здесь с примерами: copy-on-write

По сравнению с решением, действительно ли вы шифровали число, имеющее преимущества и недостатки. Только некоторые из них с головы до головы (мне любопытно, каковы ваши очки)

  • Для шифрования требуется больше энергии процессора и, следовательно, больше батареи. В то время как копирование на запись реализовано на уровне iOS на глубине, где мы можем предположить, что он очень хорошо оптимизирован.
  • Решение для копирования на запись менее безопасно, так как можно найти правильный адрес в самом начале и можно отслеживать его (теперь, я думаю об этом, не совсем ...)
  • Копирование- on-write добавляет больше сложности к исходному коду, поскольку вам нужно запускать его при каждом изменении.
Смежные вопросы