CN103701829A - 一种离线解析dpapi加密数据的方法 - Google Patents
一种离线解析dpapi加密数据的方法 Download PDFInfo
- Publication number
- CN103701829A CN103701829A CN201410004313.4A CN201410004313A CN103701829A CN 103701829 A CN103701829 A CN 103701829A CN 201410004313 A CN201410004313 A CN 201410004313A CN 103701829 A CN103701829 A CN 103701829A
- Authority
- CN
- China
- Prior art keywords
- key
- dpapi
- file
- master key
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开一种离线解析DPAPI加密块数据的方法,包括步骤:S1.加载待分析设备数据源,确定待分析设备数据源磁盘Windows操作系统分区;S2.获取系统账号主密钥文件、System文件和Security文件;S3.通过扫描DPAPI加密块特征值获取待解密文件的DPAPI加密块;S4.解析System文件和Security文件获取Pbkdf2密钥明文;S5.获取解密系统账号主密钥文件所需的关键信息,使用Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文;S6.使用主密钥解密DPAPI加密块得到数据明文。本发明的有益效果为:本发明无需依赖于目标数据源所在的操作系统,也无需知道计算机的用户名和密码,即可对DPAPI系统存储区的加密数据进行解密,同时也满足对证据源只读操作和跨平台解密的需求。
Description
技术领域
本发明涉及数据加解密领域,特别是涉及一种离线解析DPAPI加密数据的方法。
背景技术
美国微软公司的Windows操作系统是目前最流行的PC操作系统,其数据安全性一直备受关注。从Windows2000开始,微软提供了一组简单易用的系统级数据保护接口(Data Protection Application Programming Interface,即DPAPI,包含加密函数CryptProtectData和解密函数CryptUnprotectData),为应用程序和操作系统提供数据保护服务。该组接口的显著特点是加密和解密操作必须在同一台计算机上进行,由操作系统内部完成密钥的产生、存储和使用,消除了应用程序密码密钥的管理问题。DPAPI的应用范围十分广泛,如远程桌面密码、FTP账号密码、无线上网密码、EFS的私钥加密、部分邮箱账号密码、常见浏览器的上网自动表单、以及国内外的一些即时通讯软件,在密码密钥的保护上也用到了该组接口。所以离线解析DPAPI加密数据,在电子取证行业有着不小的现实意义。
目前,大部分的取证软件都是采用现场在线的方式解析DPAPI加密数据,即通过直接启动或动态仿真数据源所在的操作系统,登录对应的账户,安装并启动取证软件,软件内部通过调用CryptUnprotectData函数来解密DPAPI的加密数据块,最后在界面上展示结果。这种方法直接依赖于目标源操作系统,如果系统遭破坏无法启动则数据无法解密,且操作过程中容易污染数据源,破坏证据的只读性。
另外,国内虽有一专利提出了针对用户存储区的DPAPI加密数据的解密,该方法能够解析用户账户级的加密数据,但需要事先知道用户登录账户对应的SID和明文密码,否则无法解密,同时该方法只针对DPAPI用户存储区的加密数据,无法针对系统存储区、也就是本机系统级的DPAPI加密数据进行解密。
发明内容
为解决上述技术问题,本发明提供了一种无需依赖于目标数据源所在的操作系统,且无需知道待解密数据源操作系统用户登录账户密码,即可对DPAPI系统存储区的加密数据进行解密的离线解析DPAPI加密数据的方法。
一种离线解析DPAPI加密数据的方法,包括步骤:S1、加载待分析设备数据源,确定待分析设备数据源磁盘Windows操作系统分区;S2、根据所述操作系统分区获取系统账号主密钥文件、System文件和Security文件;S3、通过扫描DPAPI加密块特征值获取待解密文件的DPAPI加密块;S4、解析System文件和Security文件获取Pbkdf2密钥明文;S5、获取解密系统账号主密钥文件所需的关键信息,使用Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文;S6、使用主密钥解密DPAPI加密块得到数据明文。
本发明的有益效果为:本发明通过Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文,由主密钥解密DPAPI加密块得到数据明文,实现对DPAPI系统存储区加密数据进行离线解析,并且本发明无需直接启动或动态仿真数据源所在设备的操作系统就能实现以只读方式读取数据源DPAPI加密数据,无需登录用户的账号和明文密码即可进行数据解密。进一步地,本发明不依赖于WindowsCryptAPI库,无需调用CryptAPI函数接口,可满足跨平台使用的要求。
附图说明
图1为本发明实施方式一种离线解析DPAPI加密数据的方法的流程图。
具体实施方式
为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
一、对本发明涉及的缩略语和关键术语进行定义和说明:
DPAPI:(Data Protection Application Programming Interface)
加密函数CryptProtectData:微软Windows操作系统提供的加密接口;
解密函数CryptUnprotectData:微软Windows操作系统提供的解密接口;
DPAPI加密块:用加密函数CryptProtectData加密过的数据;
Pbkdf2运算:一种基于迭代复杂度保证密码安全的加密算法(Password-Based Key Derivation Function2),首先,它需要选取一种传统的加密算法,通常为单向散列算法,如SHA-1算法做为它的基础加密算法;其次,它需要指定迭代次数和干扰值,这个迭代次数是用来确定基础加密算法被执行的次数,次数越多则密码被暴力破解的可能性越低,数据越安全;
MD5哈希运算:单向散列算法,产生长度为128位的消息摘要;
SHA-1哈希运算:单向散列算法,产生长度为160位的消息摘要;
SHA256哈希运算:单向散列算法,产生长度为256位的消息摘要;
SHA-512哈希运算:单向散列算法,产生长度为512位的消息摘要;
DES-3:三重数据加密标准(Triple Data Ecryption Standard),一种对称密钥加密算法,衍生于DES加密算法;
AES-256:高级加密标准(Advanced Entryption Standard),在密码学中又称Rijndael加密法,也是一种对称密钥加密算法,安全性高于DES;
HMAC算法:加密散列函数,又叫做基于散列的消息认证代码(Hash-basedMesssage Authentication Code),使用加密散列函数需要一个密钥,同时还需指定一个散列函数,可以是MD5或SHA-1等,HMAC主要用来确定加密的数据不被篡改;
主密钥文件唯一标识masterKeyGuid:主密钥文件的文件名,是一个全局唯一标识的Guid字符串,存放在系统账号目录;
数据块加密算法标识dwCryptoAlgId:算法标识(ALG_ID)是微软定义的一系列32位整数类型值,用于指明运算过程中所采用的加密或哈希算法。其中,以0x66开头的标识通常标识对称加密算法,以0x80开头的标识通常标识哈希算法。例如加密算法标识CALG_3DES,其对应值为0x6603,表示为三重数据加密标准算法;
加密密钥长度dwCryptoAlgIdKeyBitLen:加密算法的密钥位数,例如DES-3加密算法的密钥长度是168位;
加密算法干扰值pbyCryptoAlgSalt:干扰值(Salt Value),也叫做“盐”,通常也是随机数,算法中加入干扰值可以有效防止预先计算好的彩虹表的攻击;
数据块哈希算法标识dwHashAlgId:算法标识(ALG_ID)是微软定义的一系列32位整数类型值,用于指明运算过程中所采用的加密或哈希算法。其中,以0x66开头的标识通常标识对称加密算法,以0x80开头的标识通常标识哈希算法。例如哈希算法标识CALG_MD5,其对应值为0x8003,表示为MD5哈希散列算法;
消息摘要长度dwHashDigestBitLen:哈希算法计算后得到的散列值长度,如MD5哈希算法的消息摘要长度是128位;
密文长度dwDpapiCipherLen:Dpapi加密数据块的大小;
主密钥干扰值pbkSalt:干扰值(Salt Value),也叫做“盐”,通常也是随机数,算法中加入干扰值可以有效防止预先计算好的彩虹表的攻击;
Pbkdf2算法迭代次数dwPbkdf2Num:Pbkdf2算法的迭代次数,该值越高也不容易被破解,但运算速度也会相应受影响;
主密钥哈希算法标识dwHmacAlgId:算法标识(ALG_ID)是微软定义的一系列32位整数类型值,用于指明运算过程中所采用的加密或哈希算法。其中,以0x66开头的标识通常标识对称加密算法,以0x80开头的标识通常标识哈希算法。例如哈希算法标识CALG_MD5,其对应值为0x8003,表示为MD5哈希散列算法;
主密钥加密算法标识dwCryptoAlgId:算法标识(ALG_ID)是微软定义的一系列32位整数类型值,用于指明运算过程中所采用的加密或哈希算法。其中,以0x66开头的标识通常标识对称加密算法,以0x80开头的标识通常标识哈希算法。例如加密算法标识CALG_3DES,其对应值为0x6603,表示为三重数据加密标准算法;
主密钥密文pbyMasterCipher:主密钥经过加密后生成的密文;
SID:安全标识符(Security Identifiers),是标识用户、组和计算机账号的唯一号码;
JD:注册表当前使用的系统安全策略的子键之一;
Skew1:注册表当前使用的系统安全策略的子键之一;
GBG:注册表当前使用的系统安全策略的子键之一;
Data:注册表当前使用的系统安全策略的子键之一;
System文件:Windows的注册表文件之一,存储计算机硬件和系统的信息;
Security文件:Windows的注册表文件之一,存储安全性设置信息;
Syskey:用来保护系统SAM文件的一个密钥,长度一般为16个字节;
二、对本发明的技术方案进行详细阐述如下:
请参阅图1,为本发明一实施方式一种离线解析DPAPI加密数据的方法的流程图,该方法包括步骤:
S1、加载待分析设备数据源,确定待分析设备数据源磁盘Windows操作系统分区;
S2、根据所述操作系统分区获取系统账号主密钥文件、System文件和Security文件;
S3、通过扫描DPAPI加密块特征值获取待解密文件的DPAPI加密块;
S4、解析System文件和Security文件获取Pbkdf2密钥明文;
S5、获取解密系统账号主密钥文件所需的关键信息,使用Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文;
S6、使用主密钥解密DPAPI加密块得到数据明文。
所述步骤S1具体包括步骤:
S11、通过写保护设备加载待分析设备数据源;
S12、通过识别Windows文件夹、注册表文件、休眠文件和页面交换文件的路径确定待分析设备数据源磁盘Windows操作系统的系统分区。
所述写保护设备可以是只读锁设备也可以是只读设备,采用写保护设备进行数据读取可以防止对待分析设备数据源造成数据破坏。
以真机环境下C盘为系统分区为例,所述步骤S2中操作系统账号的主密钥文件、System文件和Security文件的完整路径如表一所示:
表一、主密钥文件、System文件和Security文件的路径
名称 | 路径 |
主密钥文件 | C:\WINDOWS\system32\Microsoft\Protect\S-1-5-18\ |
System文件 | C:\WINDOWS\system32\config\System |
Security文件 | C:\WINDOWS\system32\config\Security |
所述步骤S3中DPAPI加密块特征值为DPAPI加密块头部20个固定字节:{0x01,0x00,0x00,0x00,0xD0,0x8C,0x9D,0xDF,0x01,0x15,0xD1,0x11,0x8C,0x7A,0x00,0xC0,0x4F,0xC2,0x97,0xEB}。
所述步骤S3还包括记录DPAPI加密块在待解密文件中的偏移量。
所述DPAPI加密块是调用加密函数CryptProtectData后输出的加密数据块,其头部20个字节固定为{0x01,0x00,0x00,0x00,0xD0,0x8C,0x9D,0xDF,0x01,0x15,0xD1,0x11,0x8C,0x7A,0x00,0xC0,0x4F,0xC2,0x97,0xEB},通过扫描指定的待解密文件,根据所述DPAPI加密块特征值,即可确定待解密文件是否包含DPAPI加密块、以及DPAPI加密块在待解密文件中的偏移量。
所述步骤S4具体包括步骤:
S21、解析System文件获取操作系统当前使用的控件组;
在真机环境下当前使用的控件组ID存放在HKEY_LOCAL_MACHINE\SYSTEM\Select\Current,初始状态下该值为1。由此可以索引当前使用的控件组ControlSet{ID},这些控件组中包含了操作系统配置的信息,比如服务、驱动、系统控制、枚举信息等等。一般情况下默认的控件组为HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001。
S22、根据操作系统当前使用的控件组计算操作系统的syskey;
所述syskey是用来保护系统SAM文件的一个密钥,长度一般为16个字节。所述计算方法是根据操作系统当前使用的控件组,读取表二中四个键的Class值,得到16字节Class值后根据移位表Relocation Table{11,6,7,1,8,10,14,0,3,5,2,15,13,9,12,4}进行换位,即可得到操作系统的syskey。
表二、JD、Skew1、GBG、Data的注册表路径
S23、解析Security文件获取本地安全认证子系统服务的相关配置信息,从相关配置信息中读取系统安全策略版本号值PolRevision,判断PolRevision是否大于0x00010009;
Security文件为注册表文件,通过解析Security文件可以获取本地安全认证子系统服务的相关配置信息(Local Security Authority Subsystem Service,即系统进程Lsass.exe),读取系统安全策略版本号值PolRevision。真机环境下注册表路径为HKEY_LOCAL_MACHINE\Security\Policy\PolRevision,该值与操作系统的版本有关,如表三所示:
表三、不同操作系统对应的PolRevision值
操作系统 | PolRevision值 |
Windows2000 | 0x00010005 |
Windows XP&Windows2003 | 0x00010007 |
Windows Vista | 0x00010009 |
Windows7 | 0x0001000A |
以Windows Vista(0x00010009)为分水岭,Vista之前的操作系统DPAPI加密较为简单,Vista之后(包括Vista)的操作系统DPAPI加密流程更为复杂,安全性也更高。通过判断PolRevision是否大于0x00010009可以对操作系统进行划分。
S24、当PolRevision小于0x00010009时,读取系统安全策略加密密钥PolSecretEntryptionKey,并读取Pbkdf2密钥的密文内容CurrVal;
当PolRevision小于0x00010009时,此时操作系统为Vista之前的操作系统,Vista之前的操作系统只有一个系统安全策略加密密钥PolSecretEntryptionKey,长度固定为76个字节,存放路径为HKEY_LOCAL_MACHINE\Security\Policy\PolSecretEntryptionKey。在真机环境下Pbkdf2密钥的密文内容CurrVal存放路径为HKEY_LOCAL_MACHINE\Security\Policy\Secrets\DPAPI_SYSTEM\CurrVal。
S25、判断CurrVal的第八个字节的值是否为1,当为1时,使用Key1对Pbkdf2密文进行DES解密得到Pbkdf2密钥明文,否则,使用key2对Pbkdf2密文进行DES解密得到Pbkdf2密钥明文,所述key1为用Unicode编码字符串“823543”做为密码,字符串“823543”的长度和内容做为明文,进行DES加密得到的一个24字节的密文。所述key2为对syskey进行一次MD5哈希运算,并将该运算结果做为参数对系统安全策略加密密钥PolSecretEntryptionKey的60~76字节进行1000次的MD5哈希运算得到散列值K1,再将散列值K1做为RC4算法的解密密钥对PolSecretEncryptionKey的12~60字节进行RC4解密得到的明文,PolSecretEncryptionKey头部16个字节固定为{0x80,0x3A,0xCE,0xF0,0x5F,0x15,0xD3,0x11,0xB7,0xE6,0x00,0x80,0x5F,0x48,0xCA,0xEB},可用于校验key2结果的正确性。
Vista之前的操作系统CurrVal前四个字节记录长度,第八个字节为版本号,当版本号为1时使用Key1做为Pbkdf2密钥密文的解密密钥,当版本号为2时使用Key2做为解密密钥,对密文内容进行DES解密,即可得到最终的Pbkdf2密钥,长度为20字节。
S26、当PolRevision大于或等于0x00010009时,此时操作系统为Vista之后的操作系统,系统安全策略加密密钥PolEKList存放在HKEY_LOCAL_MACHINE\Security\Policy\PolEKList,因为PolEKList可能包含多个密钥,需构建一个(索引值-密钥值)的密钥链表KeyList。PolEKList的关键内容是经过加密的,其解密方法为:读取系统安全策略加密密钥链表PolEKList,对syskey进行一次SHA256哈希运算,并将该运算结果做为参数对PolEKList的28~60字节进行1000次SHA256哈希运算得到散列值K2,将散列值K2做为AES-256算法的解密密钥对PolEKList60字节之后的内容进行AES-256解密得到PolEKList中密钥的个数、索引值和对应的密钥值。
S27、构建一个内容为索引值与密钥值对应的Pbkdf2密钥链表KeyList,将解密后PolEKList中的索引值和对应的密钥值导入密钥链表KeyList中;
S28、读取Pbkdf2密钥的密文内容CurrVal,在CurrVal的4~20字节中取得PolEKList的密钥值的索引值,根据该索引值从Pbkdf2密钥链表KeyList中获取PolEKList的密钥;
S29、对PolEKList的密钥进行一次SHA256哈希运算,并将该运算结果做为参数对CurrVal的28~60字节进行1000次SHA256哈希运算得到散列值K3,将散列值K3做为AES-256算法的解密密钥对CurrVal的60字节之后的内容进行AES-256解密得到Pbkdf2密钥明文。
所述步骤S5具体包括步骤:
S31、获取解密系统账号主密钥文件所需的关键信息,该关键信息包括主密钥文件唯一标识masterKeyGuid、加密算法干扰值pbyCryptoAlgSalt、数据块哈希算法标识dwHashAlgId、额外熵参数pOptionalEntropy和数据块哈希算法标识dwHashAlgId;所述关键信息的长度和符号表示如表四所示:
表四、解密系统账号主密钥文件所需的关键信息的长度和符号表示
所述数据块加密算法标识dwCryptoAlgId表示数据块加密的具体算法类型,例如加密算法标识CALG_3DES,其对应值为0x6603,表示为三重数据加密标准算法;
数据块哈希算法标识dwHashAlgId表示数据哈希的具体算法类型,例如哈希算法标识CALG_MD5,其对应值为0x8003,表示采用MD5哈希散列算法;
S32、根据主密钥文件唯一标识masterKeyGuid得到DPAPI加密块的主密钥文件,所述主密钥文件共包含5个数据单元,分别为主密钥头部单元、用户主密钥单元、本地加密密钥单元、历史凭据标识单元和域密钥备份单元;
其中,主密钥头部单元包含一个GUID全局唯一标识,该标识与所述的DPAPI加密块中的主密钥文件唯一标识masterKeyGuid相对应,同时,主密钥头部单元还用来指示各其他各单元占用字节数。历史凭据单元对于DPAPI系统存储区解密没有作用。域密钥备份单元只有域环境下的用户下才有此单元,此单元的数据经过了域管理员的公钥加密处理,对于单机用户无论是什么系统都没有这个单元。对加密主密钥的解析主要是指对用户主密钥单元的解析,用户主密钥单元中包含一个经过加密的二进制加密块,其包含的加密数据经过解密后就是主密钥。
S33、解析用户主密钥单元获取主密钥干扰值pbkSalt、Pbkdf2算法迭代次数dwPbkdf2Num以及主密钥哈希算法标识dwHmacAlgId;
解析用户主密钥单元可以得到表五的关键信息,这些关键信息在不同操作系统下的值是不相同的,如表六所示:
表五、解析用户主密钥单元所得到的关键信息的长度和符号表示
关键信息名称 | 占用长度(字节) | 符号表示 |
主密钥干扰值 | 16 | pbkSalt |
Pbkdf2算法迭代次数 | 4 | dwPbkdf2Num |
主密钥哈希算法标识 | 4 | dwHmacAlgId |
主密钥加密算法标识 | 4 | dwCryptoAlgId |
主密钥密文 | dwMasterCipherLen | pbyMasterCipher |
表六、Pbkdf2算法迭代次数、哈希算法类型和加密算法类型在不同操作系统中的具体值
S34、bySessionKeyAndIV以Pbkdf2算法迭代次数dwPbkdf2Num、主密钥哈希算法标识dwHmacAlgId和主密钥干扰值pbkSalt做为输入参数,对Pbkdf2密钥明文进行Pbkdf2运算,得到运算结果bySessionKeyAndIV;
S35、判断PolRevision是否大于0x00010009;
S36、当PolRevision小于0x00010009时,操作系统为Vista之前的操作系统,所述结果bySessionKeyAndIV长度为32字节,将bySessionKeyAndIV的前24字节和后8字节分别做为DES-3算法的解密密钥和初始化向量对用户主密钥单元的主密钥密文进行DES-3解密,得到的明文最后64字节即为主密钥明文byMasterKey;
S37、当PolRevision大于或等于0x00010009时,操作系统为Vista之后的操作系统,所述结果bySessionKeyAndIV长度为48字节,将bySessionKeyAndIV的前32字节和后16字节分别做为AES-256算法的解密密钥和初始化向量对用户主密钥单元的主密钥密文进行AES-256解密,得到的明文最后64字节即为主密钥明文byMasterKey。
其中,所述步骤S6具体包括步骤:
S41、根据所述数据块哈希算法标识dwHashAlgId对主密钥明文byMasterKey进行哈希运算得到主密钥哈希byMasterKeyHash;
S42、根据所述加密算法干扰值pbyCryptoAlgSalt、数据块哈希算法标识dwHashAlgId、额外熵参数pOptionalEntropy,以主密钥哈希byMasterKeyHash做为输入进行HMAC哈希运算,得到散列值hmacMasterkey;
其中额外熵参数pOptionalEntropy是可选的,在调用CryptoProtectData加密数据时如果设置了该参数,解密时必须提供同样的熵参数,大部分情况下该参数值为空。
S43、根据数据块哈希算法标识dwHashAlgId和数据块加密算法标识dwCryptoAlgId,以散列值hmacMasterkey做为输入,生成对称解密密钥lastSessionKey;
S44、根据数据块加密算法标识dwCryptoAlgId,以对称解密密钥lastSessionKey为解密密钥、初始化向量为空,对DPAPI加密块密文内容pbyDpapiCipher进行解密,获得DPAPI加密块明文。
其中,所述对称解密密钥lastSessionKey使用完后立即从内存中清除。
实际测试通过本发明提供的离线解析DPAPI加密数据的方法可以离线解析远程桌面密码、无线上网密码、EFS的私钥、FTP账号密码、常见浏览器自动表单保存的用户名和密码、国内外一些即时通讯软件自动登录时保存的密码等,另外本发明支持Windows XP、Windows2003、Windows Vista、Windows7、Windows8等目前主流操作系统的DPAPI数据解密。
本发明的有益效果为:本发明通过Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文,由主密钥解密DPAPI加密块得到数据明文,实现对DPAPI系统存储区加密数据的进行离线解析,并且本发明无需直接启动或动态仿真数据源所在设备的操作系统就能实现以只读方式读取数据源DPAPI加密数据,无需登录用户的账号和明文密码即可进行数据解密。进一步地,本发明不依赖于Windows CryptAPI库,无需调用CryptAPI函数接口,可满足跨平台使用的要求。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (8)
1.一种离线解析DPAPI加密数据的方法,其特征在于,包括步骤:
S1、加载待分析设备数据源,确定待分析设备数据源磁盘Windows操作系统分区;
S2、根据所述操作系统分区获取系统账号主密钥文件、System文件和Security文件;
S3、通过扫描DPAPI加密块特征值获取待解密文件的DPAPI加密块;
S4、解析System文件和Security文件获取Pbkdf2密钥明文;
S5、获取解密系统账号主密钥文件所需的关键信息,使用Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文;
S6、使用主密钥解密DPAPI加密块得到数据明文。
2.根据权利要求1所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S1具体包括步骤:
通过写保护设备加载待分析设备数据源;
通过识别Windows文件夹、注册表文件、休眠文件和页面交换文件的路径确定待分析设备数据源磁盘Windows操作系统的系统分区。
3.根据权利要求1所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S3中DPAPI加密块特征值为DPAPI加密块头部20个固定字节:{0x01,0x00,0x00,0x00,0xD0,0x8C,0x9D,0xDF,0x01,0x15,0xD1,0x11,0x8C,0x7A,0x00,0xC0,0x4F,0xC2,0x97,0xEB}。
4.根据权利要求1所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S3还包括记录DPAPI加密块在待解密文件中的偏移量。
5.根据权利要求1所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S4具体包括步骤:
解析System文件获取操作系统当前使用的控件组;
根据操作系统当前使用的控件组计算操作系统的syskey;
解析Security文件获取本地安全认证子系统服务的相关配置信息,从相关配置信息中读取系统安全策略版本号值PolRevision,判断PolRevision是否大于0x00010009;
当PolRevision小于0x00010009时,读取系统安全策略加密密钥PolSecretEntryptionKey,并读取Pbkdf2密钥的密文内容CurrVal;
判断CurrVal的第八个字节的值是否为1,当为1时,使用Key1对Pbkdf2密文进行DES解密得到Pbkdf2密钥明文,否则,使用key2对Pbkdf2密文进行DES解密得到Pbkdf2密钥明文,
所述key1为用Unicode编码字符串“823543”做为密码,字符串“823543”的长度和内容做为明文,进行DES加密得到的一个24字节的密文;
所述key2为对syskey进行一次MD5哈希运算,并将该运算结果做为参数对系统安全策略加密密钥PolSecretEntryptionKey的60~76字节进行1000次的MD5哈希运算得到散列值K1,再将散列值K1做为RC4算法的解密密钥对PolSecretEncryptionKey的12~60字节进行RC4解密得到的明文;
当PolRevision大于或等于0x00010009时,读取系统安全策略加密密钥链表PolEKList,对syskey进行一次SHA256哈希运算,并将该运算结果做为参数对PolEKList的28~60字节进行1000次SHA256哈希运算得到散列值K2,将散列值K2做为AES-256算法的解密密钥对PolEKList60字节之后的内容进行AES-256解密得到PolEKList中密钥的个数、索引值和对应的密钥值;
构建一个内容为索引值与密钥值对应的Pbkdf2密钥链表KeyList,将解密后PolEKList中的索引值和对应的密钥值导入密钥链表KeyList中;
读取Pbkdf2密钥的密文内容CurrVal,在CurrVal的4~20字节中取得PolEKList的密钥值的索引值,根据该索引值从Pbkdf2密钥链表KeyList中获取PolEKList的密钥;
对PolEKList的密钥进行一次SHA256哈希运算,并将该运算结果做为参数对CurrVal的28~60字节进行1000次SHA256哈希运算得到散列值K3,将散列值K3做为AES-256算法的解密密钥对CurrVal的60字节之后的内容进行AES-256解密得到Pbkdf2密钥明文。
6.根据权利要求5所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S5具体包括步骤:
获取解密系统账号主密钥文件所需的关键信息,该关键信息包括主密钥文件唯一标识masterKeyGuid、加密算法干扰值pbyCryptoAlgSalt、数据块哈希算法标识dwHashAlgId、额外熵参数pOptionalEntropy和数据块哈希算法标识dwHashAlgId;
根据主密钥文件唯一标识masterKeyGuid得到DPAPI加密块的主密钥文件,所述主密钥文件共包含5个数据单元,分别为主密钥头部单元、用户主密钥单元、本地加密密钥单元、历史凭据标识单元和域密钥备份单元;
解析用户主密钥单元获取主密钥干扰值pbkSalt、Pbkdf2算法迭代次数dwPbkdf2Num以及主密钥哈希算法标识dwHmacAlgId;
以Pbkdf2算法迭代次数dwPbkdf2Num、主密钥哈希算法标识dwHmacAlgId和主密钥干扰值pbkSalt做为输入参数,对Pbkdf2密钥明文进行Pbkdf2运算,得到运算结果bySessionKeyAndIV;
判断PolRevision是否大于0x00010009;
当PolRevision小于0x00010009时,所述结果bySessionKeyAndIV长度为32字节,将bySessionKeyAndIV的前24字节和后8字节分别做为DES-3算法的解密密钥和初始化向量对用户主密钥单元的主密钥密文进行DES-3解密,得到的明文最后64字节即为主密钥明文byMasterKey;
当PolRevision大于或等于0x00010009时,所述结果bySessionKeyAndIV长度为48字节,将bySessionKeyAndIV的前32字节和后16字节分别做为AES-256算法的解密密钥和初始化向量对用户主密钥单元的主密钥密文进行AES-256解密,得到的明文最后64字节即为主密钥明文byMasterKey。
7.根据权利要求6所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S6具体包括步骤:
根据所述数据块哈希算法标识dwHashAlgId对主密钥明文byMasterKey进行哈希运算得到主密钥哈希byMasterKeyHash;根据所述加密算法干扰值pbyCryptoAlgSalt、数据块哈希算法标识dwHashAlgId、额外熵参数pOptionalEntropy,以主密钥哈希byMasterKeyHash做为输入进行HMAC哈希运算,得到散列值hmacMasterkey;
根据数据块哈希算法标识dwHashAlgId和数据块加密算法标识dwCryptoAlgId,以散列值hmacMasterkey做为输入,生成对称解密密钥lastSessionKey;
根据数据块加密算法标识dwCryptoAlgId,以对称解密密钥lastSessionKey为解密密钥、初始化向量为空,对DPAPI加密块密文内容pbyDpapiCipher进行解密,获得DPAPI加密块明文。
8.根据权利要求7所述的离线解析DPAPI加密数据的方法,其特征在于,所述对称解密密钥lastSessionKey使用完后立即从内存中清除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410004313.4A CN103701829B (zh) | 2014-01-03 | 2014-01-03 | 一种离线解析dpapi加密数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410004313.4A CN103701829B (zh) | 2014-01-03 | 2014-01-03 | 一种离线解析dpapi加密数据的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103701829A true CN103701829A (zh) | 2014-04-02 |
CN103701829B CN103701829B (zh) | 2017-01-04 |
Family
ID=50363225
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410004313.4A Active CN103701829B (zh) | 2014-01-03 | 2014-01-03 | 一种离线解析dpapi加密数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103701829B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106357384A (zh) * | 2016-08-26 | 2017-01-25 | 广州慧睿思通信息科技有限公司 | 基于FPGA硬件的word2003文档破解的系统及方法 |
CN106656476A (zh) * | 2017-01-18 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 一种密码保护方法及装置 |
CN106909672A (zh) * | 2017-03-01 | 2017-06-30 | 四川艾特赢泰智能科技有限责任公司 | 一种基于wpf技术生成及加载特定项目文件的方法 |
CN108959128A (zh) * | 2018-06-04 | 2018-12-07 | 浙江大学 | Crypt-SHA512加密算法的加速装置与方法 |
CN110176986A (zh) * | 2019-05-30 | 2019-08-27 | 杭州奇治信息技术股份有限公司 | 一种多重加密的数据加密方法、装置及移动终端 |
CN111104693A (zh) * | 2019-12-26 | 2020-05-05 | 陕西美亚秦安信息科技有限公司 | 一种Android平台软件数据破解方法、终端设备及存储介质 |
CN112231779A (zh) * | 2020-12-11 | 2021-01-15 | 成都艾勃科技有限公司 | 一种兼容BitLocker加密磁盘的跨平台数据安全保护方法 |
CN113468106A (zh) * | 2021-07-15 | 2021-10-01 | 河南众诚信息科技股份有限公司 | 一种与平台无关的vr应用文件的存储和解析方法 |
CN113993126A (zh) * | 2021-10-27 | 2022-01-28 | 微位(深圳)网络科技有限公司 | 一种被叫终端界面拉起方法、装置、设备及存储介质 |
US11768935B2 (en) | 2020-09-29 | 2023-09-26 | Saudi Arabian Oil Company | System and method for detecting and preventing extraction of plaintext passwords using memory attacks |
CN116961908A (zh) * | 2023-09-21 | 2023-10-27 | 深圳市纽创信安科技开发有限公司 | 加密方法、电子装置、电子设备及计算机存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120331535A1 (en) * | 2006-10-20 | 2012-12-27 | Citrix Systems, Inc. | Methods and systems for completing, by a single-sign on component, an authentication process in a federated environment to a resource not supporting federation |
CN103116730A (zh) * | 2013-01-21 | 2013-05-22 | 厦门市美亚柏科信息股份有限公司 | 一种dpapi加密数据的解密方法和系统 |
CN103198264A (zh) * | 2013-03-14 | 2013-07-10 | 厦门市美亚柏科信息股份有限公司 | 一种加密文件系统数据的恢复方法和装置 |
-
2014
- 2014-01-03 CN CN201410004313.4A patent/CN103701829B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120331535A1 (en) * | 2006-10-20 | 2012-12-27 | Citrix Systems, Inc. | Methods and systems for completing, by a single-sign on component, an authentication process in a federated environment to a resource not supporting federation |
CN103116730A (zh) * | 2013-01-21 | 2013-05-22 | 厦门市美亚柏科信息股份有限公司 | 一种dpapi加密数据的解密方法和系统 |
CN103198264A (zh) * | 2013-03-14 | 2013-07-10 | 厦门市美亚柏科信息股份有限公司 | 一种加密文件系统数据的恢复方法和装置 |
Non-Patent Citations (2)
Title |
---|
钱镜洁,林艺滨,陈江勇: "DPAPI离线解密方法及其取证应用", 《技术研究》 * |
钱镜洁,林艺滨,陈江勇: "EFS离线解密方法及其取证应用", 《技术研究》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106357384A (zh) * | 2016-08-26 | 2017-01-25 | 广州慧睿思通信息科技有限公司 | 基于FPGA硬件的word2003文档破解的系统及方法 |
CN106357384B (zh) * | 2016-08-26 | 2019-10-18 | 广州慧睿思通信息科技有限公司 | 基于FPGA硬件的word2003文档破解的系统及方法 |
CN106656476A (zh) * | 2017-01-18 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 一种密码保护方法及装置 |
WO2018133686A1 (zh) * | 2017-01-18 | 2018-07-26 | 腾讯科技(深圳)有限公司 | 一种密码保护方法、装置及存储介质 |
CN106909672A (zh) * | 2017-03-01 | 2017-06-30 | 四川艾特赢泰智能科技有限责任公司 | 一种基于wpf技术生成及加载特定项目文件的方法 |
CN106909672B (zh) * | 2017-03-01 | 2020-04-24 | 四川艾特赢泰智能科技有限责任公司 | 一种基于wpf技术生成及加载特定项目文件的方法 |
CN108959128A (zh) * | 2018-06-04 | 2018-12-07 | 浙江大学 | Crypt-SHA512加密算法的加速装置与方法 |
CN110176986A (zh) * | 2019-05-30 | 2019-08-27 | 杭州奇治信息技术股份有限公司 | 一种多重加密的数据加密方法、装置及移动终端 |
CN111104693A (zh) * | 2019-12-26 | 2020-05-05 | 陕西美亚秦安信息科技有限公司 | 一种Android平台软件数据破解方法、终端设备及存储介质 |
US11768935B2 (en) | 2020-09-29 | 2023-09-26 | Saudi Arabian Oil Company | System and method for detecting and preventing extraction of plaintext passwords using memory attacks |
CN112231779A (zh) * | 2020-12-11 | 2021-01-15 | 成都艾勃科技有限公司 | 一种兼容BitLocker加密磁盘的跨平台数据安全保护方法 |
CN113468106A (zh) * | 2021-07-15 | 2021-10-01 | 河南众诚信息科技股份有限公司 | 一种与平台无关的vr应用文件的存储和解析方法 |
CN113468106B (zh) * | 2021-07-15 | 2024-05-17 | 河南众诚信息科技股份有限公司 | 一种与平台无关的vr应用文件的存储和解析方法 |
CN113993126A (zh) * | 2021-10-27 | 2022-01-28 | 微位(深圳)网络科技有限公司 | 一种被叫终端界面拉起方法、装置、设备及存储介质 |
CN113993126B (zh) * | 2021-10-27 | 2023-07-07 | 微位(深圳)网络科技有限公司 | 一种被叫终端界面拉起方法、装置、设备及存储介质 |
CN116961908A (zh) * | 2023-09-21 | 2023-10-27 | 深圳市纽创信安科技开发有限公司 | 加密方法、电子装置、电子设备及计算机存储介质 |
CN116961908B (zh) * | 2023-09-21 | 2024-01-05 | 深圳市纽创信安科技开发有限公司 | 加密方法、电子装置、电子设备及计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103701829B (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103701829B (zh) | 一种离线解析dpapi加密数据的方法 | |
US9647834B2 (en) | Systems and methods with cryptography and tamper resistance software security | |
US9979546B2 (en) | Controlling access to a resource via a computing device | |
CN109921902B (zh) | 一种密钥管理方法、安全芯片、业务服务器及信息系统 | |
CN105450620A (zh) | 一种信息处理方法及装置 | |
US20170099144A1 (en) | Embedded encryption platform comprising an algorithmically flexible multiple parameter encryption system | |
US11349822B2 (en) | Runtime encryption plugin for a key management system | |
CN107453880A (zh) | 一种云数据安全存储方法和系统 | |
CN109842589A (zh) | 一种云存储加密方法、装置、设备及存储介质 | |
CN104866784A (zh) | 一种基于bios加密的安全硬盘、数据加密及解密方法 | |
WO2019120038A1 (zh) | 数据加密存储 | |
US11783091B2 (en) | Executing entity-specific cryptographic code in a cryptographic coprocessor | |
CN104200137A (zh) | 一种保护java程序自身安全的方法 | |
CN113722741A (zh) | 数据加密方法及装置、数据解密方法及装置 | |
US20120201376A1 (en) | Communication device and key calculating device | |
CN109784072B (zh) | 一种安全文件管理方法和系统 | |
US8494169B2 (en) | Validating encrypted archive keys | |
CN111949996A (zh) | 安全私钥的生成方法、加密方法、系统、设备及介质 | |
CN115361198A (zh) | 解密方法、加密方法、装置、计算机设备和存储介质 | |
US20210266158A1 (en) | System and method for generation of a disposable software module for cryptographic material protection | |
US20210111901A1 (en) | Executing entity-specific cryptographic code in a trusted execution environment | |
CN104392153A (zh) | 一种软件保护方法及系统 | |
JP7385025B2 (ja) | 暗号化コプロセッサにおけるエンティティ固有の暗号化コードの実行 | |
WO2023228373A1 (ja) | プログラマブルロジックコントローラ、制御方法及びプログラム | |
Wang et al. | Realization of Safety Reinforced Terminal Equipment for Secondary System of Substation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |