帮助找到游戏的特定功能

逆向工程 ollydbg
2021-06-27 15:38:01

在玩弄指针之后,我试图获取游戏中特定函数的地址。此功能将玩家输入打印到屏幕上,并将其广播给所有在线玩家,因为它是一款多人游戏。可以说这是一场聊天。

我真的不知道如何找到地址,因为我没有真正的切入点。任何线索都非常感谢。

我的目标是在一个简单的 Dll 中调用这个聊天功能。

如果这很重要,我正在使用 OllyDbg。

2个回答

通常的做法是:

  1. 开始输入您想说的内容,但不要提交。使用 Cheat Engine 对您输入的字符串执行内存扫描。找到后,设置只读 HWBP,然后提交聊天。聊天功能应该读取保存聊天字符串的内存,从而触发 BP。

  2. Hookstrcpy()和相关函数,将参数与您将在聊天中输入的内容进行比较。这不太可能成功,因为聊天函数中的字符串复制代码很可能是内联的。

  3. 挂钩游戏用于将您的聊天实际发送到服务器/其他玩家的功能。这有可能是你的游戏可以发送聊天信息包的未加密的,在这种情况下,你可以简单地钩send()/ sendto()/WSAsend()strstr()发送缓冲区。但是,如果游戏是 MMO,它肯定会加密所有数据包。在这种情况下,您需要在加密发生之前拦截所述数据包。一些游戏将实现一个相当简单的函数,其参数类似于send(),它将简单地加密发送缓冲区并将所有内容传递给send()其他游戏可能有一个循环,它从一些内部缓冲区读取未加密的发送数据包,并在将它们传递到send(). 你通常可以通过从send()/回溯来找到这个发送函数/循环sendto()/ WSAsend(). 一旦你钩住了这个函数/循环,你就可以应用一种在游戏漏洞利用领域通常被称为“数据包编辑”的方法。只需滚动一个 GUI 来输出所有通过的数据包,并将您的聊天活动的时间与您在 GUI 中看到的数据包相匹配。一旦您确定哪些数据包与您的聊天相对应,您只需从对这些数据包的调用中回溯即可,最终您将使用聊天功能。

user3262342 给出了很好的答案;您还可以尝试在以下常见的文本绘制函数上设置断点,然后查看调用堆栈以查看程序中的哪个函数绘制了文本: