0

好吧,我有 IDA 和作弊引擎。我想要做的是改变应用程序的分辨率,实际上只是窗口的宽度和高度。我知道仅更改宽度和高度不会使应用程序正常工作,但这是我了解反汇编程序的第一步。经过不长时间的搜索,我找到了函数 CreateWindowEx。好吧,看起来我找到了应用程序创建窗口的位置,

push 1E0h
push 280h
….            ;some code
mov esi, ds:GetSystemMetrics
push 0        ;nIndex
call esi      ;GetSystemMetric
push 1        ;nIndex
move edi,eax
call esi      ;GetSystemMetrics
...           ;somecode
call ds:CreateWindowExA

push 1E0h= 480 和push 280h= 640。嗯,看起来我找到了宽度和高度,所以我得到了恒定的地址,让我们尝试改变它们。(实际上通过搜索,我发现了另外两个具有此常量的位置。但它们都没有用于创建窗口,并且由于我只是尝试更改窗口高度和宽度,因此我将使用那些)。运行应用程序并作弊引擎。

十六进制值:280 (1E0) 扫描类型:精确值类型:4bytes

第一次扫描:找到 33

查看地址列表,其中没有一个甚至接近我们在 IDA 中的地址。如果我理解正确,因为作弊引擎从用于运行应用程序的内存中获取地址,而 Ida 分析代码并在其中找到地址。我不知道我说的是对还是错,你这边的任何解释都会很好。但问题不在于它。

好吧,让我们手动添加地址。好的,我们知道了,这个地址上的值是 163944。什么?让我们看一下十六进制:00028068。嗯,我看到了 280,但 68 是从哪里来的?让我们看一下高度:122984->0001E068。

所以现在我有一个问题,为什么会这样?这68到底是哪里来的?1E0 不是 1E068 的后续。我错了吗?任何我错过的建议。

好吧,让我们走得更远,让我们尝试改变它。好吧,我用十六进制绑定了两个变体:50068 和 3C068。如果没有 68,它实际上应该是怎样的(在我看来 :))。它们都不起作用,我认为这可能是因为应用程序稍后通过指针使用常量(我认为,但可能我错了)。所以我也需要改变指针。让我们找出访问此地址的内容。好吧,现在我遇到了一个问题,在简单的变体中,要找出访问此地址的内容,您只需要更改应用程序中的条件,比如说 value=5,单击按钮更改 value=3,然后作弊引擎找到有什么访问该地址。但是在我的情况下,窗口已经创建,我不知道如何获取此列表。所以现在我有点卡在这一点上。可能是我错过了什么。

4

1 回答 1

0

这里有几个指针。

  1. IDA 中的地址基于 IDA 为您的可执行文件读取的基地址。当您的程序被操作系统加载时,它将驻留在不同的内存位置(大部分时间)。因此,您在 IDA 中的地址将与内存中的地址不同。与基地址的偏移量应该始终相同。
  2. 你的十六进制值可能只占用 2 个字节,我猜你的架构是小端。因此 68 可能与您的实际值无关,而是一个不同的变量。
于 2016-06-29T21:02:35.660 回答