Расшифровать ключ профиля WEP wlan с помощью CryptUnprotectData
Я пытаюсь расшифровать ключ профиля WEP с помощью CryptUnprotectData. Способ, которым я извлек ключ профиля, - это экспорт профиля с помощью netsh.
netsh wlan export profile name="MyWEP" folder="./"
на данный момент я вручную скопировал ключевой материал из.xml-файл, созданный командой netsh для моей программы. И способ, который я расшифровываю -
DATA_BLOB DataOut, DataVerify;
DataOut.cbData = encryptData.length();
DataOut.pbData = (BYTE*)("I_Manually_Copy_The_WEP_Key_Here");
if (CryptUnprotectData( &DataOut,
NULL,
NULL,
NULL,
NULL,
0,
&DataVerify))
{
printf("The decrypted data is: %sn", DataVerify.pbData);
}
else
{
printf("Failed. Error Code: %d", GetLastError());
}
, но я получаю код ошибки 13 ссылаясь на неверные данные. Что я делаю не так ? На Win 7 и более поздних версиях я могу напрямую использовать WlanGetProfile с параметром WLAN_PROFILE_GET_PLAINTEXT_KEY . Но у меня есть!--9-->нет на Vista чем использовать функцию CryptUnprotectData. Я видел похожие сообщения здесь, здесь но не получил много полезной информации. Кроме того, я использую ту же систему с теми же учетными данными входа пользователя. Кто-нибудь может подсказать мне, что делать дальше ?
PS: я разместил тот же вопрос на Форумы Windows Desktop SDK, но еще не получили ответа. Испытываю свою удачу на SO.
1 ответов
мне нравятся вопросы о безопасности Windows. Поэтому, если я иногда вижу такое, я пытаюсь его решить.
в вашем случае вы уже сделали первый шаг за использование netsh.exe wlan export profile ...
для экспорта данных из профиля WLAN в XML-файл. Файл содержит <keyMaterial>
элемент. Данные внутри элемента являются двоичными данными, закодированными как Hex: (что-то вроде 01000000D08C9DDF0115D1118C7A00C0...
).
Итак, что вам нужно сделать, прежде всего, это декодировать строку в двоичные данные. Вы можете использовать CryptStringToBinary С CRYPT_STRING_HEX
параметр для декодирования строки в двоичный код.
следующим шагом будет заполнить DATA_BLOB
с двоичными данными и вызов CryptUnprotectData
получить результат, но... Есть небольшая проблема. Как вы можете прочитать в документации WlanGetProfile следующее
по умолчанию keyMaterial элемент, возвращаемый в профиле, указанном к pstrProfileXml is зашифрованный. Если процесс выполняется в контекст LocalSystem учетная запись на том же компьютере, то вы можете unencrypt ключевой материал, вызвав CryptUnprotectData