ASLR

article/2025/10/13 19:48:04

ASLR

  • 一、ASLR是什么?
  • 二、测试ASLR技术
    • 1.一个简单的源文件
    • 2.生成ALSR.exe与ALSR_no.exe
    • 3.使用OllDbg调试器查看程序入口地址与栈地址
      • 3.1 ASLR.exe
      • 3.2 ASLR_no.exe
    • 4.使用CFF Explorer查看PE文件信息
      • 4.1 重定位表的区别
      • 4.2 IMAGE_FILE_HEADER/Characteristics属性
      • 4.3 IMAGE_OPTIONAL_HEADER/DLL Characteristics属性
    • 5. 删除ASLR功能
  • 三、重启系统后,观察ASLR.exe映射到内存中的变化
  • 总结


一、ASLR是什么?

ASLR(Address Space Layout Randomization,地址空间布局随机化)是一种针对缓冲区溢出的安全保护技术。微软从Windows Vista(Kernel Version 6)开始采用该技术。

OS内核版本
Windows 20005.0
Windows XP5.1
Windows Server 20035.2
Windows Vista6.0
Windows Server 20086.0
Windows Server 2008 R26.1
Windows 76.1

借助ASLR,PE文件每次加载到内存的起始地址都会随机变化,并且每次运行程序时相应进程的栈以及堆的起始地址也会随机改变。也就是说,每次EXE文件运行时加载到进程内存的实际地址都不同,最初加载DLL文件时装载到内存中的实际地址也是不同的。
微软采用这种方式加载PE文件是为了增加系统的安全性。大部分Windows OS安全漏洞(一般为缓冲区溢出)只出现在特定OS、特定模块、特定版本中。以这些漏洞为目标的漏洞利用代码(exploit code)中,特定内存地址以硬编码的形式编入(因为在以前的OS中,根据OS版本的不同,特定DLL总是会加载到固定地址)。 因此,微软采用了这种ASLR技术,增加了恶意用户编写漏洞利用代码的难度,从而降低了利用OS安全漏洞破坏系统的风险(UNIX/Linux OS等都已采用了ASLR技术)

二、测试ASLR技术

1.一个简单的源文件

#include <iostream>void main()
{printf("ASLR test program...\n");
}

2.生成ALSR.exe与ALSR_no.exe

采用/DYNAMICBASE编译生成ASLR.exe文件。采用/DYNAMICBASE:NO编译生成ASLR_no.exe文件

采用/DYNAMICBASE编译生成ASLR.exe文件。采用/DYNAMICBASE:NO编译生成ASLR_no.exe文件

3.使用OllDbg调试器查看程序入口地址与栈地址

对比发现ASLR.exe与ASLR_no.exe程序入口地址与堆栈地址不同。

3.1 ASLR.exe

在这里插入图片描述
程序执行完后:

在这里插入图片描述


注:以下图片均为重启计算机后所截的图。

3.2 ASLR_no.exe

在这里插入图片描述
程序执行完后:

在这里插入图片描述

4.使用CFF Explorer查看PE文件信息

4.1 重定位表的区别

ASLR多了一个重定位目录表,即多了一个.reloc节区。ASLR的NumberOfSection比ASLR_no的值大1。

一般而言,普通的EXE文件是不存在.reloc节区的,该节区仅在应用了ASLR技术的文件中才会出现,它是编译器生成并保留的在可执行文件中的。

PE文件被加载到内存时,该节区被用作重定位的参考,它不是EXE文件运行的必须部分,可将其从PE文件中删除。由于DLL文件总是需要重定位,所以DLL文件中不可将其删除。

在这里插入图片描述

4.2 IMAGE_FILE_HEADER/Characteristics属性

ASLR.exe中没有 relocation info stripped from file(IAMGE_FILE_RELOCS_STRIPPED(1))属性
在这里插入图片描述

4.3 IMAGE_OPTIONAL_HEADER/DLL Characteristics属性

ASLR.exe中设有 DLL can move(IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE(40))属性,删除这个属性,即可删除ASLR功能。
在这里插入图片描述

5. 删除ASLR功能

修改ASLR.exe文件的可选PE头属性信息,将8140修改为8100(即把IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE(40)属性删除)并另存为ASLR_DEL.exe文件。

再用OllDbg查看ASLR_DEL.exe程序的入口地址以及程序的堆栈地址。
发现程序入口地址变回来了,并没有随机化。

在这里插入图片描述
在这里插入图片描述

三、重启系统后,观察ASLR.exe映射到内存中的变化

重新启动计算机,再次用OllDbg查看ASLR.exe程序的入口地址与堆栈地址。发现重启系统后,程序入口地址与堆栈地址随机化了。

在这里插入图片描述

在这里插入图片描述

ASLR.exe:
采用地址空间随机化
用OllDbg调试发现程序入口地址为AA1343H重新启动计算机后:
用OllDbg调试发现程序入口地址为201343HASLR_no.exe:
不使用地址空间随机化
用OllDbg调试发现程序入口地址为411343HASLR_DEL.exe:
把ASLR.exe取消了地址随机化
用OllDbg调试发现程序入口地址为411343H

总结

1、ASLR 机制在每次引导的时候为一个给定的DLL选择一个同样的基地址。但是当系统进行重启后,加载基址就会变化,也就是说可以认为这里的地址随机化在系统启动的时候就进行重定位,此后在此系统中,系统dll在每个进程中的基址相同。

2、如果一个要详细分析的文件应用了ASLR功能,分析前可以暂时将ASLR功能删除,然后再调试分析,由于文件总是被加载到相同的内存地址,所以分析起来会更简便。


http://chatgpt.dhexx.cn/article/2fWIXs9h.shtml

相关文章

[ASLR,地址空间,Linux,随机化,Windows]ASLR 是如何保护 Linux 系统免受缓冲区溢出攻击的

地址空间随机化&#xff08;ASLR&#xff09;是一种内存攻击缓解技术&#xff0c;可以用于 Linux 和 Windows 系统。了解一下如何运行它、启用/禁用它&#xff0c;以及它是如何工作的。 -- Sandra Henry-stocker 地址空间随机化(Address Space Layout Randomization)&#xff0…

ALSR

一 ALSR介绍&#xff1a; 1.1定义 aslr是一种针对缓冲区溢出的安全保护技术&#xff0c;通过对堆、栈、共享库映射等线性区布局的随机化&#xff0c;通过增加攻击者预测目的地址的难度&#xff0c;防止攻击者直接定位攻击代码位置&#xff0c;达到阻止溢出攻击的目的的一种技…

如何提高强化学习算法模型的泛化能力?

深度强化学习实验室 官网&#xff1a;http://www.neurondance.com/ 来源&#xff1a;https://zhuanlan.zhihu.com/p/328287119 作者&#xff1a;网易伏羲实验室 编辑&#xff1a;DeepRL 在深度学习中&#xff0c;模型很容易过拟合到参与训练的数据集。因此&#xff0c;深度学习…

BatchFormer:有效提升数据稀缺场景的模型泛化能力|CVPR2022

文 | 侯志知乎&#xff08;已授权&#xff09;源 | 极市平台 摘要 当前的深度神经网络尽管已经取得了巨大的成功&#xff0c;但仍然面临着来自于数据稀缺的各种挑战&#xff0c;比如数据不平衡&#xff0c;零样本分布&#xff0c;域适应等等。 当前已经有各种方法通过样本之间的…

图解深度学习-提高泛化能力的方法

数据集 在深度学习的训练过程中&#xff0c;神经网络的类型和结构固然重要&#xff0c;但训练样本才是重中之重。 数据增强 当训练样本数量较少时&#xff0c;可以通过数据增强来增加样本的多样性。 数据增强就是通过对样本图像进行平移、旋转、镜像翻转等方式进行变换。除…

JAVASE提高 -- Java泛型

1. 泛型类 &#xff08;1&#xff09;使用语法 类名<具体的数据类型> 对象名 new 类名<具体的数据类型>(); &#xff08;2&#xff09;Java1.7以后&#xff0c;后面的<>中的具体的数据类型可以省略不写 类名<具体的数据类型> 对象名 new 类名<&…

【NLP】如何提高模型泛化能力?以中文NER为例

我们知道模型的泛化能力是很重要的&#xff0c;如果一个模型具有很好的泛化性能&#xff0c;那么它往往能够在没有见过的数据上表现良好。以中文命名实体识别为例&#xff0c;在用于评估模型泛化性能的数据集中&#xff0c;我们可能忽略了数据偏差对模型泛化的影响。 论文标题&…

C#提升(一、泛型)

一、什么是泛型 泛型&#xff0c;即“参数化类型” 我们来看以下代码&#xff0c;目的很明确&#xff0c;就是显示参数类型&#xff0c;这种类似的代码或者说只有参数类型不同&#xff0c;但是功能相同时&#xff0c;我们如何让代码写的更优雅&#xff1f; 在泛型没有出现的…

深度学习提高泛化能力的技术

LeetCode题目记录 1.泛化能力&#xff08;generalization&#xff09; 2.正则化&#xff08;regularization&#xff09;2.1 正则化方法 1.泛化能力&#xff08;generalization&#xff09; 对于模型&#xff0c;我们不仅要求它对训练数据集有很好的拟合&#xff08;训练误差&a…

lecture9-提高模型泛化能力的方法

HInton第9课&#xff0c;这节课没有放论文进去。。。。。如有不对之处还望指正。话说hinton的课果然信息量够大。推荐认真看PRML《Pattern Recognition and Machine Learning》。 摘自PRML中22页。 正文&#xff1a; 一、提高泛化方法的概述 在这部分中&#xff0c;将会介绍…

思考深度学习的泛化能力

神经网络通过记忆学习 传统观点论文观点论文实验 神经网络 不 通过记忆学习参考资料 深度神经网络往往带有大量的参数&#xff0c;但依然表现出很强的泛化能力&#xff08;指训练好的模型在未见过的数据上的表现&#xff09;。 深度神经网络为何会拥有如此强的泛化能力&…

SQL提升(一)

Sql不常见关键字提升 一、前言 Sql是最重要的关系数据库操作语言&#xff0c;现在基本上任何与数据库相关的操作都离不开sql。所以说sql功能是很强大的。 我们常用的sql关键字不外乎 group by;in; where; from; update……等&#xff0c;这些关键字有时组成sql的基础。 但是…

越大的数据集训练,网络泛化能力越强

虽然这个直观很好理解&#xff0c;但我想找这个论点的论文支持&#xff0c;如果再能找张图就好了&#xff0c;下面是过程 首先是On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima这篇经典文章&#xff0c;里面的这张flat minima和sharp minim…

浅谈深度学习泛化能力

谷歌最近出品的82页论文《ON THE GENERALIZATION MYSTERY IN DEEP LEARNING》&#xff0c;在此我简单归纳下论文的思想&#xff0c;有兴趣的看看原论文。论文链接&#xff1a;github.com/aialgorithm/Blog 一、DNN泛化能力的问题 论文主要探讨的是&#xff0c; 为什么过参数的…

深入理解泛化

文章目录 1.引言2.泛化的定义3.数据集分类4.泛化能力分类5.从训练过程来理解泛化参考资料 1.引言 什么是泛化呢&#xff1f; 先举个栗子&#xff1a; 小明和小李都上了高三。小明头脑机灵&#xff0c;一边刷着五年高考三年模拟一边总结做题规律&#xff0c;而小李一门心思刷题…

机器学习-泛化能力

目录 1.什么是泛化能力 2.什么是好的机器学习模型的提出 3.泛化误差 4.模型泛化能力的评价标准 4.提高泛化能力 5.举例 6.相关引用文献 1.什么是泛化能力 百度百科解释&#xff1a;机器学习算法对新鲜样本的适应能力。 更加具体的解释&#xff1a;学习到的模型对未知…

机器学习中的泛化能力

模型的泛化能力&#xff1a;指机器学习算法对新鲜样本的适应能力。 学习的目的&#xff1a;学到隐含在数据背后的规律&#xff0c;对具有同一规律的学习集以外的数据&#xff0c;经过训练的网络也能给出合适的输出&#xff0c;该能力称为泛化能力。 由此可见&#xff0c;经训练…

神经网络泛化的能力因素,神经网络泛化的能力差

1、BP神经网络当中 所提到的泛化能力是指什么&#xff1f; 就是外推的能力。 很多时候训练的网络对于训练的数据能很好的拟合&#xff0c;但是对于不在训练集内的数据拟合就很差强人意了。这种情况就叫泛化能力----差。也就是说可能你的网络存在过拟合的现象。 谷歌人工智能写…

【深度学习】常见的提高模型泛化能力的方法

前言 模型的泛化能力是其是否能良好地应用的标准&#xff0c;因此如何通过有限的数据训练泛化能力更好的模型也是深度学习研究的重要问题。仅在数据集上高度拟合而无法对之外的数据进行正确的预测显然是不行的。本文将不断总结相关的一些方法。 一、模型角度 Dropout 首先随…

TCP/IP报文格式

1、IP报文格式    IP协议是TCP/IP协议族中最为核心的协议。它提供不可靠、无连接的服务&#xff0c;也即依赖其他层的协议进行差错控制。在局域网环境&#xff0c;IP协议往往被封装在以太网帧&#xff08;见本章1.3节&#xff09;中传送。而所有的TCP、UDP、ICMP、IGMP数据…