对windows自带EFS加解密的研究

news2024/11/19 3:23:38

0x00 前言

0x01 测试环境

windows7专业版SP1:
在这里插入图片描述
在虚拟机中运行,创建了快照,当前账户名和密码为jizong/123456

0x02 EFS加解密原理:

EFS加密实际上综合了对称加密和不对称加密,具体流程如下:
(1) 随机生成一个文件加密密钥(叫做FEK),用来加密和解密文件。
(2) 这个FEK会被当前帐户的公钥进行加密,加密后的FEK副本保存在文件$EFS属性的DDF字段里。
(3) 要想解密文件,首先必须用当前用户的私钥去解密FEK,然后用FEK去解密文件。
除了上面的步骤,操作系统还会对EFS添加两层保护措施:

(1) Windows会用64字节的主密钥(Master Key)对私钥进行加密,这个私钥并非系统安装之后就存在,而是第一次进行加密时生成,下图可以看到,刚安装的新系统中不存在Crypto文件夹。加密后的私钥保存在以下文件夹:
  %UserProfile%\Application Data\Microsoft\Crypto\RSA\SID
  在这里插入图片描述

Windows系统里的各种私有密钥,都用相应的主密钥进行加密。Windows Vista的BitLocker加密,也用其主密钥对FVEK(全卷加密密钥)进行加密。

(2) 为了保护主密钥,系统会对主密钥本身进行加密(使用的密钥由帐户密码派生而来),加密后的主密钥保存在以下文件夹:
  %UserProfile%\Application Data\Microsoft\Protect\SID

0x03 各个密钥存放位置

1.加密后的主密钥:
在这里插入图片描述
2.使用主密钥加密后的私钥:
(这里选择一个文件,对其点击“加密内容以便保护数据”)
在这里插入图片描述
进行上述操作之后可以看到,%UserProfile%\Application Data\Microsoft\下生成了Crypto文件夹:
在这里插入图片描述
加密后的私钥就存在Crypto文件夹中:
在这里插入图片描述
在上面的加密操作中,操作系统会提示你导出证书,这里也测试一下导出证书后删除私钥的功能是不是删除Crypto文件夹的内容:
在这里插入图片描述
可以看到私钥确实因为导出证书时勾选了“如果导出成功则删除私钥”而被删掉了。

0x04 有主密钥和私钥条件下使用AdvancedEFSDataRecovery解密EFS加密的文件

上面的操作中,我把主密钥和私钥以及加密文件拷贝了出来,然后另起一个账户,尝试使AdvancedEFSDataRecovery解密。
首先切换到另一个账户test:
在这里插入图片描述
可以看到在test账户下,被加密的文件是绿色的,无法访问:
在这里插入图片描述
在这里插入图片描述
我们使用当前用户安装AdvancedEFSDataRecovery:
在这里插入图片描述

1.使用证书解密:

由于之前导出过证书,先测试一下证书解密:
在这里插入图片描述
上面的密码是之前导出证书时设置的密码。
填入证书路径和密码之后按回车,开始扫描:
在这里插入图片描述
使用证书成功解密:
在这里插入图片描述
在这里插入图片描述

2.使用私钥解密:

上面使用证书解密是最简单的情况,但是实际上很多人不会导出证书,就纯手贱要去点一下这个加密。
现在假设我们手上有主密钥,有私钥,在这种情况下测试使用AdvancedEFSDataRecovery进行恢复:
之前我们将主密钥和私钥复制了一份放在D盘:
在这里插入图片描述
然后回到AdvancedEFSDataRecovery,选择“我没有证书,所以程序应当搜索硬盘以寻找加密密钥”:
在这里插入图片描述
这里把“按扇区扫描”勾上:
在这里插入图片描述

然后得到一个结果,要求输入用户名和密码,这里的用户名和密码必须是加密文件的那个windows账号的用户名和密码,我这里就是jizong/123456。然后提示一个私钥被发现且被成功解密,现在你可以点击next按钮去扫描加密文件:
在这里插入图片描述
扫描的结果,然后点击next:
在这里插入图片描述
也能解密成功。

0x05 重装系统及私钥丢失情况下的EFS解密(看运气)

本节研究重装系统后,或者私钥被误删而加密文件的windows用户又被删掉情况下的EFS解密。
这种情况就比较极端了,能不能恢复完全看运气。这些情况下,满足两种前情况中任意一种下罗列的所有条件,则可以恢复:
情况一 以前导出过证书:
1.证书能够使用数据恢复工具恢复出来(比如easyrecovery或者winhex、DiskGenius等)
2.需要记得导出证书时候设置的密码

情况二 私钥能恢复:
1.私钥能够使用数据恢复工具恢复出来(比如easyrecovery或者winhex、DiskGenius等)
2.记得加密文件时使用的windows账户的账号密码

上述两种情况,满足任意一种都能解密,如果不满足,那就很悬了。

所以,当出现重装系统或账户被删、私钥丢失等极端情况,应不再使用电脑,避免数据被覆盖,直接进入PE,使用数据恢复工具看能不能把私钥或者证书恢复过来。

下面测试私钥丢失情况下通过DiskGenius恢复私钥,进而解密文件:
上一节的实践证明,只需要恢复私钥这一个文件,配合账号密码就可以解密,因此,我们将D盘备份的私钥删掉,并清空回收站,然后使用DiskGenius恢复:

-----------end------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于 MsgWaitForMultipleObjects 的理解

你是否希望有一个 WaitMessageTimeout 函数能帮助你干些特别的活? 很抱歉,没有这东西。 但是,你可以借助另外一个函数 MsgWaitForMultipleObjects 来间接的实现它。怎么做呢?请看下文。 >> 请移步至 topomel.com 以查看图片…

电弧打火机方案,点烟器单片机开发方案

市面上的打火机除了明火之外,还有电热丝、电弧两种类型的点烟器。电热丝在使用过程中会变细并且烧断。宇凡微推出的电弧打火机方案,该点烟器芯片为宇凡微单片机YF系列,电弧点烟器IC性价比高。 一、电弧打火机方案的原理 电弧打火机使用的是电…

量子机器学习Variational Quantum Classifier (VQC)简介

变分量子分类器(Variational Quantum Classifier,简称VQC)是一种利用量子计算技术进行分类任务的机器学习算法。它属于量子机器学习算法家族,旨在利用量子计算机的计算能力,潜在地提升经典机器学习方法的性能。 VQC的…

【Python】一文带你了解并使用 Json 模块

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

【历史上的今天】6 月 13 日:分组交换网路的“亲子纠纷”;博弈论创始人出生;交互式电视初现雏形

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 6 月 13 日,知名的 ENIAC 建造者约翰莫克利在历史上的这一天参观了 ABC 计算机,与 ABC 的设计者之一阿塔纳索夫会面。这次会面后来牵扯…

java发送QQ邮箱验证码实现登录注册、邮箱验证码防刷校验

文章目录 一:前台功能实现1.1 页面编写1.2 发送验证码——sendEmailCode1.2.1 远程调用发送接口1.2.1 接口防刷校验——60s内只能发送一次 二:获取QQ邮箱授权码2.1 登录QQ邮箱2.2 开启SMTP权限2.2.1 设置2.2.2 账户2.2.3 管理服务2.2.4 生成授权码2.2.5 …

新能源商用车:老玩家、新势力“争先恐后”

现如今,作为重要出行交通工具之一的汽车,已经在人们日常生活中扮演着愈发重要的角色。不仅如此,汽车行业也发生了不小的变化,新能源汽车的热度更是居高不下。除了各路玩家积极布局之外,新能源汽车的销量也是持续走高。…

python---列表和元组(1)

变量就是内存空间,用来表示/存储数据. 如果表示的数据少,直接定义几个变量就行了. 但是有的时候表示的数据比较多,就很麻烦 在python中就有列表和元组,就是这样的机制,可以用一个变量表示很多的数据. 这就类比于其他编程语言中的"数组" 列表和元组大部分的功能是差…

智安网络|深谈网络安全难点的根源和解决之道

随着数字化和网络化的加速发展,人们面临的网络安全问题日益增多。由于网络安全威胁的多样性和复杂性,网络安全防护变得越来越困难。本文将从几个方面来探讨网络安全难点的根源和解决之道。 一. 网络安全威胁的复杂性 网络安全威胁种类繁多,主…

Junit执行器Runner探索之旅 | 京东云技术团队

单元测试是每个程序员必备的技能,而Runner是每个单元测试类必有属性。本文通过解读Junit源码,介绍junit中每个执行器的使用方法,让读者在单元测试时,可以灵活的使用Runner执行器。 一、背景 在今年的敏捷团队建设中,…

07 lvgl-边框样式

void lv_100ask_demo_course_2_1_1(void){ static lv_style_t style;lv_style_init(&style);/*Set a background color and a radius*/lv_style_set_radius(&style, 5); //半径lv_style_set_bg_opa(&style, LV_OPA_COVER); //透明度lv_style_set_bg_color(&st…

xlsx是什么格式的文件?xlsx文件删除了怎么恢复

如果您在工作中不小心删除了重要的xlsx文件怎么办?xlsx文件删除了怎么恢复?本文将介绍如何在不同情况下恢复xlsx文件的实用技巧,帮助您有效的找回文件。 第一部分:xlsx是什么格式的文件 XLSX是一种电子表格文件格式,…

JAVA 实现 Redis 发布订阅

Redis 发布订阅 发布订阅:消息发布者发布消息 和 消息订阅者接收消息,两者之间通过某种媒介联系起来 例如订杂志,当自己订阅了爱格杂志,每个月会发刊一本。到发布的时候派送员将杂志送到自己手上就能看到杂志内容。只有我们订阅了…

为什么美颜插件比传统集成方式更快?

都说云市场插件快,快在哪里呢? 美颜功能是实时互动应用的基础功能,广泛应用在社交、直播、约会、会议等场景,开发者们往往在集成美颜功能时候非常头疼。今天,我们来介绍云市场美颜插件相比传统的裸数据集成方式快在哪…

Unity与原生交互之Unity篇——AndroidStudio导出aar/jar包供Unity使用实现交互全流程(2)

序言:此篇介绍在(1)的基础上引入Unity的API库进行交互,原生调Unity 1.导入Unity库 注意: (1)老版本Unity的classes.jar里包含UnityPlayerActivity API (2)新版本Unity的UnityPlayerActivity API 在UnityEditor安装路径中,需单独导入,后续介绍 1.1导入unity的classes.jar …

Seesion会话超时时间测试-业务安全测试实操(3)

Seesion会话超时时间测试, Cookie仿冒测试, 密文比对认证测试 本地加密传输测试-业务安全测试实操(2)_luozhonghua2000的博客-CSDN博客 测试原理和方法 在用户成功登录系统获得Session认证会话后,该Session认证会话应具有生命周期,即用户在成功登录系统后,如果在固定时间内…

反汇编逆向实战——扫雷辅助制作

一、编程前准备 刚开始是预备知识,如果熟悉的话,可以直接跳到第二部分阅读 在 Windows API 中,SetTimer 函数用于创建一个定时器,并在指定的时间间隔后触发一个定时器消息。以下是关于 SetTimer 函数的介绍: 功能&a…

接口文档设计注意事项

接口名称清晰 一般接口url要求能看得出接口的作用。比如说,查询用户信息(queryUserInfo),就是一个不错的接口名称。 接口地址完整 接口的地址,也叫接口的URL地址。即别人调用你的接口,用的是什么URL。比…

【Unity Shader】入门到惊叹(1)基本概念:什么是网格?材质?Shader?

文章目录 一、什么是网格(Mesh)?二、什么是MeshFilter(网格过滤器)?三、什么是MeshRenderer(网格渲染器)?四、什么是材质(Material)?五、什么是Shader(着色器)?一、什么是网格(Mesh)? 如图,模型的三角形面就叫做网格(Mesh),它的本质是一堆顶点数据的规则排…

华为OD机试真题 JavaScript 实现【按身高和体重排队】【2022Q4 100分】,附详细解题思路

一、题目描述 某学校举行运动会,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列,对身高相同的人,按体重由轻到重排列; 对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生…