我计划为游戏编写一个自动机器人.
棘手的部分是弄清楚他们如何编码他们的协议......为了使机器人易于运行,只需让角色运行并记录它在wireshark中的作用.然而,解释环境更加困难......如果你闲置,它每秒收到大约5个数据包,因此有很多装饰.
我的计划:因为游戏是在TCP下运行的,所以我将使用freecap(http://www.freecap.ru/eng)强制游戏连接到我机器上运行的代理.我将需要此代理能够进行数据包注入,或者可能需要能够重新发送捕获的数据包的服务器.通过这种方式,我可以重新创建并修改服务器发送的内容,并了解其协议编码.
有谁知道我在哪里可以获得允许数据包注入的代理或我可以执行数据包注入的地方(不是通过硬件,如无线或任何东西的情况!)
在哪里可以找到重新发送捕获的数据包的服务器/代理(即:重放连接).
任何更好的模式匹配工具或方法?可以突出显示来自多个消息的模式的东西将是伟大的.
或者,有没有更好的方法来破译这里?可能是一种解决策略(通过挂钩winsock函数并从那里开始反汇编)?我之前没有这样做,所以我不确定.或者,还有其他想法吗?
网络流量拦截和协议分析通常是在这里实现目标的不太受欢迎的方法.对于大多数现代游戏来说,加密是一个严重的因素,并且对于最常见的游戏场景中的任何微不足道的因素,协议分析都存在严重的问题.
您尝试做的大多数现代实现都依赖于读取和操作正在运行的客户端的内存空间和进程.客户端已经为您完成了所有硬件部分,包括解密流量并将其分类为更易于阅读的数据结构.为了与服务器交互,您可以调用内置于客户端的函数,而不是从头开始制作整个系列的数据包.这种方法的优点是你必须做很少的工作来解释数据和产生活动.减号是网络流量中经常有一些数据对机器人有用但被客户端丢弃,或者你可能想要将流量发送到客户端无法生成的服务器(在我自己的井中) - 这样的开发层次结构,是"欺骗"的更远的几步
*...我说这已经看到大多数MMORPG僵尸/黑客社区从ShowEQ和Odin's Eye/Excalibur等网络协议分析器发展到基于内存的应用程序,如MacroQuest和InnerSpace.在这方面,InnerSpace为您正在尝试的基于内存/流程的变体提供了一个出色的可扩展框架,如果您放弃网络分析方法,您应该将其视为项目的基础.
因为我过去做了几个游戏机器人(为了好玩,当然没有利润或悲伤 - 写游戏机器人很有趣),我推荐以下内容:
如果您可以编码并且没有作弊保护阻止您这样做,我强烈建议您编写注入的DLL,原因如下:
您的DLL将能够直接访问游戏的内存空间,一旦您对数据结构进行反向工程(通过内存或代码反汇编),您就可以访问大量数据.这也将允许您绕过游戏可能具有的任何网络加密.直接访问进程内存的缺点是版本之间的偏移和数据结构会发生变化 - 但是,数据结构在稳定游戏中不会经常发生变化,您可以通过搜索代码模式而不是使用固定偏移来补偿偏移量变化.
无论哪种方式,你仍然可以使用API钩子钩住WinSock函数(查看Microsoft Detours和优秀但现在商业化的madCodeHook).
否则,我只能建议你试试像WPE Pro这样的实时/交互式数据包编辑器.
在大多数情况下,最酷的方法(代码逆向工程和直接内存访问)往往效率最低.他们需要很多技能(理解代码)和时间,最初(通过所有代码和开发代码与数据结构交互)和维护(如果游戏正在更新).(当然,他们有时会允许做一些与官方客户无关的很酷的东西,但大多数时候这显然是明显的作弊,并且很可能很快吸引GM).大多数时候机器人是通过用纯色替换游戏图形/纹理,并创建简单的"像素"机器人,在屏幕上搜索某些颜色并做出相应的反应(例如点击它们).
希望这会有所帮助,并且记住 - 作弊只会让游戏不那么有趣;)