【问题标题】:Changing window width and height by disassembler通过反汇编程序更改窗口的宽度和高度
【发布时间】:2016-10-18 14:46:19
【问题描述】:

我有 IDA 和 Cheat Engine。我想要做的是改变应用程序的分辨率,实际上只是窗口的宽度和高度。我知道仅更改宽度和高度不会使应用程序正常工作,但这是我了解反汇编程序的第一步。 经过不长时间的搜索,我找到了函数 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) 扫描类型:精确值 类型:4字节

第一次扫描:找到 33 个

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

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

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

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

【问题讨论】:

    标签: ida disassembly cheat-engine


    【解决方案1】:

    这里有几个指针。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      相关资源
      最近更新 更多