【问题标题】:How to find pointer w/ offset [ecx+eax*4] (address offset?)如何找到带偏移量的指针 [ecx+eax*4](地址偏移量?)
【发布时间】:2021-11-08 01:17:22
【问题描述】:

我看过这个话题:How to find a point with offset eax+ebx*4

eax will be the pointer value to look for
ebx*4 will be the offset (ebx is the offset in an array with elements of 4 bytes long)
so:
ebx=0 : offset=0
ebx=1 : offset=4
ebx=2 : offset=8
ebx=3 : offset=c
ebx=4 : offset=10

但我还是不明白如何确定 ebx?

这是我的情况:我正在尝试获取 Red Faction: Guerrilla (gfwl version) 的当前弹药指针

我看到这个弹药的地址在我加载另一个存档时发生了变化。所以我使用“找出写入这个地址的内容”作为弹药指针(加载另一个保存文件后不再工作)

然后我加载另一个保存文件以查看它写入指针的内容: 结果是偏移量为[ecx+eax*4]的指针

所以我做了一个这样的指针

ecx=00C1B988(地址00C1B988保存值:ECX=00C1B994)

EAX*4= 我不知道如何使用它,所以我只输入:E71*4

但是当我加载另一个保存文件时它仍然不起作用。我卡在 E71*4,我应该为 E71 更换什么?我什至尝试搜索值 E71(或 3697),但似乎我无处可去。

【问题讨论】:

  • 每次运行游戏时EAX都会改变吗?通常,当您看到 ecx+eax*4 时,它正在索引一个数组。 ECX 指向数组,EAX 是元素#,4 是元素的大小。经常看到 4 或 8 是因为它是一个指针数组,这就是指针的大小
  • @GuidedHacking: 谢谢回复 :) 我认为游戏的开发者试图让它无法使用作弊引擎,我从来没有成功找到指针。 EAX 会随着不同的存档游戏和不同的游戏进度而变化(如果我不开始另一个存档游戏并且不继续执行任务,则 EAX 会保留)。所以我认为问题不在于EAX更改,而是游戏开发者使用了一种方法使其无法找到指针。但幸运的是,我发现这个游戏有一些模组,我可以用任何我喜欢的方式作弊:gaming.stackexchange.com/a/336026/198960
  • 这不是反作弊,而是面向对象编程的工作原理以及 C++ 的编译方式

标签: cheat-engine


【解决方案1】:

通常当您看到 ecx+eax*4 时,它正在索引到一个数组中。 ECX 指向数组,EAX 是元素#,4 是元素的大小。经常看到 4 或 8 是因为它是一个指针数组,这就是 x86 上指针的大小。

您看到的不是一些加密/混淆/反欺骗。这就是面向对象编程/C++ 编译成程序集的方式。

您正在创建的指针链对您不起作用,解决方案是获取武器/玩家对象的地址,以便您可以偏移到它以获取弹药的地址。为此,您需要:

  • 手动查找另一个指针
  • 使用指针扫描器查找另一个指针
  • 模式扫描+挂钩并从寄存器中拉出地址

如果这可能是一些混淆,您可以通过挂钩指令并获取它的值来轻松获取 EAX 的值。

【讨论】:

  • 非常有帮助。在我的例子中,数组是“argv”,它通过“ecx+eax*4-4”引用最后一个元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多