C# 我可以在内存中搜索特定的对象结构吗?
昨晚我带着作弊引擎去兜风,在我目前玩的游戏中我发现了一个结构。游戏有4个字符,每个字符都有“健康”和“法力”,这两个字符都是4字节(整数)。是否有一种方法可以扫描应用程序以找到第一次出现的情况 我发现玩家1的生命值位于2DC2E72C,我将把它缩短为“72C”,因为其他玩家的生命值在这之后非常精确C# 我可以在内存中搜索特定的对象结构吗?,c#,memory,C#,Memory,昨晚我带着作弊引擎去兜风,在我目前玩的游戏中我发现了一个结构。游戏有4个字符,每个字符都有“健康”和“法力”,这两个字符都是4字节(整数)。是否有一种方法可以扫描应用程序以找到第一次出现的情况 我发现玩家1的生命值位于2DC2E72C,我将把它缩短为“72C”,因为其他玩家的生命值在这之后非常精确 玩家1生命值:72摄氏度 玩家2健康:81C 玩家3健康:90摄氏度 玩家4生命值:9FC 在使用我信任的microsoft计算器进行了一些手工操作之后,我发现每个玩家的健康状态之间有240字节。
- 玩家1生命值:72摄氏度
- 玩家2健康:81C
- 玩家3健康:90摄氏度
- 玩家4生命值:9FC
- 000玩家1健康
- 004玩家1法力
- 240玩家2健康
- 244玩家2法力
- 等等
所以我的问题是,我可以在应用程序内存中搜索这个模式吗?模式应该是这样的:2x4字节,240字节,2x4字节,240字节 如果有包含内存内容的文本文件,可以使用正则表达式搜索所需的模式。Boost有一个很好的正则表达式库。我认为不会有一种
管理的方法来实现这一点
然而,CheatEngine是一个开源程序,它也可以实现同样的功能
也许您可以查看源代码,找出哪些API调用需要使用C实现相同的功能#
更新:我明白了,你已经提到了作弊引擎,第一次就忽略了它。
我在CodeProject上找到了这篇文章
看起来很简单如果我没记错的话,那时候有一个叫免费奶酪的作弊程序。它的工作方式是这样的:
从用户输入中获取搜索值
扫描游戏的进程内存,寻找任何与用户输入匹配的值
存储找到地址
要求用户更改ingame和take的值
新值作为输入
从步骤2中重新扫描地址,并丢弃与新值不匹配的地址
重复步骤3和4,直到找到始终反映用户指定更改的地址(地址数)
向用户请求一个新值,并将该值写入找到的地址
第6步很棘手,因为您需要进行类型/大小检查,以确保可以实际应用新值
快乐欺骗:)