让我们举一个在 IT 界众所周知的例子:
我们有一个游戏,例如纸牌,有人为它制作并发布了一个训练器,你的动作总是“0”。
如何以编程方式确定“hack”更改的地址和值?
如果可能的话,最好的方法是什么?
- 从游戏中[注入/加载我自己的 dll?]
- 通过用我自己的进程拦截黑客和目标进程之间的流量?
我问这个问题是因为两件事:
你不能。一些失败的尝试可能是设置两个地址,然后比较它们(尽管他们会找到另一个地址)。或者他们可以简单地删除您的比较电话。
他们可以更改您用来“以编程方式确定”的任何保护功能,以始终返回错误结果。他们可以对你的可执行文件做任何事情,所以没有办法。
除非您挂钩打开进程以修改内存的内核函数。但这也是易碎的,如果我没记错的话,你现在需要对你的“保护内核驱动程序”进行数字签名。
还有另一种方法,您可以在每个正在运行和新生成的进程中加载 DLL(这可能会警告防病毒程序您的程序是病毒),使用该 DLL 挂钩 OpenProcess(如果还有其他替代方案,也可以)每个进程中的函数并检查它是否针对您的程序,如果是,则阻止它。搜索函数挂钩。我相信有一种叫做“MS Detour”的东西。
而且,游戏甚至不会接近安全。
综上所述,在本地保护你的游戏是没有办法的。如果您要存储分数或其他东西,您应该创建一个服务器程序,客户端应该向服务器报告每一次移动。
即使这样,他们也可以创建一个机器人来自动响应服务器。那么你能做的最好的事情就是以某种方式验证它是一个人在玩。(也许是验证码或将解决速度与人类平均值进行比较?)