.Net WiFi API и подбор паролей к WiFi

Давно мечтал написать программку, которая бы проверяла WiFi сеть на использование простых паролей, вроде 123456789. Список таких паролей не особенно велик, потому можно не заморачиваться со снифаньем пакетов, a потом c их расшифровкой, как это делают настоящие хакеры.

В рунете ходит програмка WiFi Cracker, которая написана на .Net C# и использует библиотеку Managed Wifi API.

Суть работы с WiFi из управляемого кода довольно проста. В Windows для беспроводных сетей есть профили - фактически это XML с настройками подключения: паролем, алгоритмом шифрования и авторизации и т.п. (см. Profile examples). WiFi Cracker генерирует профиль подсовывает его WinApi функцию и ждёт, что получится. На проверку подключения может уходить от нескольких секунд до минуты. Сложность же в том, что Managed Wifi API — это очень легковесная надстройка над WinAPI, и формирование правильного профиля возлагается на пользователя библиотеки. Разаботчик WiFi Creacker'а что-то попытался на эту тему сделать, но всё равно его программа не поддерживает некоторые сети.

Библиотека SimpleWiFi основана на Managed Wifi API, но берёт формирование профиля на себя. Пользователю библиотеки не надо вытаскивать из параметров сети настройки шифрования и авторизации, всё это SimpleWiFi сделает автоматически. SimpleWiFi содержит различые шаблоны профилей, что позволяет ей работать с очень широким кругом сетей. Да и с задачей ожидания результатов подключения SimpleWiFi справляется лучше.

Единственное, что плохо в этой библиотеки, так это то, что она предоставляет очень бедный public API. Например, скрывает всю информацию о сетевом интерфейсе. Потому я решил седелать форк библиотки на github'е, сделать всё internal члены public'ами и работать уже с такой версией библиотеки.

В итоге, на базе SimpleWiFi у меня получилась вот такая консольная утилита WifiBruteforce, на примере которой можно посмотреть как можно использовать библиотеку SimpleWiFi.