【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]

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

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

举个例子

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

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

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

我们运行第一句汇编

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

再运行第二句汇编

可以看到我们把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)

运行第一句汇编前

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

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

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

读取内存中的值

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

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

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

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

运行前的数据状况

运行第一句

运行第二句

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

向内存中写入数据

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

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

获取内存编号

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

我们看这张图

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

而ecx是0x19FF74

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

寻址公式四:[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】逆向3 寻找地址的更多相关文章

  1. 【C++】从零开始的CS:GO逆向分析1——寻找偏移与基址的方法

    [C++]从零开始的CS:GO逆向分析1--寻找偏移与基址的方法   前言:此文章主要用于提供方法与思路,fps游戏基本都能如此找偏移,文章里找的偏移比较少,主要用来演示寻找思路,文章的后记中会附一个 ...

  2. 行业干货-如何逆向解决QT程序汉化中乱码问题

    前言 “一款QT开发的国外软件,大概率是没有做中文支持的,所以你汉化中,不论怎么设置编码都一定是乱码.面对这个问题,你去互联网上找答案,答案却大多是复制粘贴的开发中解决乱码的文章,可是我们是要逆向中解 ...

  3. historyReverser & array reverse

    historyReverser & array reverse\ "use strict"; /** * * @author xgqfrms * @license MIT ...

  4. [BUUCTF]REVERSE——helloword

    helloword 题目是安卓逆向.安卓逆向工具下载地址 用APKIDE打开附件,ctf+f调出检索版,检索main函数,能看到flag字符串 flag{7631a988259a00816deda84 ...

  5. html+css笔记

    文档结构 1.html文档结构 ①文档类型声明 严格型(标准模式):    <!DOCTYpE HTML>   HTML5 XHTML 1.0:<!DOCTYpE html pUbL ...

  6. CTF:从0到1 -> zero2one

    本篇blog首发0xffff论坛(CTF:从0到1->zero2one - 0xFFFF),中间有各位大佬补充,搬到了个人博客CTF:从0到1 -> zero2one | c10udlnk ...

  7. Linux查找命令:grep,awk,sed

    grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ...

  8. 7.Java中的字符串

    1.String的特性 特性一:不可变性 String s=new String("yangyun") s=s.toUpperCase(); 这里的s,s占用的空间是不一样的(地址 ...

  9. http协议(一)基础知识

    我自己写的随笔一般是偏学习笔记性质的,或者一点个人理解,适合新人,大牛可以忽略这个...... 参考书籍——<图解http> 当我们在浏览器的地址栏中输入网址,然后点击回车,接着,浏览器就 ...

随机推荐

  1. 使用Azure Functions & .NET Core快速构建Serverless应用

    Code Repo: https://github.com/Asinta/ServerlessApp_NetconfChina2020 Prerequisites Visual Studio Code ...

  2. 解放生产力「GitHub 热点速览 v.21.51」

    作者:HelloGitHub-小鱼干 解放生产力一直都是我们共同追求的目标,能在摸鱼的空闲把赚了.而大部分好用的工具便能很好地解放我们的生产力,比如本周特推 RedisJSON 不用对 JSON 做哈 ...

  3. LuoguP7222 [RC-04] 信息学竞赛 题解

    Content 给定一个角 \(\alpha\),求 \(\beta=90^\circ-\alpha\). 数据范围:\(\alpha\in[-2^{31},2^{31}-1]\). Solution ...

  4. Redis缓存穿透、击穿、雪崩,数据库与缓存一致性

    Redis作为高性能非关系型(NoSQL)的键值对数据库,受到了广大用户的喜爱和使用,大家在项目中都用到了Redis来做数据缓存,但有些问题我们在使用中不得不考虑,其中典型的问题就是:缓存穿透.缓存雪 ...

  5. Python sys模块 os模块、OS.open() | open() | OS._exit() | sys.exit() | exit()

    sys模块:负责程序和Python交互. sys常用方法:===========================  sys.stdout.write('please:')val = sys.stdin ...

  6. Photoshop学习笔记(一)

    1.Alt+delete,用前景色填充选区 2.按住shift键可以新加选区 3.按住alt键可以减去选区 4.第一次选择选区时按住shift键制作出正方形或者圆形 5.第一次选择选区时按住alt键将 ...

  7. 【LeetCode】908. Smallest Range I 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数学计算 日期 题目地址:https://leetc ...

  8. LeetCode118. Pascal's Triangle 杨辉三角

    题目 给定行数,生成对应的杨辉三角 思考 同一行是对称的,最大的下标为(行数+1)/2;1,1,2,3,6;下标从0开始,则对应分别为0.0.1.1.2.2 对于第偶数行,个数也是偶数,对于奇数行,个 ...

  9. 1198 - Karate Competition

    1198 - Karate Competition    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...

  10. TCP/IP协议竟然有这么多漏洞

    网络攻击是指利用网络存在的漏洞和安全缺陷对网络系统的软硬件及其系统数据进行攻击的行为.TCP/IP协议作为网络的基础协议,从设计之初并没有考虑到网络将会面临如此多的威胁,导致出现了许多攻击方法.由于网 ...