我正在为一个游戏编写一个C++ WinAPI DLL,它包含一个小的反欺骗函数,但是如果有人决定使用NOP (0x90)整个反作弊(我不是逆向工程中的专家,但我确信这是可能的),它可以很容易地被绕过。
是否要阻止修改我的DLL?
发布于 2013-08-19 12:20:54
即使你可以阻止人们修改你的DLL,也没有什么能阻止某人用他们自己的版本来替换你的DLL,这个版本在你的.exe可以确定的所有方面都和你的一样,但是在某些特定的方面做了一些不同的事情--除非你在.exe中也保留了DLL的整个副本。
把时间和精力花在让自己很难作弊上比很难改变.dll要好。例如,我们有一个Pac-Man游戏(因为大多数人都熟悉它),那么我们可以发送号码(和位置?)在路上吃了那么多“白药丸”,以及到达那里所花的时间。如果游戏编辑.dll给每个白药丸10倍的分数,或者编辑游戏使Pac-Man移动速度快10倍,你可以验证它是不正确的,因为在每个级别你都知道Pac-Man移动的速度和每个白药丸Pac-Man应该得到多少分。玩家被杀死的次数,这类信息也可以包含在发送给服务器的信息中。
类似的原则也适用于“射击游戏”,或者是依赖于买卖东西的游戏,或者其他的游戏。如果你有一个详细的记录,玩家做了什么来获得分数,你可以验证“这是可能的”或“这是不可能的,因为你不能从击落10艘宇宙飞船在1秒内获得这个分数,因为一艘宇宙飞船需要10次命中,每轮发射需要1秒”。
发布于 2013-08-19 11:55:39
我想说的是,你最好把任何反欺骗功能转移到服务器端,或者如果它不是一个多人游戏,那就不要费心去阻止作弊了。
不过,您可以做的一件事是生成DLL的散列,并根据已知值或服务或网站在应用程序代码中检查它。您还可以将文件的哈希值用于其他一些任务,并在本质上迫使黑客大量修改游戏代码,而不仅仅是防欺骗功能。这可能会吓退人们。
但是这些评论是正确的,只要有足够的时间和资源,任何事情都是可以破解的,你只需要让它不值得花时间。
https://stackoverflow.com/questions/18312800
复制相似问题