如果有人对在线FPS游戏中的目标机器人有任何经验/知识,比如Counter-Strike,我很好奇.我很好奇,想了解更多关于光标如何知道如何锁定对方玩家的信息.显然,如果我想作弊,我可以下载一些作弊,所以这更像是一个学习的东西.什么都参与其中?他们是否挂钩用户鼠标/键盘以将光标移动到正确的位置?作弊应用程序如何知道准确指向光标的位置?作弊应用程序必须能够访问游戏应用程序中的数据,这是如何实现的?
编辑:对于sids回答,人们如何获取那些已知的内存位置来从中获取数据?EDIT2:假设我使用调试程序或其他方法在位置0xbbbbbbbb找到了我想要的一些值.我现在如何访问和使用存储在应用程序内该位置的数据,因为我没有拥有该内存,游戏就是这样.或者我现在可以访问它,因为我注入了进程并且可以使用memcpy或其他东西复制该地址的内存?
其他人有什么要补充的吗?尽可能多地了解这一点!
游戏记忆中的某个位置是每个玩家的X,Y和Z位置.游戏需要知道这些信息,因此它知道在哪里渲染玩家的模型等等(尽管你可以通过仅向玩家发送玩家信息来限制游戏客户可以知道多少).
一个目标机器人可以扫描已知的存储位置以获取此信息并将其读出,使其可以访问两个位置 - 玩家和敌人.减去两个位置(作为矢量)给出两者之间的矢量,并且从那里简单地计算从玩家的当前外观矢量到期望角度矢量的角度.
通过直接向游戏发送输入(这是微不足道的)并使用一些常量进行微调,您可以让它自动快速瞄准.这个过程中最难的部分是确定位置存储在内存中的位置,并调整任何动态数据结构,让玩家在你周围移动(例如视锥体剔除).
注意,当使用地址随机化时,这些更难写,尽管并非不可能.
编辑:如果您想知道程序如何访问其他程序内存,那么典型的方法是通过DLL注入.
编辑:由于这仍然有一些点击,有更多的方法,目标机器人现在更受欢迎; 即直接覆盖(或就地修补)Direct3D或OpenGL DLL并检查函数调用以绘制几何图形并插入自己的几何图形(用于墙壁黑客)或获取目标机器人的模型位置.
有趣的问题 - 不完全是你的答案,但我记得在反恐精英的早期人们过去常常用拙劣的一个替换他们的opengl32.dll,这会使多边形变得透明,这样他们就能透过墙壁看到.
黑客攻击得到改善,变得更加烦人,人们变得更有创意.现在Valve/Steam似乎在去除它们方面做得很好.如果您打算玩这些东西,只需要一点警告,Steam会扫描"黑客",如果找到任何东西,他们会永久禁止你
很多"目标机器人"根本不是瞄准机器人,而是触发机器人.它们是后台进程,等待您的标线实际超过目标并自动触发.这可以通过多种不同的方式实现,但是许多游戏通过在目标覆盖它们时显示某人的名字或者触发机器人可以指向的内存中的某些其他数据来轻松实现.
通过这种方式,您可以通过向目标挥动鼠标进行游戏,只要将鼠标放在目标上,它就会触发一次射击而无需实际射击.
他们仍然必须能够在内存中找到那种东西,并且具有与"Aim bot"相同的问题.
过去使用的另一种方法是对网络数据包格式化进行反向工程.对数据包流的中间人攻击(可以在游戏运行的同一系统上完成)可以提供玩家位置和其他有用的相关信息.伪造的包可以被发送到服务器以移动玩家,射击或根据游戏做各种各样的事情.
在这里查看Fleep的教程系列。他的完整注释的C#源代码可在此处下载。
简而言之:
查找玩家的xyz坐标,光标xy坐标以及所有敌人的xyz坐标。计算您与最近的敌人之间的距离。现在,您可以计算获得自动瞄准所需的xy光标坐标。
另外,您可以排除已经死亡(健康值为0)的敌人,因此在这种情况下,您还需要找到敌人的健康地址。与玩家相关的数据通常在内存中彼此接近。
同样,请查看源代码以详细了解所有这些工作原理。