2

在我的应用程序(unity5,il2cpp build)中,有一个类似的功能

“获取分数()”

不幸的是,我在黑市上发现了我的应用程序的黑客版本。该破解版本的“GetScore()”函数总是返回 100。原始返回值必须小于 10。

我猜这个被黑的应用程序是通过使用类似“il2cppDumper”并将我的返回值更改为 100 重新打包的;

有没有办法防止这个问题?

4

2 回答 2

0

安全始终是让黑客更难的问题 - 你永远无法让他们无法篡改。

所以这里有一些想法:

  • 混淆:GetScore()获取BananaJungle()- 黑客在不单步执行源代码数小时(希望如此)的情况下无法找到正确的功能
  • 在多个点上验证分数:函数调用GetScore()应该进行完整性检查:“它是否低于 10?”
  • 除此之外:您可能希望忽略 10 以上的分数以欺骗他成功的黑客。您可以在 2 小时左右后锁定应用程序。
  • 在某处添加一个记录分数历史记录的 ScoreLogger,因此getScore()可能返回值 <10,但有人可能只是将代码中的分数覆盖为 999999。ScoreLogger 将检查分数历史记录是否有跳跃等。
  • 用总游戏时间验证分数(大约)
于 2018-11-12T09:03:45.040 回答
0

你永远不会阻止黑客入侵你的游戏,即使它确实有一个后备服务器。看看所有非官方的魔兽世界服务器。如果你有一个服务器,你可以保证事情相对安全,你保证它的源代码安全,并且你的游戏没有服务器就毫无意义(想想没有多人游戏功能的 Dota 2 ......)。即便如此,你也无法真正验证玩家的一举一动,除非它是一款回合制游戏,并且你实际上将每一步都发送到服务器以进行处理(例如,这在《炉石传说》中有效,但在《魔兽世界》中则不然,因此所有的反-作弊工具)。EA做不到,Rockstar做不到,Activision做不到,再强大的Denuvo也做不到,你当然做不到。

但是,您应该停下来问问自己,为什么您希望您的游戏如此安全。在你阻止的每 1000 个作弊者中,可能会有一两个人真正付钱。您应该在安全方面付出适度的努力(接受 KYL3R 的建议),只是为了让诚实的人保持诚实。不诚实的人总会找到办法,所以不要太担心他们,以至于你最终会浪费时间在(无用的)安全上;你可以花时间让你的游戏变得更好。

哦,顺便说一句,这也是阻止黑客入侵的一种方法:频繁更新游戏。他们没有生命,但他们没有足够的时间每周继续制作市场上每款游戏的黑客版本。

于 2018-11-13T04:04:51.507 回答