Всем привет!
Лет 5 назад я задумался о том, что в наших квартирах постоянно существует радиоэфир: мы ловим чужой WiFi, сигналы Bluetooth, да и просто фоновые радиоволны проходят сквозь нас каждую секунду. Если понять как их обуздать, то мы сможем отслеживать передвижение людей в комнате (не без нюансов, конечно)
Сразу предупреждаю, я не являюсь каким то физиком-инженером, могу где то ошибиться, где-то неправильно выразить мысль, я просто любитель, которому стала интересна эта тема и решил её реализовать, дабы показать что в этом нет ничего сложного. Вообще статья вышла полу-гайдом полу-исследованием.
CSI (Channel State Information) - информация о состоянии канала в виде матрицы данных, которую выдает Wi-Fi чип. Она показывает, как именно исказилась радиоволна, пока летела от передатчика к приемнику.
Зона Френеля - эллипсоид, внутри которого проходит основная часть радиосигнала между передатчиком и приёмником.
Вышеописанные явления это основа, на которую мы будем опираться при построении "жучков"
Зона Френеля - эллипсоид, внутри которого проходит основная часть радиосигнала между передатчиком и приёмником.
Вышеописанные явления это основа, на которую мы будем опираться при построении "жучков"
Лично у меня это было:
1) 3 модуля ESP32-S3 (для более качественных данных их нужно больше)
Один из модулей станет приёмником (Rx), два других станут передатчиками (Tx)
2) Ноутбук
3) Парочка Type-C проводов и блоки питания к ним
Один из модулей станет приёмником (Rx), два других станут передатчиками (Tx)
2) Ноутбук
3) Парочка Type-C проводов и блоки питания к ним
Ни для кого не секрет, что человек состоит на 70% из воды, а частота 2.4ГГц с которой мы будем работать отлично поглощается водой. Когда приёмник и передатчик общаются между собой, радиолуч образует зону Френеля. Пока комната пуста, сигнал отражается предсказуемо, радиоэфир находится в состоянии покоя.
Как только человек начинает двигаться в зоне Френеля волны искажаются:, вода внутри человека поглощает микроволны, часть волн огибают тело и приёмник получает совсем иную картинку, чем получал в состоянии покоя.
Приёмник, поймав сгенерированные пакеты от передатчиков, строит CSI-матрицу, фиксирует искажения радиополя, а мы в свою очередь анализируем их на ПК и красиво осциллографируем.
Звучит как-то сложно, но это только звучит. Нам не обязательно понимать глубину наших глубин, за нас уже всё давным-давно придумано, мы лишь подстраиваем под себя.
Чтобы наши "жучки" начали работать их нужно прошить.
После установки на рабочем столе появятся ярлыки CMD и PowerShell, я открывал PS и работал в нём.
Для чего это нужно? Разные MAC-адреса в данном случае будут служить метками передатчиков, первый модуль с MAC-адресом N1 отвечает за зону A, второй модуль с MAC-адресом N2 отвечает за зону B.
Для того чтобы подменить MAC-адрес, мы переходим в директорию куда мы устанавливали наше окружение. Примерный путь:
Перейдя, мы увидим 3 файла, один из которых называется app_main.c
Открываем, например, блокнотом app_main.c и ищем примерно 47 строчку
Меняем последний байт в массиве с "0" на "1", сохраняем и закрываем
Прописываем команду: idf.py -p COM4 flash monitor но вместо 4 ставим тот порт который указан в диспетчере устройств и ждём когда прошьётся наш модуль.
Спуфинг делайте для 2-го и последующих модулей, для 1-го модуля делать это не обязательно
Окружение установлено, теперь мы можем спуфить MAC-адрес.
Окружение установлено, теперь мы можем спуфить MAC-адрес.
Для чего это нужно? Разные MAC-адреса в данном случае будут служить метками передатчиков, первый модуль с MAC-адресом N1 отвечает за зону A, второй модуль с MAC-адресом N2 отвечает за зону B.
Для того чтобы подменить MAC-адрес, мы переходим в директорию куда мы устанавливали наше окружение. Примерный путь:
C:\Espressif\projects\esp-csi\examples\get-started\csi_send\main
Перейдя, мы увидим 3 файла, один из которых называется app_main.c
Открываем, например, блокнотом app_main.c и ищем примерно 47 строчку
Меняем последний байт в массиве с "0" на "1", сохраняем и закрываем
Переходим непосредственно к самой прошивке передатчиков
В установленном окружении переходим в нужную директорию командой:
cd C:\Espressif\projects\esp-csi\examples\get-started\csi_send
Параллельно с этим открываем диспетчер устройств, подключаем по USB наш модуль к порту COM и смотрим какой порт выдал нам Windows
В установленном окружении переходим в нужную директорию командой:
cd C:\Espressif\projects\esp-csi\examples\get-started\csi_send
Параллельно с этим открываем диспетчер устройств, подключаем по USB наш модуль к порту COM и смотрим какой порт выдал нам Windows
Прописываем команду: idf.py -p COM4 flash monitor но вместо 4 ставим тот порт который указан в диспетчере устройств и ждём когда прошьётся наш модуль.
Переходим в директорию командой
И запускаем прошивку и мониторинг порта командой
cd C:\Espressif\projects\esp-csi\examples\get-started\csi_recv
И запускаем прошивку и мониторинг порта командой
idf.py -p COM4 flash monitor
Данные, которые сейчас получает приёмник это просто мусор. Туда попадают сигналы чужих WiFi, сигналы смартфонов и случайный шум. Сейчас мы этот мусор использовать не можем.
Что же нам делать? Конечно фильтровать и отсеивать всё, кроме наших MAC-адресов
Кое-кто набросал мне (не с 1 попытки, конечно) простенький парсер, код которого можно взять отсюда
Парсер смотрит на найденный MAC-адрес и если совпадает с зоной А, то отправляет пакет на порт 5005, если с зоной Б, то на порт 5006. Всё остальное отбрасывается.
Простой набор матриц не интересен и мы снова кое-кого попросили набросать простенький UI
И не без труда заставили его отслеживать и показывать есть ли движение в комнате
Код UI можно найти тут
И не без труда заставили его отслеживать и показывать есть ли движение в комнате
Код UI можно найти тут
В сухом остатке мы имеем "жучок" созданный на коленке за пару часов, использующий дешёвенькие модули ESP32-S3.
Диапазон 2.4 ГГц не может сильно пробить бетонные стены, поэтому мы, к сожалению, не сможем следить за соседями. Частота необходимая для преодоления бетонных стен хотя бы 800МГц и ниже (чем меньше частота тем больше её проходимость сквозь препятствия), но из модулей использующие такие частоты невозможно извлечь CSI.
Если мы создадим mesh-сеть из 6-8 жучков, то в целом мы можем отслеживать 3D координаты человека в комнате, т.к. мы сможем собирать больше пересекающихся лучей и матриц CSI с разных ракурсов.
Опять же повторюсь, у меня не было цели создать реально какой-то шпионский жучок, поэтому не стоит ожидать чего-то сверхъестественного.
Всем добра!
Всем добра!













Комментарии 0