ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【reverse】逆向3 寻找地址

2021-07-31 14:31:29  阅读:166  来源: 互联网

标签:逆向 reverse mov eax 地址 内存 编号 0x13FFC4 ecx


【reverse】逆向3 寻找地址

寻址公式一:[立即数]

读取内存的值:

mov eax,dword prt ds:[0x13FFC4]

将内存编号为0x13FFC4、0x13FFC5、0x13FFC6、0x13FFC7的数据写入eax中

向内存中写入数据

mov dword prt ds:[0x13FFC4],eax

将eax的数据写入内存编号为0x13FFC4、0x13FFC5、0x13FFC6、0x13FFC7中

获取内存编号

lea eax,dword ptr ds:[0x13FFC4]
lea eax,dword prt ds:[edx]

获取0x13FFC4地址的内存编号(就是0x13FFC4)

获取edx的内存编号

寻址公式二:[reg]

reg代表寄存器,可以是8个通用寄存器中的任意一个

读取内存的值:

# 基址
mov ecx,0x13FFD0
# 找基址的数据
mov eax,dword prt ds:[ecx]

其实这个寻找公式的本质和第一个一样,只不过第一个是直接读取内存编号的数据

而这个是先把要找的内存地址放入一个寄存器中,在根据寄存器中存储的内存编号去寻找这个内存编号的数据

举个例子

image-20210731095258511

第一句汇编将内存编号0x19FF74存入ecx中

第二句汇编将存入ecx中的内存编号的数据读取出来

image-20210731095433384

我们先在堆栈窗口观察0019FF74编号的数据为7725FA29

我们运行第一句汇编

image-20210731095542423

可以看到我们把0019FF74编号存入了ecx中

再运行第二句汇编

image-20210731095615884

可以看到我们把0019FF74编号中的数据读到了eax中

向内存中写入数据

mov edx,0x13FFD8
mov dowrd ptr ds:[edx],0x87654321

向0x13FFD8这个内存编号中写入0x87654321这个数据

获取内存编号

mov eax,0x19FF74
lea ecx,dword ptr ds:[eax]

读取eax的内存编号(这里eax的内存编号是0x19FF74)

image-20210731100814689

运行第一句汇编前

image-20210731100922986

运行第一句汇编后,将0x19FF74内存编号存入eax

image-20210731100947434

运行第二句汇编后,ecx中获取了eax的内存编号0x19FF74

image-20210731101017939

寻址公式三:[reg+立即数]

读取内存中的值

mov ecx,0x19FF74
mov eax,dword ptr ds:[ecx+0x4]

image-20210731101516393

公式3和公式2其实一样,只不过多了一个立即数的偏移量

第一句汇编是将0x19FF74内存编号存入ecx

第二句汇编是将ecx+0x4(0x19FF78)的内存编号的数据放入eax中

运行前的数据状况

image-20210731101936420

运行第一句

image-20210731101959654

运行第二句

image-20210731102026588

image-20210731102041466

可以发现eax中存入了0x0019FF78这个内存编号

向内存中写入数据

mov ecx,0x19FF74
mov dword prt ds:[ecx+0xC],0x87654321

向内存编号为0x19FF74+0xC写入0x87654321的数据

获取内存编号

lea eax,dword ptr ds:[ecx+0x8]

我们看这张图

image-20210731102511483

lea是读取ecx+0x8的内存编号

而ecx是0x19FF74

所以如果运行了这句汇编,那么eax的那里将会存入0x19FF7C的内存编号

image-20210731102647384

寻址公式四:[reg+reg*{1,2,4,8}]

读取内存的值

mov eax,0x13FFC4
mov ecx,0x2
mov edx,dword ptr ds:[eax+ecx*4]

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4(0x13FFC4+0x8 = 0x13FFCC)内存编号的数据写入edx

题外话:eax+ecx*4不会超过FFFFFFFF

向内存中写入数据

mov eax,0x13FFC4
mov ecx,0x2
mov dword ptr ds:[eax+ecx*0x4],0x87654321

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4(0x13FFC4+0x8 = 0x13FFCC)内存编号的值改为0x87654321

获取内存编号

mov eax,0x13FFC4
mov ecx,0x2
lea eax,dword ptr ds:[eax+ecx*4]

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4(0x13FFC4+0x8 = 0x13FFCC)内存编号写入eax,此时eax就是0x13FFCC

寻址公式五:[reg+reg*{1,2,4,8}+立即数]

读取内存的值

mov eax,0x13FFC4
mov ecx,0x2
mov edx,dowrd ptr ds:[eax+ecx*4+0x4]

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4+0x4(0x13FFC4+0x8+0x4 = 0x13FFD0)内存编号的数据写入edx

向内存中写入数据

mov eax,0x13FFC4
mov ecx,0x2
mov dowrd ptr ds:[eax+ecx*4+0x4],0x87654321

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4+0x4(0x13FFC4+0x8+0x4 = 0x13FFD0)内存编号的数据改为0x87654321

获取内存编号

mov eax,0x13FFC4
mov ecx,0x2
lea eax,dword ptr ds:[eax+ecx*4+0x4]

读取eax+ecx*4+0x4这个内存编号,也就是0x13FFD0

标签:逆向,reverse,mov,eax,地址,内存,编号,0x13FFC4,ecx
来源: https://www.cnblogs.com/woodwhale/p/15084177.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有