Assembly 在二进制文件中修改游戏设置

Assembly 在二进制文件中修改游戏设置,assembly,binary,hex,Assembly,Binary,Hex,(我问了这个关于游戏的问题,但被关闭了,ppl建议我问Stackoverflow。如果这个问题不适合这里,请在关闭它之前建议一个更好的地方。谢谢。) 在游戏中作弊的一个常用方法是使用内存扫描工具来跟踪您想要更改的值。然而,另一种常见的欺骗方式是修改二进制文件 例如,在一个游戏中,当你杀死一个敌人时,你会得到+5exp。通过将二进制存储的5更改为50,你可以得到+50exp。据我所知,许多iPhone游戏作弊都是这样做的,这需要你修补二进制文件或使用十六进制编辑器 我对那些黑客如何定位这些设置感兴

(我问了这个关于游戏的问题,但被关闭了,ppl建议我问Stackoverflow。如果这个问题不适合这里,请在关闭它之前建议一个更好的地方。谢谢。)

在游戏中作弊的一个常用方法是使用内存扫描工具来跟踪您想要更改的值。然而,另一种常见的欺骗方式是修改二进制文件

例如,在一个游戏中,当你杀死一个敌人时,你会得到
+5
exp。通过将二进制存储的5更改为50,你可以得到
+50
exp。据我所知,许多iPhone游戏作弊都是这样做的,这需要你修补二进制文件或使用十六进制编辑器


我对那些黑客如何定位这些设置感兴趣找出特定值所在的二进制文件和相应偏移量的一般方法/工具是什么?如果它是一个非常唯一的数字或ascii字符串,如
3219
google.com
,您可以只搜索十六进制值,但如果它是一个公共值,比如1?

你可以分解游戏的可执行文件,这样你原则上就可以知道每个内存位置的功能。对于大多数游戏来说,这可能并不实用

另外两种更直接针对特定值的方法:

  • 在获得经验之前,使用调试器暂停游戏,并逐步完成代码,查看哪些内存位置受到影响
  • 虽然肯定会有许多位置包含与您的体验相同的数字,但您可以快速缩小它们的范围:假设您有50个EXP,转储所有内存位置的列表*包含50个EXP,然后获得更多EXP(例如20),现在您可以排除所有未更改为70的位置

*您可能正在搜索32/64位整数,而不是单字节位置。

尝试通过反复试验确定文件格式。程序员通常不会故意让事情变得困难,除非游戏是MMO或大型大片,容易作弊。如果你正在玩一款游戏,它能让你获得杀死蛞蝓的经验,以下是一些基本步骤:

  • 找到“Monster”文件或数据库表。这包含所有怪物的信息
  • 搜索一些已知信息。在这种情况下,怪物的名字是“鼻涕虫”
  • 使用十六进制编辑器检查怪物名称附近的字节。查找包含值“50”的双字、字或字节
  • 将50更改为51并保存更改。杀死一个“Slug”,看看exp是否改变了
  • 如果你仍然得到50经验,尝试一些其他值附近的“Slug”和重复

  • 只要有足够的时间和耐心,您最终将了解整个文件格式,并能够随意更改任何内容。

    这将是我最初提到的内存扫描工具。我知道如何在内存中查找地址。但我真正想要的是修改二进制文件,而不是内存中加载的值。哦,对不起,误读。但您可以使用完全相同的技术:保存游戏、获得EXP、再次保存、与旧的savegame进行比较(diff)并查看发生了什么变化。当您找到内存位置以及当时正在执行的代码时,您可以向后转换到二进制文件中,以查找该指令序列或偏移量。二进制文件可能被压缩或加密,但您必须一步一步地查找位置和/或代码。还要注意的是,该值可能会保留在寄存器中,并且可能在一段时间后才会被逐出内存,特别是如果它被打印在某处,比如说他们计算出+20,然后进入一些代码,在屏幕上打印新分数,将该值保存在寄存器中,然后在显示后逐出内存。我得到动作回放闪回:)