安全笔记:逆向|windows逆向工程和8086汇编语言

目录

基础知识

代码分析

逆向分析法

修改应用程序文件或进程内存内容方法

入口点

修改地址方法

区分代码为部分的方法

快速查找制定代码

两个反调试方法

函数调用约定

字符串

字符串编码

修改字符串方法

内存

内存分区

字节序

PE文件

格式

地址映射

PE头

节区头

工具

8086汇编语言


基础知识

汇编语言依赖于CPU,每个产品用的CPU种类不同,则汇编语言也有略微差异

代码分析

汇编文件(主)

十六进制文件(辅)

逆向分析法

静态分析——分析源码

动态分析——调试分析

推荐方法:先静态分析再动态分析

修改应用程序文件或进程内存内容方法

打补丁——Patch

破解——Crack

入口点

调试器停止的地方即为PE文件执行的起始地址

修改地址方法

call [地址]

jmp [地址]

区分代码为部分的方法

goto命令

设置断点

注释

标签

快速查找制定代码

代码执行法

字符串检索法

API检索法

两个反调试方法

压缩器——修改文件结构、压缩后文件仍为可执行文件

保护器——压缩、反调试、反模拟、反转储

函数调用约定

函数执行完毕,ESP需要回滚(用户执行)


字符串

字符串编码

字符的编码方式不同,占据位数不同,调试代码要注意

Unicode码中字符长度不够后需要填充NULL

修改字符串方法

直接修改字符串缓冲区(新字符串长度大于原有字符串,覆盖可能损坏字符串后面的数据)

在其他内存区域生成新字符串并传递给消息函数(注意地址,地址并不是按照规定载入内存,其按一定规律,即其要按一定文件偏移,否则程序出错)。


内存

内存分区

应用程序被加载到内存有最小内存分配大小,若不够则要填充NULL(一般为1000)

字节序

多字节数据在计算机内存中存放的字节顺序(小端序和大端序)

采用大端序存储数据时,内存地址低位存储数据的高位,内存地址的高位存储数据的低位。例如:Unix CPU/网络协议。

采用小端序存储数据时,内存地址低位存储数据的低位,内存地址的高位存储数据的高位。例如:Intel x86 CPU。


PE文件

格式

PE头:DOS头到节区头

PE体:PE头其下的节区

文件中使用偏移,内存中使用VA(虚拟地址)来表示位置。

文件分为.text(代码)、.data(数据)、.rsrc(资源)节,其分别保存

PE头与各节区的尾部存在一个区域,称为NULL填充(不够最小基本单位则填充NULL)

地址映射

VA:虚拟内存的绝对地址,RVA:相对虚拟地址,ImageBase:基准地址

ImageBase+RVA=VA

32位Windows OS中,各进程分配有4GB的虚拟内存,VA范围为00000000~FFFFFFFF。

PE头

PE头由许多结构体组成(40字节),PE头的最前面添加了一个IMAGE_DOS_HEADER结构,用来扩展已有的DOS EXE头。

IMAGE_DOS_HEADER分为e_magic(DOS签名)、e_lfanew(指示NT头的偏移)。

所有PE文件在开始部分(e_magic)都有DOS签名(“MZ”)。

e_lfanew指向NT头所在位置(NT头:IMAGE_NT_HEADERS)。

DOS存根在DOS头下方,是个可选项,且大小不固定,其由代码和数据混合而成。

NT头结构分为签名、文件头、可选头三部分。

节区头


工具

Hex Editor:二进制->十六进制

OllyDbg:汇编逆向工具

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值