在 Windows 10 中,使用什么加密算法和什么密钥来加密 WiFi 密码存储。我正在尝试了解这一点。
我查看了 XML 文件,C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\{INTERFACE UUID}
其中存储的密码似乎受到某种加密保护。
这不可能是用户的密码,因为所有用户都可以访问它。我想不出其他任何方法了。
答案1
Windows 10 Wifi 位置存储:
对于 Windows 10(与之前的 Windows Vista、7 和 8 版本一样),不再使用注册表来存储“无线配置管理器”的信息。现在,所有信息都存储在以下文件中,如您所述,
C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\{Random-GUID}.xml
您会发现每个无线设备都由其 GUID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 表示,并且其设置以随机 GUID 名称存储在 XML 文件中。
了解 Windows 10 加密/解密
它使用“Windows 加密”功能 - (看这里)。
每个加密密码开头的签名都是01000000D08C9DDF0115D1118C7A00C0
。所以我们可以理解“无线配置管理器”使用 CryptProtectData 函数来加密无线密钥和密码。
幸运的是,解密就像使用 CryptUnprotectData 一样简单,问题是你需要以系统身份运行它。我知道可以做到这一点的方法是:
- 创建计划任务为系统-(看这里)。确保将用户设置为SYSTEM,然后打开任务计划程序并运行任务等。
- 用户系统内部程序 psexec64.exe Windows Sysinternals 是 Microsoft TechNet 网站的一部分,提供用于管理、诊断、排除故障和监控 Microsoft Windows 环境的技术资源和实用程序。下载这里。
- 如果您以管理员身份运行 CMD,请导航到 exe 文件夹,然后运行命令
psexec64.exe -i -s cmd.exe
-请参阅此处了解更多详情。 或者以管理员身份运行 powershell 然后导航到 exe 并运行
PsExec64.exe -i -s powershell.exe –ExecutionPolicy Bypass
(有风险但很常见)通过系统进程中的远程线程注入代码——LSASS.EXE
- 前往 nirsoft.net 并阅读其流程。
您还需要学习使用 C++ 来编写以下代码:
//
// Wireless Key/Password Decryption Algorithm for Vista/Windows 7/Windows 8/Windows 10
//
void DecryptWiFiPassword(BYTE *buffer, DWORD dwSizeBuffer)
{
DATA_BLOB DataIn;
DATA_BLOB DataOut;
DataIn.pbData = buffer;
DataIn.cbData = dwSizeBuffer;
if(CryptUnprotectData(&DataIn, 0, NULL, NULL,NULL,0,&DataOut))
{
printf("\n Wireless Key Password : %s", (char *) DataOut.pbData);
}
}
CryptProtectData 和 CryptUnprotectData 函数基于什么?
- 通过数据保护 API。
- 用户界面可通过 Windows SDK 和 MSDN 库获得。CryptProtectData 函数。CryptUnprotectData 函数。
数据保护应用程序编程接口说明
以下是微软 2001 年 10 月发表的一篇文章中的简要概要,其中包含有关 CryptProtectData 和 DPAPI 的更多信息,因为 Windows 2000 是数据保护应用程序编程接口 (API) 的起点。
此数据保护 API (DPAPI) 是一对函数调用,它们为用户和系统进程提供操作系统级数据保护服务。它们在系统级运行,不需要任何额外的库。数据保护是通过加密的方式进行的。因此,从那时开始,任何程序都能够加密数据,而无需任何特定的加密代码,只需对 DPAPI 进行必要的函数调用即可。这两个调用是两个简单的函数,具有各种修改 DPAPI 行为的选项。
DPAPI 需要密码来保护信息,因此它是一种基于密码的数据保护服务。这种方法的缺点是它只依赖于密码,因此 DPAPI 使用经过验证的加密例程(特别是强大的 Triple-DES 算法)和强密钥来确保保护。
DPAPI 最初会生成一个强密钥,称为 MasterKey,该密钥受用户密码保护。DPAPI 使用一种标准加密流程,称为基于密码的密钥派生,该流程在 PKCS #5(基于密码的加密标准 2.1)中有描述(请参阅此处的 PKCS wiki),从密码生成密钥。然后,将此密码派生密钥与 Triple-DES (请参阅此处的维基)加密MasterKey,最终存放在用户的配置文件目录中。
为了熟悉 DPAPI,请阅读完整文章请点击此处并查看一篇文章在此处对 DPAPI 进行故障排除。
本文适用于旧版本的 Windows,但据我所知,其基本原理是相同的。
另外两个人/团体对该过程的解释:
- 这是 blackhat 的 PDF解释该过程。
- @HennoBrandsmaStack Overflow 的一篇文章称:“从本质上讲,当前密码的 SHA-1 哈希保护着 DPAPI 主密钥,而主密钥又保护着每个 DPAPI 块(每个块也有一个盐值)。每个主密钥都有一个 GUID,用于标识用于保护它的密码。每个块还有一个 GUID,用于标识使用哪个主密钥对其进行加密。这些主密钥将在三个月后过期,然后会创建一个新的主密钥,但旧密钥会保留下来。”
关于加密和解密的示例
Nirsoft.net他们制作了一个可以在 Windows 10 上运行的免费解密程序,他们说 DPAPI 解密数据始终以以下字节序列开头,因此您可以轻松检测到它:
01 00 00 00 D0 8C 9D DF 01 15 D1 11 8C 7A 00 C0 4F C2 97 EB
Nirsoft.net列出了一些使用 DPAPI 加密的密码和其他数据的示例:
- 存储在注册表中的 Microsoft Outlook 帐户的密码。
- Windows 的凭证文件(即
C:\Users\[User Profile]\AppData\Roaming\Microsoft\Credentials
) - 无线网络密钥如本文所述
- 某些版本的 Internet Explorer 中的密码位于注册表项中:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2
- 密码存储在 Chrome 网络浏览器的密码文件中(Chrome 配置文件中的“登录数据”文件)。
- Chrome 网络浏览器中的加密 Cookie(配置文件中的“Cookie”文件)
即使他们承认如果解密失败“尝试通过执行 lsass.exe 进程内的代码来解密数据(需要提升)”,所以对于系统密码来说,这可能是一件困难的事情。
文章来源:
免费工具
- DPAPck是一个 Python 工具包,用于提供 Microsoft 加密子系统(称为 DPAPI(数据保护 API))的平台独立实现。
- 数据保护解密器是一款功能强大的 Windows 工具,可用于解密由 Windows 操作系统的 DPAPI(数据保护 API)系统加密的密码和其他信息。您可以使用此工具解密当前运行系统上的 DPAPI 数据,以及解密存储在外部硬盘上的 DPAPI 数据。
- 无线钥匙视图通过 Windows XP 的“无线零配置”服务或 Windows Vista、Windows 7、Windows 8、Windows 10 和 Windows Server 2008 的“WLAN 自动配置”服务恢复存储在您计算机中的所有无线网络安全密钥/密码 (WEP/WPA)。它允许您轻松地将所有密钥保存到文本/html/xml 文件,或将单个密钥复制到剪贴板。您还可以将无线密钥导出到文件中,然后将这些密钥导入另一台计算机。
DPAPI 和加密函数资源
- DPAPI 秘密。DPAPI 中的安全分析和数据恢复
- 如何对数据保护 API (DPAPI) 进行故障排除
- Microsoft CryptUnprotectData 函数
- Microsoft CryptProtectData 函数
- Microsoft:示例 C 程序:使用 CryptProtectData
- 微软:解密数据
- 微软:密码学
例子
- 示例 C 程序:使用 CryptProtectData
- 来自 powershell 的 CryptUnprotectData
- Git Hub AonaSuzutsuki/EncryptDecrypt_Test
- 使用 CryptUnprotectData 解密 WEP wlan 配置文件密钥
进一步阅读
关于如何简单编译 C 和 C++ 的想法