通过反汇编程序更改窗口宽度和高度

时间:2016-06-16 22:05:06

标签: ida disassembly cheat-engine

我有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) 扫描类型:精确值 类型:4bytes

第一次扫描:发现33

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

让我们手动添加地址。好的,我们得到了,这个地址的价值是163944.什么?让我们看一下十六进制:00028068。嗯,我看到它上面的280但68来自哪里?让我们看一下身高:122984-> 0001E068。

所以现在我有一个问题为什么会这样?这68最终来自哪里? 1E0不是1E068的等值。我错了吗?我错过了任何建议。

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

1 个答案:

答案 0 :(得分:0)

以下是一些指示。

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