ASLR技术

article/2025/10/13 19:51:35

简述

ASLR(Address Space Layout Randmoization,地址空间布局随机化)是一种针对于缓冲区溢出的安全保护技术。

windows 内核版本

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

微软从windows Vista开始升级采用新的Major Kernel Version 6(Major版本号从5升级为6约用了7年)。微软从windows Vista(Kernel Version 6)开始使用ASLR技术,以进一步加强系统安全性

ASLR

借助ASLR技术,PE文件每次加载到内存的起始地址都会随机变化,并且每次运行程序时相应进程的栈以及堆的起始地址也会随机变化。即每次EXE文件运行时加载到进程内存的实际地址都不同,最初加载DLL文件时装载到内存中的实际地址也是不同的

微软改用这种方式加载PE文件的原因何在呢?是为了增加系统安全性。大部分windows OS 安全漏洞(一般为缓冲区溢出)只出现在特定的OS,特定模块,特定版本中。以这些漏洞为目标的漏洞实利用代码(exploit code),特定内存地址以硬编码形式编入(因为在以前的OS中,根据OS版本不同,特定的DLL总会加载到固定的地址)。因此,微软采用了这种ASLR技术,增加了恶意用户编写漏洞利用代码的难度,从而降低了利用OS安全漏洞破坏系统的风险(UNIX/Lunix OS等都已采用了ASLR技术

visual c++

请注意,并不是所有的可执行文件都自动应用了ASLR技术。如上所述,OS的内核版本必须为6以上,并且使用的编程工具得支持/DYNAMICBASE选项,一般使用VS创建可执行程序时,Exe 的Imagebase默认为0x400000,dll文件的Imagebase默认为0x10000000,但如果编译它们的时候,如果默认开启了/DYNAMICBASE选项,那么ASLR技术就会被应用到编译的文件之中

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

若不想应用ASLR技术,只需将“随机基址”选项改为“/AYNAMICBASE:NO”即可,如下图
在这里插入图片描述

ASLR.exe

采用了ASLR技术的EXE:

第一次载入OD:

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

第二次载入OD:

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

未采用了ASLR技术的EXE:

第一次载入OD:

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

第二次载入OD:

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

总结:

采用了ASLR技术生成的exe,如果使用的操作系统是VISTA以上版本的,那么每次运行时地址都会随机变化。如果为采用ASLR技术生成的exe,EP代码地址与栈地址未变化,就像在XP系统看到的系统

节区信息

在这里插入图片描述
左侧为采用ASLR技术的exe程序,右侧为未采用ASLR技术的exe程序,可以清楚地看到左侧多出1个名为“.reloc”的节区。

一般而言,普通的exe程序中是不存在.reloc节区的,该节区仅在应用了ASLR技术中的程序才会出现,它是在编译时由编译器生成并保留在可执行文件中的。PE文件被加载到程序时,该节区被用作重定位的参考,它不是exe程序的运行的必需部分,可将其从PE文件中删除(但是由于DLL文件中总是需要重定位,所以在DLL文件中不可将其删除)。最重要的部分是IMAGE_FILE_HEADER\CharacteristicsIMAGE_OPTIONAL_HEADER\DLL_Characteristics这2个字段

IMAGE_FILE_HEADER\Characteristics

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

各位看加载的名字都能看出哪一个是采用了ASLR技术,哪一个是未采用ASLR技术。对于拥有.reloc节区的ASLR.exe程序来说,IMAGE_FILE_HEADER\Characteristics属性字段并不存在IMAGE_FILE_RELOCS_STARIPPED(1)标志(由于ASLR.exe程序中多出一个.reloc节区,所以Number of Sections值增1)

IMAGE_OPTIONAL_HEADER\DLL_Characteristics

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

ASLR.exe程序的IMAGE_OPTIONAL_HEADER\DLL_Characteristics中设有IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE(40)若VS中开启了/DYNAMICBASE选项,编译程序文件时就会设置上该标志值

删除ASLR功能

我们使用hex Editor工具修改ASLR.exe程序,以此来删除ASLR功能,从上可知,IMAGE_OPTIONAL_HEADER\DLL_Characteristics中设有IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE(40)标志,删除它即可删除ASLR功能。即在hex editor中将DLL属性值由8140改成8100(位于146偏移处的WORD值)
在这里插入图片描述
在这里插入图片描述
修改后:(这里我用CFF修改的)
在这里插入图片描述
在这里插入图片描述
ASLR_edit拖进OD尝试一下,gogogo

第一次载入OD:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

第二次载入OD:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

好家伙,成功了,普天同庆!!!!

补充

当然,也可以通过修改PE文件头向文件中添加ASLR功能,但这样做没有什么意义,所以一般都不会这么做,因为,向没有重定位节区(.reloc)的PE文件添加ASLR功能后,文件运行时可能会因为不正确的内存引用而发生错误。

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


http://chatgpt.dhexx.cn/article/p6AWmNn8.shtml

相关文章

ASLR

ASLR 一、ASLR是什么?二、测试ASLR技术1.一个简单的源文件2.生成ALSR.exe与ALSR_no.exe3.使用OllDbg调试器查看程序入口地址与栈地址3.1 ASLR.exe3.2 ASLR_no.exe 4.使用CFF Explorer查看PE文件信息4.1 重定位表的区别4.2 IMAGE_FILE_HEADER/Characteristics属性4.3…

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

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

ALSR

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

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

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

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

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

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

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

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 首先随…