Windows 7/8/10 如何存储和保护 WiFi 密码?

Windows 7/8/10 如何存储和保护 WiFi 密码?

在 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 一样简单,问题是你需要以系统身份运行它。我知道可以做到这一点的方法是:

  1. 创建计划任务为系统-(看这里)。确保将用户设置为SYSTEM,然后打开任务计划程序并运行任务等。
  2. 用户系统内部程序 psexec64.exe Windows Sysinternals 是 Microsoft TechNet 网站的一部分,提供用于管理、诊断、排除故障和监控 Microsoft Windows 环境的技术资源和实用程序。下载这里
  3. 如果您以管理员身份运行 CMD,请导航到 exe 文件夹,然后运行命令psexec64.exe -i -s cmd.exe-请参阅此处了解更多详情
  4. 或者以管理员身份运行 powershell 然后导航到 exe 并运行

    PsExec64.exe -i -s powershell.exe –ExecutionPolicy Bypass

  5. (有风险但很常见)通过系统进程中的远程线程注入代码——LSASS.EXE

  6. 前往 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 和加密函数资源

例子

进一步阅读

关于如何简单编译 C 和 C++ 的想法

相关内容