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

Ege*_*e F 3 encryption wireless-networking passphrase windows-10

Windows 10 中使用什么加密算法和什么密钥来加密 WiFi 密码存储。我正在尝试了解这一点。

我查看了 XML 文件,C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\{INTERFACE UUID} 其中存储的密码似乎受到某种加密的保护。

它不可能是用户的密码,因为所有用户都可以访问它。我想不出其他什么了。

小智 5

\n

Windows 10 Wifi 位置存储:

\n
\n\n

对于 Windows 10(如之前版本的 Windows Vista、7 和 8),不再使用注册表来存储“无线配置管理器”的信息。现在存储了您在以下文件中提到的所有信息,

\n\n
C:\\ProgramData\\Microsoft\\Wlansvc\\Profiles\\Interfaces\\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\\{Random-GUID}.xml\n
Run Code Online (Sandbox Code Playgroud)\n\n

您会发现每个无线设备都由其 GUID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 表示,其设置存储在具有随机 GUID 名称的 XML 文件中。

\n\n
\n\n
\n

了解 Windows 10 加密/解密

\n
\n\n

它使用“Windows 加密”功能 - (请参阅此处)。

\n\n

每个加密密码开头的签名是01000000D08C9DDF0115D1118C7A00C0。所以我们可以理解“无线配置管理器”使用CryptProtectData函数来加密无线密钥和密码。

\n\n

幸运的是,解密就像使用 CryptUnprotectData 一样简单,但问题是您需要将其作为系统运行。我知道可以做到这一点的方法是:

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

    \n\n

    PsExec64.exe -i -s powershell.exe \xe2\x80\x93ExecutionPolicy Bypass

  8. \n
  9. (有风险但常见)通过系统进程中的远程线程注入代码 - LSASS.EXE

  10. \n
  11. 访问 nirsoft.net 并阅读那里的程序。
  12. \n
\n\n


\n此外,您还需要学习使用 C++ 来编写以下代码:

\n\n


\n\n
//\n// Wireless Key/Password Decryption Algorithm for Vista/Windows 7/Windows 8/Windows 10\n//\nvoid DecryptWiFiPassword(BYTE *buffer, DWORD dwSizeBuffer)\n{\n    DATA_BLOB DataIn;\n    DATA_BLOB DataOut;\n\n    DataIn.pbData = buffer;\n    DataIn.cbData = dwSizeBuffer;\n\n    if(CryptUnprotectData(&DataIn, 0, NULL, NULL,NULL,0,&DataOut))\n    {\n        printf("\\n Wireless Key Password : %s", (char *) DataOut.pbData);\n\n    }\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

CryptProtectData 和 CryptUnprotectData 函数基于什么?

\n\n
    \n
  • 通过数据保护 API。
  • \n
  • 用户界面可通过 Windows SDK 和 MSDN 库获得。CryptProtectData 函数。CryptUnprotectData 函数。
  • \n
\n\n
\n\n

数据保护应用程序编程接口解释

\n\n

以下是摘自 2001 年 10 月的一篇 Microsoft 文章的简要摘要,其中包含有关 CryptProtectData 和 DPAPI 的更多信息,因为 Windows 2000 是数据保护应用程序编程接口 (API) 的开始。

\n\n

此数据保护 API (DPAPI) 是一对函数调用,为用户和系统进程提供操作系统级数据保护服务。它们在系统级运行,不需要任何额外的库。数据保护是通过加密的方式进行的。因此,从那时起,任何程序都能够加密数据,除了对 DPAPI 的必要函数调用之外,不需要任何特定的加密代码。这些调用是两个简单的函数,具有修改 DPAPI 行为的各种选项。

\n\n

DPAPI需要密码来保护信息,因此它是一种基于密码的数据保护服务。这种方法的缺点是它仅依赖于密码,因此 DPAPI 使用经过验证的加密例程,特别是强大的 Triple-DES 算法和强大的密钥来确保保护。

\n\n

DPAPI 最初生成一个称为 MasterKey 的强密钥,该密钥受用户密码的保护。DPAPI 使用称为“基于密码的密钥派生”的标准加密过程,如 PKCS #5(基于密码的加密标准 2.1)(请参阅此处的 PKCS wiki)中所述,从密码生成密钥。然后将此密码派生密钥与 Triple-DES 一起使用(请参阅此处的 wiki)一起使用来加密 MasterKey,最后将其存储在用户的配置文件目录中。

\n\n

要熟悉 DPAPI,请阅读此处的全文,并在此处查看有关 DPAPI 故障排除的文章。

\n\n

这篇文章适用于旧版本的 Windows,但据我所知,基本原理是相同的。

\n\n


\n其他两个人/团体对该过程的解释:

\n\n

    \n
  • 这是 blackhat 提供的 PDF 文件,解释了该过程。
  • \n
  • Stack Overflow 的@HennoBrandsma表示:“从本质上讲,当前密码的 SHA-1 哈希可以保护 DPAPI 主密钥,而 DPAPI 主密钥又可以保护每个 DPAPI-blob(每个 blob 也有一个盐)。每个主密钥都有一个 GUID,用于标识“用于保护它的密码。每个 blob 还具有一个 GUID,用于标识使用哪个主密钥对其进行加密。这些主密钥将在三个月后过期,并创建一个新的主密钥,但旧的主密钥会保留下来。”
  • \n
\n\n


\n加密和解密示例

\n\n

Nirsoft.net制作了一个可在 Windows 10 中运行的免费解密程序,该公司表示 DPAPI 解密的数据始终以以下字节序列开头,因此您可以轻松检测到它:

\n\n
01 00 00 00 D0 8C 9D DF 01 15 D1 11 8C 7A 00 C0 4F C2 97 EB \n
Run Code Online (Sandbox Code Playgroud)\n\n

Nirsoft.net列出了使用 DPAPI 加密的密码和其他数据的一些示例:

\n\n
    \n
  • Microsoft Outlook 帐户的密码,存储在注册表中。
  • \n
  • Windows 的凭据文件(即C:\\Users\\[User Profile]\\AppData\\Roaming\\Microsoft\\Credentials
  • \n
  • 无线网络密钥如本文
  • \n
  • 某些版本的 Internet Explorer 中的密码在注册表项中:HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\IntelliForms\\Storage2
  • \n
  • 密码存储在 Chrome Web 浏览器的密码文件中(Chrome 配置文件中的“登录数据”文件)。
  • \n
  • Chrome Web 浏览器中的加密 cookie(配置文件中的“Cookies”文件)
  • \n
\n\n

即使他们承认,如果解密失败,“尝试通过在 lsass.exe 进程内执行代码来解密数据(需要提升)”,因此对于系统密码来说,这可能是一件困难的事情。

\n\n
\n\n

文章来源:

\n\n\n\n

免费工具

\n\n
    \n
  • DPAPIck是一个 Python 工具包,用于提供 Microsoft 加密子系统 DPAPI(数据保护 API)的独立于平台的实现。
  • \n
  • DataProtectionDecryptor是一款适用于Windows的强大工具,可以让您解密由Windows操作系统的DPAPI(数据保护API)系统加密的密码和其他信息。您可以使用此工具解密当前运行系统上的 DPAPI 数据以及解密存储在外部硬盘驱动器上的 DPAPI 数据。
  • \n
  • WirelessKeyView通过 Windows XP 的“无线零配置”服务或 Windows Vista、Windows 7、Windows 8 的“WLAN 自动配置”服务恢复存储在计算机中的所有无线网络安全密钥/密码 (WEP/WPA) 、Windows 10 和 Windows Server 2008。它允许您轻松地将所有密钥保存到 text/html/xml 文件,或将单个密钥复制到剪贴板。您还可以将无线密钥导出到文件中,然后将这些密钥导入到另一台计算机中。
  • \n
\n\n

DPAPI 和加密函数资源

\n\n\n\n

例子

\n\n\n\n

进一步阅读

\n\n\n\n

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

\n\n\n

  • 这是迄今为止我在 stackexchange 中见过的最彻底的答案。非常感谢。不过,我确实有一个后续问题:CryptProtectData/CryptUnprotectData 函数基于什么?文档中提到的会话密钥是如何生成的以及它们使用什么特定算法? (2认同)