fps游戏中的瞄准机器人如何工作?


71

我很好奇,是否有人对在线FPS游戏(例如Counter-Strike)中的瞄准机器人有任何经验/知识。我很好奇,想了解更多有关光标如何知道如何锁定对面玩家的信息。显然,如果我想作弊,我可以去下载一些作弊,所以这更多的是学习。它涉及什么?他们是否钩住用户的鼠标/键盘以将光标移动到正确的位置?作弊应用程序如何知道确切指向光标的位置?作弊应用程序必须能够访问游戏应用程序中的数据,这是如何实现的?

编辑:sids答案,人们如何获得那些已知的内存位置来从中获取数据?EDIT2:可以说我使用调试程序或其他方法在位置0xbbbbbbbb处找到了一些想要的值。现在我该如何访问和使用存储在应用程序中该位置的数据,因为我不拥有该内存,而游戏却拥有。还是因为我已经注入到进程中并可以使用memcpy或其他东西复制该地址处的内存,所以现在可以访问它了?

还有其他人要补充吗?尝试尽可能多地了解这一点!

Answers:


76

游戏记忆中的某个位置是每个玩家的X,Y和Z位置。游戏需要知道此信息,以便知道在何处渲染玩家的模型等等(尽管您可以通过仅向玩家发送视野内的玩家信息来限制游戏客户端可以知道的数量)。

瞄准机器人可以扫描已知的内存位置以获取此信息并将其读出,从而使它可以访问两个位置-玩家和敌人。将两个位置相减(作为矢量)可得到两个之间的矢量,从那里很容易计算出玩家当前外观矢量与所需角度矢量之间的角度。

通过将输入直接发送到游戏(这是微不足道的)并使用一些常量进行微调,您可以使其很快自动瞄准。这个过程中最困难的部分是确定位置在内存中的存储位置,并调整任何动态数据结构来移动玩家(例如平截锥体剔除)。

请注意,使用地址随机化时,虽然并非不可能,但很难编写这些代码。

编辑:如果您想知道程序如何访问其他程序的内存,通常的方法是通过DLL注入

编辑:由于这仍然很受欢迎,因此有更多的方式使瞄准机器人工作,现在更加流行;即覆盖(或就地修补)Direct3D或OpenGL DLL,并检查函数调用以绘制几何图形并插入您自己的几何图形(用于诸如墙砍的事情)或获取目标机器人的模型位置。


因此,有人使用DLL注入,现在他们到底如何知道要访问,尝试和错误处理的内存,直到找到所需的内容为止?
user105033

11
使用内存读取器/扫描器,附加调试器,使用特殊构建的工具或许多其他技巧,您可以在更改过程内存时观察进程内存中的值,并暂停执行以检查正在执行的实际代码。通常,要查找特定地址,您可以对进程内存进行快照,操作要读取的一个变量(例如移动播放器),对内存进行另一快照并查看已更改的值。
罗恩·沃霍里克

您不需要DLL注入来访问程序存储器。DLL注入用于在与目标进程相同的地址空间中执行代码。然后,您可以使用它来调用该进程内部的函数或捕获某些调用。
mmcdole

但是,是否可能需要从它的地址空间内部写入/读取进程的内存,因为这可能会阻止其他程序这样做呢?
user105033

2
@MichaelPankov与某些同事交谈后,我没有作弊,但看起来,只要您获得足够的特权,您仍然可以在另一个进程中访问内存。获得它们只是需要启动带有令牌集的过程,并让用户(运行作弊程序)进行确认。参见msdn.microsoft.com/en-us/library/windows/desktop/…–
罗恩·沃霍尔奇

13

有趣的问题-并非完全是您的答案,但我记得Counter-Strike的早期人们曾经用一个有残缺的代替他们的opengl32.dll,使多边形变得透明,因此他们可以透过墙壁看到。

骇客得到了改善,变得越来越烦人,人们也变得更有创造力。现在,Valve / Steam似乎在移除它们方面做得很好。如果您打算使用这些东西,请稍加警告,Steam会扫描“黑客”,如果发现任何“黑客”,它们将永久禁止您


我已经在他们的论坛上查询了。它曾经是一年,然后是现在永久的一年。

前一段时间写了其中之一。有白墙+ wh +基本的线框覆盖以增加可见性:)而且,如果您替换系统的opengl32.dll,steam仍然无法检测到它
toster-cx

10

许多“目标机器人”根本不是针对机器人,而是触发机器人。它们是后台进程,等待您的标线实际上超过目标并自动触发。这可以通过许多不同的方式来完成,但是许多游戏都可以通过在目标越过目标时显示某人的名字或触发机器人可以指出的内存中的其他数据来简化此操作。

这样,您通过向目标挥动鼠标进行游戏,一旦将鼠标悬停在目标上,它便会触发射击,而无需您实际射击自己。

他们仍然必须能够查明内存中的此类内容,并具有与“目标机器人”更真实的类型的问题。


1
这就解释了为什么我看到一些瞄准机器人只是很快地随机晃动光标,必须寻找弹出的名称以便知道何时触发的情况
user105033

4
否...屏幕抖动是由“ NoSpread”黑客造成的。NoSpread包含从游戏的“子弹散布随机化器”中读取并立即进行补偿。这意味着子弹将始终正确地指向黑客瞄准的位置,并且“没有扩散”(因此,黑客的名字)。同样,也有“ NoRecoil”攻击,可以补偿,或者最近可以使枪支后退(实际上用“什么都不做”代码覆盖游戏的后座力代码),保持子弹的扩散,但使瞄准更加容易。
XenoRo

10

过去使用的另一种方法是对网络数据包格式进行反向工程。数据包流的中间人攻击(可以在与游戏运行相同的系统上完成)可以提供玩家位置和其他有用的相关信息。伪造的数据包可以发送到服务器以移动玩家,射击或根据游戏进行各种操作。


5

在这里查看Fleep的教程系列。他的完整注释的C#源代码可在此处下载。

简而言之:
查找玩家的xyz坐标,光标xy坐标以及所有敌人的xyz坐标。计算您与最近的敌人之间的距离。现在,您可以计算获得自动瞄准所需的xy光标坐标。

或者,您可以排除已经死亡(健康值为0)的敌人,因此在这种情况下,您还需要找到敌人的健康地址。与玩家相关的数据通常在内存中彼此接近。

同样,请查看源代码以详细了解所有这些工作原理。


4

编辑:我知道这个题外话,对不起,但我认为这会帮助提出要求。

黑客行业尚未尝试过但我一直在尝试的事情是套接字劫持。听起来可能比实际的要多得多,但是基本上,它使用WinPCap驱动程序通过TCP(套接字)连接到进程的Internet连接,甚至没有接近进程的偏移量。

然后,您仅需学习TCP信号的传输方式,并将其存储到哈希表或Multiplayer(Packet)类中。然后,在检索信息并将信息覆盖在窗口上(而不是钩住)之后,只需在窗口游戏的屏幕上放置透明标签和2D框即可。

我已经在《使命召唤4》中对其进行了测试,并且已经通过TCP获得了4个玩家的位置,但是正如罗恩·沃霍里奇(Ron Warholic)所说的那样:如果游戏开发人员只编写了一个游戏服务器,所有的黑客攻击方法都将失效。当前用户看到播放器时输出播放器。

并且在切断了该播放器的位置(如XYZ)之后,该播放器的位置将不再存储且不再渲染以停止wallhack。瞄准机器人会在某种程度上延误工作,但效率会降低。因此,无论如何,如果您打算制作墙面黑客,请不要参与该过程,尝试学习WinPCap并加入Internet信号。至于游戏,请不要搜索互联网传输的进程列表。如果您需要利用该示例的示例,请搜索Rust Radar,它输出玩家在地图上的位置,并输出您周围其他通过Internet传输TCP发送且未与游戏挂钩的玩家。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.