第一,
我想指出,我知道从客户端发送的任何信息都不能被信任,因为它可以被欺骗。我感兴趣的安全方法,通过默默无闻,以阻止99.9%的潜在骗子和能力,检测程序,确实绕过安全的实时。
我对此有一些想法,包括验证它所保护的游戏的文件和内存校验和,以及允许客户端根据来自服务器的请求(通过TCP)扫描任何潜在的欺骗应用程序,以检测内存注入欺骗和或欺骗内存占用。因此,旁路攻击必须侦听在SSL上发送给它的所有TCP信息,然后通过分解加密/解密函数来解除消息的加密,以了解它想要什么。类似地,客户端本身可能是自我更改的,允许它随意添加/删除特性(但要保留在服务器上),这样欺骗就很难学会如何绕过它。这可能是毫无意义的?
我只觉得这对更有经验的人来说是相当困难的,所以我对其他可能很难绕过的方法持开放态度。
我只对可能的实现感兴趣,而不是因为客户端的反欺骗是不可能的,我只想让它变得非常困难。
增加了“我的世界”和“java标签”,这是针对“我的世界”的,我知道这个社区足够大,有人可能会打败我的系统,但我希望通过不断的更新和改变,我可以通过聪明才智和毅力打败他们。
编辑:我发现了这篇文章:How to prevent cheating in our (multiplayer) games?和我正在添加他的建议,这样我就不会重复一些事情,因为我正在寻找比显而易见的更多的想法(我不确定他的建议是否可以绕过)
1)打开所有其他进程,并将它们的WriteProcessMemory函数挂钩,使它们不能写入游戏过程中的内存。做的正确,这一步将阻止90%的作弊和欺骗引擎。 2)做同样的事情,连接各种鼠标和键盘仿真功能。这将防止许多目标机器人和其他类型的自动化机器人。 3)在游戏本身的过程中加入VirtualProtectEx/VirtualAllocEx/etc功能,并监视哪些模块正在改变保护级别或分配新的内存块。当你的游戏做了大量的分配时,你必须对此机灵,以防止它过于密集,但它是可以做到的。 4)连接到LoadLibrary函数中,监视动态加载的DLL,防止DLL注入。 5)在游戏连接上使用一些轻量级的多态编码。 6)使用一些反调试技术来防止调试器附加到进程。谷歌反调试,你应该能够找到很多东西。 7)使用一个定制的专用PE封隔器,以防止您的游戏有用的拆卸。 8)连接到您的OpenGL或Direct3D函数和方法中,这些函数和方法处理透明度和α混合。 9)如果使用着色器,请检查您的着色器和着色器常量值。 10)对玩家角色使用额外的遮挡剔除技术,以防止他们在视线被其他几何图形阻塞时被渲染。它可能会或可能无助于你的表现,但它将防止许多壁虎。
发布于 2012-12-11 19:14:21
如果你希望你的客户尊重你和游戏,你应该尊重你的客户,并意识到你所看到的游戏客户端机器可能被用来存储有价值的信息。
允许客户端扫描服务器随机分配的内存的任何部分。 客户端本身可能是自更改的,允许它随意添加/删除特性。
小心别把攻击向量打开到客户端机器上。阅读“任意部分的记忆”听起来很可怕。您可以通过散列(而不是小)内存块和检查已知值来减少这种情况。
让服务器发送“随机”代码可能会使您的软件看起来像反病毒/安全工具的病毒/僵尸网络。它还为客户端提供了潜在的开发机会。
更新:
1)打开所有其他进程,并挂起它们的WriteProcessMemory函数
如果您这样做,并且在注入的代码中有一个bug,您可能会破坏客户的整个机器的稳定。这看起来很有侵略性。您运行的是哪个版本的Windows?什么许可?我非常肯定,破解者可以安排从一个您没有权限挂钩的进程(就像运行在正常用户进程中的管理进程)运行他的漏洞。此外,出于明显的原因,您还需要挂起GetProcAddress。
4)连接到LoadLibrary函数中,监视动态加载的DLL,防止DLL注入。
这个并不像听起来那么糟糕,因为您只需要在本地过程中这样做。
6)使用一些反调试技术来防止调试器附加到进程。
当然值得去做(如果你有时间的话),但对于一个有经验的黑客来说,这只是一个减速带而已。记住,他总是可以从启动时跟踪您的代码,并观察或绕过您的反调试。(这需要时间,但有些饼干喜欢这样。)
7)使用一个定制的专用PE封隔器,以防止您的游戏有用的拆卸。
这是另一个会引起你注意的反病毒软件。
发布于 2012-12-11 19:10:12
我个人认为观察记忆是没有意义的,等等。我可以想象,当有人实现协议时,您也需要处理它,并且可能会让您的服务器崩溃。
但你是对的,这是有可能检查内存的坏软件,这是典型的骗子使用,如壁虎在电子游戏。
IMHO您需要检查来自客户端的数据是否有效并做出反应,而不是欺骗。
关于您的最新情况:
请不要挂钩所有其他的程序,这是有点疯狂,而且它也可能让您的程序被检测为根工具包或类似的东西。
发布于 2012-12-22 04:43:14
我完全同意这里的其他人所说的--其中一些(打开所有其他进程并连接WriteProcessMemory、鼠标/键盘仿真功能)是疯狂和可笑的--尤其是因为用户可以通过放弃进程的特权来绕过这一点。这样做肯定会激起一些用户的愤怒。
但是如果你真的想全力以赴做一些疯狂的事情,比如恶意软件,为什么不编写一个内核驱动程序来修补受保护的标志(用于Windows及以后版本)或修补OpenProcess呢?后者是一种更常见的方法(在AV软件和恶意软件中见过);前者不太常见,但仍然可行--如果您可以加载KMD,则可以修补标志并绕过Microsoft的签名要求。
https://stackoverflow.com/questions/13826786
复制相似问题