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

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 - 节偏移
可用 lordPE 工具查看节信息

1.3 必备工具

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

crack例子爆破分析(跳过密码验证)

  1. if判断决定程序是否跳出循环(正确跳出,错误循环请求密码)
  2. 找到if对应二进制代码,修改
  3. 用IDA解析exe文件,自动识别出main函数
  4. ollydbg动态调试,修改内存中机器指令,
  5. ultraedit修改文件中指令
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月漫长_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值