我如何找到颜色的内存地址?(初学者)

逆向工程 视窗 调试 x64
2021-07-06 17:01:38

我是一个绝对的初学者(几个小时前才开始学习进程内存)。

我正在尝试使用x64dbg在 mspaint 中找到颜色 1颜色的内存地址

我知道它是黑色的,所以我尝试在每个框中搜索0000000、 0、 0Color 1Black(ASCII、UNICODE、十六进制)

我一无所获。就像我说的,我是一个初学者,所以这一切对我来说都非常陌生。

我真的很感激一些帮助,学习如何找到一个颜色的内存地址,这样我就可以改变颜色和材料。

1个回答

好的,所以您正在尝试查找当前所选颜色的红色、绿色和蓝色值。我将向您展示如何使用 Cheat Engine 执行此操作,但您也可以将其转换为 x64dbg。

启动 Paint 并mspaint.exe在 CE(Cheat Engine) 中选择以进行调试。

将颜色设置为黑色或您喜欢的任何其他颜色,我将使用黑色作为我的初始起始颜色。查看黑色在 Paint 中的 RGB 值,在我们的例子中它是 0 0 0。

1在此处输入图片说明

在这里,我将做一些假设。我将假设 Red、Green 和 Blue 值的大小各为 1 个字节,因为它们最多只能达到 255,这是 1 个字节值可以容纳的限制。我还假设这些值位于相同的地址,一个接一个。相当于

struct color {
    char r, g, b;
}

总而言之,我们希望在内存中的某处找到 3 个连续的字节值。我们从 Paint 中知道它们的值,因此我们可以搜索它们。

所以,现在我们可以切换到 CE 并选择Groupedscan 以便我们可以搜索分组值。在我们的例子中,我们有一组 3 个值,每个值是 1 个字节。所以,这就是 CE 现在的样子。

1在此处输入图片说明

然后我只需按下First Scan,CE 将在paint.exe 地址空间中找到任何内存,其中有3 个字节,其中有0,相当于

someAddress   0x00
someAddress+1 0x00
someAddress+2 0x00

CE 会找到很多出现这种字节模式的地址,因为三个零字节不是很独特。

我现在要做的是在 Paint 中选择另一种颜色并遵循相同的过程,除了最后我会按Next Scan而不是First Scan这将做的是 CE 将查看它找到的所有带有三个零的地址,并查看它们中的任何一个是否更改为您的新分组值。其中的一个地址,现在将举行三个新的分组值,以及CE会帮您找到它,你会只留下了希望留下一个地址。如果你留下的不止几个,你可以用一种新的颜色重复这个过程。

如果地址颜色为绿色,则表示它是静态的,重新启动绘画时不会改变。一旦您获得了 RGB 存储位置的地址,您就可以对其进行更改或读取,或者对其进行任何您想做的事情。