系统自带的EFS文件加密是很多朋友加密私人文件的好选择,它简单高效用起来不麻烦。但是当重装系统尤其是格式化重装系统之后,如果没有正确地备份私钥,那么加密的文件将无法打开,伤心的是加密的文件也暂时没有办法进行快速破解。EFS加密设计完备,并非重装后用相同用户名+密码就可以解密的,所以很多人不得不含泪删除那些无法打开的文件。加密而丢失数据不仅仅是菜鸟常犯的毛病,高手也常常失足于此。
EFS加密的用法和恢复的关键
EFS是Windows2000以后系统自带的一项加密技术,安全性很高。这项加密基于NTFS分区系统,特点是对用户透明。也就是说,在同一台电脑上如果你用某个用户加密了一个文件,那么除了加密的用户谁都无法打开这个文件,即使你是系统管理员也不行。而如果你用正确的账户登录,访问加密文件的时候系统实时解密和加密,你完全感觉不到差别。加密过的文件的名称在电脑中显示为绿色。
EFS加密方法
选择一个文件或者文件夹,点击右键→属性,"常规"选项卡→高级→勾寻加密内容以便保护数据",点击"确定"就完成加密了。
备份恢复证书/私钥
按照标准的流程,备份私钥的方法如下:开始菜单的运行中输入certmgr.msc并回车→个人→证书→选择证书→点击右键,选择"所有任务"→导出→选择"导出私钥"。接下来按照向导操作即可。当需要恢复证书(私钥)的时候,双击导出来的文件,输入之前设置的密码按向导导入就可以了。这个私钥一定要保管好,如果你有这个私钥就不用像本文一样折腾了。
Part1 原理:我们如何恢复EFS加密的文件?
了解了前面小知识所讲的EFS的用法之后,我用比较通俗、简单的流程大致介绍一下EFS的工作流程(实际工作流程比介绍的要复杂多了,这里简述是为了便于理解),这对我们的恢复工作非常有帮助。首先系统由账户密码派生的密钥对公钥加密,然后使用公钥对私钥进行加密(私钥是第一次使用的时候随机产生),加密后的私钥保存在%UserProfile%Application DataMicrosoftCryptoRSA\SID,%UserProfile%表示用户文件夹例如C:Documents and Settingsadministrator。所以我们要恢复数据除了得到私钥还需要获得公钥和证书,公钥和公钥证书保存在%UserProfile%Application Data MicrosoftSystemCertificatesMyCertificates。加密后的主密钥保存在%UserProfile%Application DataMicrosoftProtectSID,这个东西也需要一并获得,建议在恢复过程中尝试把所有的用户文件夹里的东西全部恢复出来。
获得这三个文件夹里面的文件之后是不是覆盖到新装电脑的新用户下面就可以了呢?不行,新用户的SID(安全标识符,security identifiers)和老用户不一样,还需要修改SID。也许说了这么多你不是很明白,这里再总结一下:恢复的关键有三点:第一、获得公钥和公钥证书、私钥保存的文件、主密钥文件;第二、知道原来用户的密码和用户名;第三点、知道原来用户的SID+RID。接下来我们用实例来看看如何操作吧。
Part2 找回关键的文件和文件夹
知道加密的文件不能打开之后,应该马上关机,然后进入PE环境。在这个环境里使用数据恢复工具把需要的文件给找回来。如果电脑比较老,可以使用老毛桃或者深山红叶的PE,如果电脑比较新,可能需要附加驱动包或者寻找网友制作的新版工具PE,有兴趣可以到无忧启动寻找。而数据恢复工具则可以直接找它们的绿色版放在U盘上,在PE里直接运行它们的主程序即可进行恢复工作。恢复工具可以使用easyrecovery、finaldata、r-studio、Winhex等等,本文用easyrecovery作为讲解的例子,如果你在实际恢复过程中,发现文件找不到或者找到的文件是坏的,那么请换另一个软件试试看。在这里告诉大家以我的经验来看Advanced EFS Data Recovery这个软件对格式化重装系统后恢复EFS文件没有任何效果。
Step1、用Ultariso制作U盘版PE,用U盘引导进入pe环境。直接运行U盘上的easyrecovery主程序。
Step2、在easyrecovery主界面中选择"数据恢复"→格式化恢复→选择分区→点击"下一步"。等待扫描和目录构建完成。
Step3、在找到的文件中,根据目录树把前面提到的几个文件夹全部恢复出来放置到U盘中,另外还要记下%UserProfile%Application DataMicrosoftCryptoRSASID这个"SID"文件夹的名称。如果目录树中找不到文件夹,那么请进入"Lostfile"文件夹,在里面的"DIR*"文件夹中逐一寻找。或者使用"查找"功能查找"Crypto"关键词。但是我觉得这个查找功能不够强大,如果"查找"功能查找不到的话,建议大家还是手动找一次吧,别轻易放弃。而且需要提醒大家的是,如果找到多个文件,可以通过"日期"判断需要恢复哪一个。
Step4、回忆用户名和密码或者问当事人要原来的用户名和密码。
Part3构造一个可以解密文件的用户,解密被加密文件
如果你对系统有"洁癖"不愿意增加任何多余的文件和垃圾配置,那么可以在进行这一步之前对当前系统做一个GHOST备份。
Step1、首先观察我们之前在第一步step3得到的这串数值:S-1-5-21-842925246-879983540-1417001333-1003,后面的1003是RID,SID是前面的部分。
Step2、构造SID,这里我们用微软提供的一个小工具来改变SID,工具的名称叫做Newsid。程序之后,先同意协议,然后一路下一步直到"Choose a SID";这里选择"Specify"下面输入需要修改的SID,之后继续"Next",完成之后自动重启系统,SID就修改好了。提醒一下,如果只是删除了用户而不是重装系统的话,可以跳过这一步,因为SID本来就是一样的。
Step3、获得system权限。因为修改HKEY_LOCAL_MACHINESAM需要system用户权限。所以这里我们使用微软提供的psexec工具,在开始菜单的运行中输入cmd命令并回车,打开命令提示符窗口。之后使用CD命令定位到psexec所在的目录或者直接以绝对路径例如c: psexec -i -d -s %windir% egedit.exe这样的命令以system用户身份运行注册表编辑器。
小知识:Windows新建用户的RID值由HKEY_LOCAL_MACHINESAMSAMDomainsAccount注册表项的"F"键值确定。具体的说是在0048偏移量的4个字节,是二进制数据。通过修改这个数据可以让新建用户拥有一样的RID。也就是说我们要指定的RID需要通过新建用户实现。
Step4、修改注册表键值。定位到HKEY_LOCAL_MACHINESAMSAMDomainsAccount,找到并打开F键值。因为注册表中键值数据是用16进制形式存放的,而且是反转形式保存。所以在这里我们需要这样做:我们要修改的RID是1003,1003转换为16进制是03EB,翻转过来就是EB03。数据的进制转换可以使用Windows自动的"计算器"转换,别以为这东西没用哦。如果转换出来的数据是3位数例如3EB,则需要在前面补一个0变成4位数03EB。找到对应的0048偏移量,把数值修改为我们上面推算出来的数值。
Step5、依次重启电脑→新建一个同名账户,密码也一样→用新建用户登录系统,使用EFS随便加密一个文件,然后注销或者重启更换管理员账户登录→把恢复出来的文件复制到对应文件夹→重启。当再用新建用户登录的时候,就可以正常解密文件了。