逆向基础知识

(本文章是根据B站滴水逆向视频讲解的笔记,刚开始的基础大概就是先对一些常用指令的解释和理解指令与堆栈之间的关系,如有错误欢迎指正)

逆向主要解决三个问题:
程序从哪里执行
数据藏在哪里
程序藏在哪里

高级语言->汇编语言->二进制

本篇文章用到的软件:OllyDBG,ExeinfoPE
OllyDBG百度云链接:https://pan.baidu.com/s/1S7E3spLBNi1GLfWPyPNTpQ
提取码:zl79
ExeinfoPE百度云链接:https://pan.baidu.com/s/1-K_vGSj8TA1lM2DScDAaqw
提取码:ua95

一、基础知识
1、PE文件结构:任何一个在Windows上运行的可执行文件都要遵循的文件格式,如.exe,.dll,部分sys.
2、小端模式:数据在计算机中的存储模式,高数据放在低地址,大多数计算机采用小端模式。

 如:x=987654

3、大端模式:数据在计算机中的存储模式,低数据放在高地址,适用于人看的。

如:x=45678

上述两种模式表示的数据是一样的,只不过用不同的方式存储。

4、ExeinfoPE的使用:用于找到代码段的起始地址
这是hello的一些文件信息

二、寄存器和内存
1、常用的计量单位:
Byte 8bit(位)
Word(字) 16bit
Dword(双字) 32bit

5、寄存器和内存:存储数据的容量
1.寄存器和内存无本质区别,都是用来存储数据的容器
2.寄存器位于CPU内部执行速度快,但比较贵
3.内存速度相对较慢,但成本低

6、32位通用寄存器(8个):EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI

7、寄存器的使用(基础汇编知识):
MOV EAX,0x12345 <=> eax=0x12345(赋值)
ADD EBX, 2 <=> ebx=ebx+2
SUB ECX, 3 <=> ecx=ecx-3

三、内存的读写
(一)
1.读取内存的值:
MOV EAX, DWORD PTR DS:[0x0060F99C] <=>从地址[0x0060F99C]读取32位数据放入EAX存储器内。(可以通过OllyDBG调试,在OllyDBG里打开随意一个文件,我测试的时候是用C语言写的Hello,World的。exe文件)
2.向内存中写入数据
MOV DWORD PTR DS:[0x0060F99C],EAX
MOV DWORD PTR DS:[0x0060F9A0],EBX
3.获取内存编码
LEA ECX,DWORD PTR DS:[0x0060FA00]
LEA EAX,DWORD PTR DS:[ESP+8]
(二)[reg]reg表示寄存器,可以是8个寄存器中的任意一个,[reg+十六进制数],[reg+reg*{1,2,4,8}]
1.读取内存值
MOV EDX,0x111222
MOV EAX,DWORD PTR DS:[EDX]
2.向内存中写数据
MOV EDX,0x33555
MOV DWORD PTR DS:[ECX+0X3], 0x666222
3.获取内存编码
MOV EBX,2
LEA EAX,DWORD PTR DS:[ECX+EBX*4]

四、堆栈:对于存放的数据采用先进后出的方法。
(一)
1、堆栈的本质是内存
2、堆栈用来存储临时变量,函数传递的中间结果
3、由操作系统维护的,对“程序员”是透明的,但这正是逆 向所要研究的

(二)
执行下面指令,观察ESP/EBP变化(用OllyDBG测试)
push 0x123456
push eax
push ebx
pop eax
pop ebx
pop ecx

变形的艺术
push eax 等价于
lea esp,dword ptr ss:[esp-4]
mov dword ptr ss:[esp], eax
或者
mov dword ptr ss:[esp-4], eax
lea esp,dword ptr ss:[esp-4]

(三)STOS指令
stos指令的作用是将eax中的值拷贝到EDI指向的地址,
rep指令的目的是重复,ecx的值是指重复的次数。
mov eax,0x22222222
mov ecx,0x2
lea edi,dword ptr es:[edi]

mov eax,0x88888888
lea edi,dword ptr ss:[esp]
mov ecx,0x2
rep stos dword ptr ss:[edi]
重复执行两次指令stos dword ptr ss:[edi]指令

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值