windows-内存地址和偏移

工具

=============================================================

植大战僵尸经典版

下载地址:https://download.csdn.net/download/weixin\_43916597/14040707


CE 6.8.1

下载地址:https://download.csdn.net/download/weixin\_43916597/14040715

windows下一个程序运行的过程

1.如何存放:可执行程序需要放在硬盘上,而硬盘是一个外设上面有文件系统,exe以文件方式存放在硬盘上。操作系统将程序放在硬盘特定的位置。

2.如何启动:而应用程序需装入内存上才能被CPU运行,操作系统再把exe从硬盘放到内存里面去,去启动他。

3.操作系统给程序分配内存

4.操作系统给用户提供设备分配

5.会自动分配内存不会被一个程序霸占

6.程序结束退出系统并释放内存

内存

计算机的组成结构中有一个很重要的部分是存储器。它是用来存储程序和数据的部件。

有了存储器,才有记忆功能,才能保证正常工作。

存储器的种类很多。按其用途可分为主存储器辅助存储器,主存储器又称内存储器(简称内存)。

内存又称主存。它是CPU直接寻址存储空间,由半导体器件制成。特点是存取速率快。

内存是电脑中的主要部件,它是相对于外存而言的。

我们平常使用的程序,如:Windows操作系统打字软件游戏软件等。一般安装硬盘外存上,但仅此是不能使用其功能,必须把它们调入内存中运行,才能真正使用其功能。

我们平时输入一段文字或玩一个游戏,其实是在内存中进行。好比在一个书房,存放书籍的书架和书柜相当于电脑的外存,我们工作的办公桌相当于内存。

通常,我们把要永久保存、大量数据存储外存上,把一些临时或少量的数据和程序放在内存上。当然,内存的好坏会直接影响电脑的运行速度。

内存是暂时存储程序以及数据的地方。当我们使用WPS处理文稿时,当你在键盘上敲入字符时,它被存入内存中。当你选择存盘时,内存中的数据才会被存入硬(磁)盘。

使用CE来分析植物大战僵尸

首先打开植物大战僵尸,然后用CE附加这个主进程来处理

windows-内存地址和偏移教程

这次直接来处理这个阳光,因为玩过的都知道,阳光是植物大战僵尸的关键,而阳光的值是25 25 的往上走,所以这里我猜是一个int类型的变量来处理,所以在这个数值类型这里选用四字节来处理

windows-内存地址和偏移教程

在数值这里输入150进行搜索,因为初始的阳光值是150

windows-内存地址和偏移教程

静态地址和动态地址

这里可以看到CE在内存中查找数值时,有内存地址为黑色和绿色的值

,这里的黑色代表的是内存的动态地址,绿色的代表的是静态地址。动态地址也就是每次加载后会不一样,而静态地址表示程序每次使用的时候都是不变的地址

静态地址就相当于一直保存而动态地址就相当于暂时存放。

过滤数据

总的来说就是对一个类型的数据一直进行分析,比如说这些的阳光这个类型的数据,如果我在使用了植物之后阳光就会减少,这个时候再来搜索就是对上面之前这个150的阳光后变成了50的阳光的类型再来搜索一次就会过滤掉很多数据

分析阳光:

在初始的150的阳光使用掉100种一个豌豆射手之后变为了50,这个时候再搜索就肯定会减少数据。这个时候我们使用50再来搜索一次数据

windows-内存地址和偏移教程

就知道了这个阳光其实是保存在161CF688这个动态地址的下面的数据,可以直接进行修改就可以实现这里的阳光修改了。

windows-内存地址和偏移教程

通过动态地址找静态地址

要想做游戏辅助,肯定要使用静态地址来处理,因为动态你只是知道方法,别人如果要使用还是很麻烦的。

windows-内存地址和偏移教程

在CE中选择你要查找的动态地址,然后选择

windows-内存地址和偏移教程

然后可以看到这里其实是有两个调用了它。而且内容都是对偏移地址为00005560的偏移地址,这里我们选择mov指令的地址来查看,因为mov在汇编语言中的直接对寄存器进行赋值

windows-内存地址和偏移教程

EAX=00000032 EBX=00000001 ECX=00000000 EDX=074BB968 ESI=16338EA8 EDI=1248B520 EBP=0019FA98 ESP=00199790 EIP=0048982B

指针基址可能是 =16338EA8

0048981D - test al,al 0048981F - jne 00489933 00489825 - mov eax,[esi+00005560] 0048982B - xor ecx,ecx 0048982D - test eax,eax

偏移量

在这里可以看到偏移量是5560,这个如果看不懂的去先去看看汇编语言

这里的指令是

<pre class="md-fences md-end-block ty-contain-cm modeLoaded">mov eax,[esi+00005560]

而对应的寄存器esi的值是16338EA8,所以CE报告说可能的静态地址是16338EA8

然后这里再根据前面提供的esi寄存器的地址来搜素查看

windows-内存地址和偏移教程

windows-内存地址和偏移教程

在这个第二个地址中查看到了对应的MOV esi,xxxx所以这里可以确定第二次的偏移地址是768

EAX=00452650 EBX=0019FD00 ECX=026A9D68 EDX=00667BA0 ESI=16338EA8 EDI=026A9D68 EBP=00000001 ESP=0019FC60 EIP=00452679

指针基址可能是 =026A9D68

0045266A - cmp byte ptr [edi+000004CF],00 00452671 - je 0045269B 00452673 - mov esi,[edi+00000768] 00452679 - test esi,esi 0045267B - je 0045269B

同样的这次来搜索对应的edi的值,EDI=026A9D68

这次搜索后,可以很直观的看到了绿色的地址

windows-内存地址和偏移教程

刚刚有说到,在CE中绿色的就是静态地址,所以这里算是把静态地址找到了

其实学过这个结构体的应该都清楚:这里相当于是

动态地址=静态地址+偏移量

这里只用了两个偏移量就找到了算是很简单了

第一个偏移量是:768h 第二个偏移量是5560h(这里是十六进制)

最后进行找到的静态地址+偏移量来处理

windows-内存地址和偏移教程

最后重启查看是否改变,如果改变说明失败,如果没有改变说明找到了对的静态地址+偏移量

标签: 内存地址, 内存, windows, 静态, 地址, 偏移量, 偏移, esi

相关文章推荐

添加新评论,含*的栏目为必填