我正在尝试自动化 Wi-Fi 连接以进行测试。使用 PowerShell 中的 netsh 命令,我可以生成 xml 文件并连接到任何个人 Wi-Fi。
但是 Enterprise (802.1X) 出现了问题。我可以使用初始配置生成 xml 文件。但是用户名和密码没有存储在其中。我发现它们存储并加密在:HKCU\Software\Microsoft\Wlansvc\UserData\Profiles{GUID} 显然它是使用 CryptProtectData 加密的。
我已从使用 802.1X 与当前用户连接的一个 SSID 上传了密钥,并尝试解密它以找出需要加密的字符串。以下是迄今为止的脚本:
Add-Type -AssemblyName System.Security
$HEXA ='01 00 00 00 d0 8c 9d df 01 15 d1 11 8c 7a 00 c0 4f c2 97 eb 01 00 00
00 a8 55 8d b0 1a c5 48 4e 8e 35 ff...'
##hexa to byte
$HEXA_array= $HEXA.split(" ")
$bytes_object = $HEXA_array | FOREACH {[BYTE][CHAR]
([CONVERT]::toint16($_,16))}
##Create an array of Byte
$i=0
foreach ($element in $bytes_object){$i++}
$Byte_Array = New-Object Byte[] $i
#system.object to system.byte
$i=0
foreach ($element in $bytes_object)
{
$Byte_Array[$i]=$element
$i++
}
write-host "Type of Byte_Array: " $Byte_Array.getType().FullName #
#decrypt
$bytes2 = [System.Security.Cryptography.ProtectedData]::Unprotect(
$Byte_Array,
$null,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)
但是我收到以下错误:使用“3”个参数调用“Unprotect”时发生异常:“参数不正确”
编辑:当我使用本地系统用户启动脚本时,错误没有出现。我可以看到用户名,但后面跟着不可读的字符。熵设置为 $null(第二个参数),想知道这是否会导致问题
谢谢你,
答案1
WPA-Enterprise 的用户/密码使用两个用户加密。我首先使用本地系统解密整个字符串。然后使用当前用户再次解密。在两种情况下,熵都设置为 $Null。第三个参数取决于您的系统操作系统。
答案2
您可以在我的回答中找到有关 MSMUserData 的 WPA2-Enterprise 凭据加密方案的更多信息https://superuser.com/a/1259271/780533回答“如何找到存储在 Windows 7 上的无线网络的受保护 EAP 凭据?”问题。具体来说,解密的 MSMUserData 中用户名后面的“不可读字符”(请注意,它们以 01 00 00 00 d0 8c 9d df ... 开头)是加密密码,因此您需要使用 CryptProtectData 再次解密。