0
点赞
收藏
分享

微信扫一扫

【0day安全-软件漏洞分析技术】笔记

残北 2022-03-24 阅读 64
安全

C1 基础知识

1.1.3 漏洞分析和利用

漏洞挖掘:实际上是高级测试QA。工程界常用fuzz;学术界用静态分析。
漏洞分析:找到POC(proof of concept)代码,无法获得POC时,利用厂商提供的漏洞描述,使用补丁比较器,比较patch前后的修改,再利用反汇编工具进行逆向分析。
漏洞利用:缓冲区溢出;内存漏洞(堆栈溢出),web漏洞(脚本注入)

1.1.4 漏洞公布

  1. CVE:cve.mitre.org
  2. cert:cert.org
  3. 微软安全中心 每月 第二周 的 周二发布补丁

1.2 二进制文件

1.2.1 PE文件格式

PE(portable executable)是win32可执行文件的数据格式。如exe,dll。
PE把可执行文件分成多个数据节(section),分别存放不同资源。
.text 由编译器产生,存放二进制机器代码(反汇编和调试对象)
.data 初始化数据块,如宏定义、全局变量、静态变量
.idata 使用的动态链接库等外来函数与文件信息
.rsrc存放程序的资源,如图标、菜单等
还有.reloc /.edata /.tls/ .rdata
C++的编译指示可以自定义节名
如果可执行文件进行了加壳处理,PE的节信息就会变得奇怪。

1.2.2 虚拟内存

Windows的内存分为:物理内存(核心态ring0)和虚拟内存(用户态ring3)
在这里插入图片描述
内存管理器分配进程一块“虚拟地址”,进程使用内存时,将虚拟地址映射物理内存地址。

1.2.3 PE文件和虚拟内存之间的映射

调试漏洞时,经常需要两种操作

  1. 静态反汇编工具看到PE文件中指令的位置(文件偏移),要知道其在内存中所处的位置(虚拟内存地址VA)。
  2. 调试时看到某条指令的地址是虚拟内存地址,要回到PE文件中找到指令对应的机器码。

所以需要弄清PE文件地址和虚拟内存地址之间的映射关系。
1)文件偏移地址(file offset):数据在PE文件中的地址,相对于文件开头的偏移。按照磁盘数据标准,以0×200字节为基本单位,不足被0×00填充;一个数据节超过0×200时,分配下一个0×200块。PE数据节大小永远是0×200的整数倍。
2)装载基址(image base):PE装入内存中的基地址。默认exe在内存中的基地址是0×00400000,DLL是0×10000000,这些位置可通过编译选项更改。按照内存数据标准,大小永远是0×1000字节的整数倍。
3)虚拟内存地址(virtual address,VA):PE文件中的指令被装入内存后的地址
4)相对虚拟地址(relative virtual address,RVA):内存地址相对于映射基址的偏移量
后三者关系

VA = image base + RVA

在这里插入图片描述

在这里插入图片描述
这种由存储单位差异引起的节基址差称为节偏移(转换的地址位于第几个节内),上例中
在这里插入图片描述
文件偏移地址 = 虚拟内存地址 - 装载基址 - 节偏移
= RVA - 节偏移
可用 loadPE 工具查看节信息

1.3 必备工具

  1. ollydbg:反汇编分析,16进制编辑,动态调试,GUI界面。动态分析
  2. softICE:工作在ring0级,可调试驱动等内核对象
  3. windbg:内核安全和调试
  4. IDA PRO:静态反汇编
  5. 二进制编辑器 ultraedit
举报

相关推荐

0 条评论