我正在用 swift 开发一个简单的游戏,但使用 GamePlayer(在 Cydia 上,一个类似 Cheat Engine 的游戏),我能够定位、跟踪和修改我的分数。
我想知道如何防止这种作弊...我尝试在元素发生变化时创建一个新实例,例如:
score = Int(score + 1)
我还尝试将 var 重置为 nil 并重新分配它:
let tmp = score + 1
score = nil
score = tmp
但是它不起作用...... 我的第一个问题是:是否可以在 swift 中更改变量的地址?它会阻止地址跟踪吗?
我的第二个问题是:另一件事可以工作,对我的分数进行编码,但是值得吗?
最佳答案
您可以将 score
变量放入 struct
中并使用写入时复制。然后,当您更改值时,您将获得分数
的新副本。此处通过示例描述了可能性以及写时复制的工作原理:copy-on-write
与实际加密数字的解决方案相比,它有优点也有缺点。只是我的一些想法(我很好奇你的观点是什么)
- 加密需要更多的 CPU 功率,因此需要更多的电池。尽管写时复制是在 iOS 级别深入实现的,但我们可以假设它已经得到了很好的优化。
- 写时复制解决方案不太安全,因为人们可能会在一开始就找到正确的地址并可以跟踪它(现在,我想了一下,不是真的......)
- 写入时复制会增加源代码的复杂性,因为您需要在每次更改时触发它。
关于Swift:防止玩家地址跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39317913/