windows-内存地址和偏移
作者:互联网
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附加这个主进程来处理
这次直接来处理这个阳光,因为玩过的都知道,阳光是植物大战僵尸的关键,而阳光的值是25 25 的往上走,所以这里我猜是一个int类型的变量来处理,所以在这个数值类型这里选用四字节来处理
在数值这里输入150进行搜索,因为初始的阳光值是150
静态地址和动态地址
这里可以看到CE在内存中查找数值时,有内存地址为黑色和绿色的值
,这里的黑色代表的是内存的动态地址,绿色的代表的是静态地址。动态地址也就是每次加载后会不一样,而静态地址表示程序每次使用的时候都是不变的地址
静态地址就相当于一直保存而动态地址就相当于暂时存放。
过滤数据
总的来说就是对一个类型的数据一直进行分析,比如说这些的阳光这个类型的数据,如果我在使用了植物之后阳光就会减少,这个时候再来搜索就是对上面之前这个150的阳光后变成了50的阳光的类型再来搜索一次就会过滤掉很多数据
分析阳光:
在初始的150的阳光使用掉100种一个豌豆射手之后变为了50,这个时候再搜索就肯定会减少数据。这个时候我们使用50再来搜索一次数据
就知道了这个阳光其实是保存在161CF688这个动态地址的下面的数据,可以直接进行修改就可以实现这里的阳光修改了。
通过动态地址找静态地址
要想做游戏辅助,肯定要使用静态地址来处理,因为动态你只是知道方法,别人如果要使用还是很麻烦的。
在CE中选择你要查找的动态地址,然后选择
然后可以看到这里其实是有两个调用了它。而且内容都是对偏移地址为00005560的偏移地址,这里我们选择mov指令的地址来查看,因为mov在汇编语言中的直接对寄存器进行赋值
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,这个如果看不懂的去先去看看汇编语言
这里的指令是
mov eax,[esi+00005560]
而对应的寄存器esi的值是16338EA8,所以CE报告说可能的静态地址是16338EA8
然后这里再根据前面提供的esi寄存器的地址来搜素查看
在这个第二个地址中查看到了对应的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
这次搜索后,可以很直观的看到了绿色的地址
刚刚有说到,在CE中绿色的就是静态地址,所以这里算是把静态地址找到了
其实学过这个结构体的应该都清楚:这里相当于是
动态地址=静态地址+偏移量
这里只用了两个偏移量就找到了算是很简单了
第一个偏移量是:768h 第二个偏移量是5560h(这里是十六进制)
最后进行找到的静态地址+偏移量来处理
最后重启查看是否改变,如果改变说明失败,如果没有改变说明找到了对的静态地址+偏移量
标签:windows,偏移量,静态,地址,偏移,内存,CE,内存地址,esi 来源: https://www.cnblogs.com/beautiful7/p/14249646.html