【问题标题】:Getting Wi-Fi profile information获取 Wi-Fi 配置文件信息
【发布时间】:2015-06-27 23:24:03
【问题描述】:

我使用的是 Windows 8.1,它没有工具(带有 GUI)来管理 wifi 网络配置文件。所以我正在写一篇对我有帮助的文章。我做了一些谷歌搜索,找到了Managed Wifi API,并在教程的帮助下,我设法将这段代码放在一起:

foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
{
    foreach (Wlan.WlanProfileInfo profileInfo in wlanIface.GetProfiles())
    {
        string profileName = profileInfo.profileName;
        ListViewItem item = new ListViewItem(profileName);

        string profileXML = wlanIface.GetProfileXml(profileInfo.profileName);
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(profileXML);
        var NSManager = new XmlNamespaceManager(doc.NameTable);
        NSManager.AddNamespace("d", "http://www.microsoft.com/networking/WLAN/profile/v1");
        XmlNode node = doc.DocumentElement.SelectSingleNode("//d:WLANProfile/d:MSM/d:security/d:authEncryption/d:authentication", NSManager);

        item.SubItems.Add(node.InnerText);
        Profiles.Items.Add(item);
    }
}

获取保存的网络配置文件列表并将它们打印到 ListView。我有两个问题。一种是如何使用 Managed Wifi API 获取完整的个人资料信息?因为我唯一能得到的是个人资料名称。该站点中没有文档。

第二个问题是,由于我无法使用 API 获取完整的网络信息,所以我使用 API 以 XML 格式打印配置文件信息,然后解析 XML 并读取它。 XML 示例:

<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>MEDO PUB</name>
    <SSIDConfig>
        <SSID>
            <hex>4D45444F20505542</hex>
            <name>MEDO PUB</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>manual</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>true</protected>
                <keyMaterial>someReallyLongStringLike500+chars</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>

我需要获取 wifi 密码,但我认为它是加密的。如何获取实际密码或解密加密密码?


更新:我找到了两个链接:Exposing the WiFi Password Secrets[C++] Dump wireless passwords,但我不确定它们是否有效,或者不确定如何在 C# 中实现它们。

【问题讨论】:

  • 忘记破解密码。您可以使用以下网页上的代码递归添加 xml:stackoverflow.com/questions/1596163/…
  • @jdweng 我不确定你的意思。我不想读取 XML 值。我想解密加密或“散列”的 XML 值,即 wifi 密码。
  • 这是一个密码,不能被解密。
  • @jdweng 第三方应用程序可以解密密码,例如WinFi,或以某种方式访问​​它。
  • Possible duplicate 另外,“Windows 8.1 没有管理 wifi 网络配置文件的工具”——这种说法是不正确的。您可以使用 cmd 工具 netsh 执行此操作。以管理员身份打开 cmd 窗口并输入:netsh wlan show profiles,然后从中获取密码:netsh wlan show profile "&lt;a profile from the last step&gt; key=clear

标签: c# xml encryption wifi wlanapi


【解决方案1】:

正如我在评论中提到的,你可以这样做

netsh wlan show profiles

然后

netsh wlan show profile "<a profile from the last step>" key=clear

如果您仍想在代码中执行此操作,请继续阅读:

您使用的托管WiFi API没有此功能,但您可以轻松添加。

将 Interop.cs 中的 WlanProfileFlags 枚举修改为:

[Flags]
public enum WlanProfileFlags
{
    /// <remarks>
    /// The only option available on Windows XP SP2.
    /// </remarks>
    AllUser = 0,
    GroupPolicy = 1,
    User = 2,
    GetPlaintextKey = 4
}

将此函数添加到 WlanApi.cs 文件中,可能靠近 GetProfileXml 函数(为了组织起见)。

/// <summary>
/// Gets the profile's XML specification. Key is unencrypted.
/// </summary>
/// <param name="profileName">The name of the profile.</param>
/// <returns>The XML document.</returns>
public string GetProfileXmlUnencrypted(string profileName)
{
    IntPtr profileXmlPtr;
    Wlan.WlanProfileFlags flags = Wlan.WlanProfileFlags.GetPlaintextKey;
    Wlan.WlanAccess access;
    Wlan.ThrowIfError(
        Wlan.WlanGetProfile(client.clientHandle, info.interfaceGuid, profileName, IntPtr.Zero, out profileXmlPtr, out flags, out access));
    try
    {
        return Marshal.PtrToStringUni(profileXmlPtr);
    }
    finally
    {
        Wlan.WlanFreeMemory(profileXmlPtr);
    }
}

您可以调用此函数来获取未加密的密钥。

我没有对此进行测试,但它应该可以工作。如果您有任何问题,请告诉我。

【讨论】:

  • 您提供的代码示例运行良好。我有一个问题。你怎么知道这件事?我试图查找有关托管 Wifi API 的文档和教程,但找不到任何内容。它来自经验还是有某种来源?我可能需要关于我正在构建的这个工具的进一步帮助,所以我想知道。
  • 我一直在使用原生 WiFi API,所以我只是查看了托管 API 在做什么并添加了缺少的功能。这是相关原生函数的链接,WlanGetProfile。请注意,第四个参数 pdwFlags 的值为 WLAN_PROFILE_GET_PLAINTEXT_KEY。这对应于我添加的 4 个。
  • 哎呀,我的意思是第 6 个参数。
  • 因为我看到很多关于这个 Managed WiFi API 的问题并且它似乎很受欢迎,所以我决定将它克隆到 github here。没错,这只是 Codeplex 上的抄本,但如果您还有其他问题,请随时在那里打开问题,我会提供帮助。
  • 我很高兴你这样做了,因为我想我会改进我的工具,而且肯定需要帮助 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 2013-02-02
  • 1970-01-01
相关资源
最近更新 更多