
🎤⌨️ Акустический перехват нажатий клавиш
Это набор инструментов командной строки и графического интерфейса для захвата и анализа аудиоданных.
Самый интересный инструмент называется keytap — он может угадывать нажатые клавиши клавиатуры, анализируя звук, захваченный с микрофона компьютера.
Подробнее в этой записи блога:
Keytap: описание и некоторые мысли
Видео: короткая демонстрация работы Keytap
Инструмент keytap2 — ещё один интересный инструмент для восстановления текста из звука. Он не требует обучающих данных; вместо этого используются статистические данные о частотах букв и n-граммов в английском языке.
Более подробное описание инструмента доступно здесь: Обсуждение Keytap2
Видео: короткая демонстрация работы Keytap2
CTF: сможете угадать вводимый текст?
Эта версия представляет значительные улучшения алгоритма и лучшую статистику n-граммов по сравнению с keytap2. Атака теперь полностью автоматизирована и не требует ручного вмешательства в процессе восстановления текста.
Видео: короткая демонстрация использования Keytap3
Видео: ещё один пример использования Keytap3
Графический интерфейс для Keytap3
Проверьте, уязвима ли ваша клавиатура для Keytap:
"Это работает невероятно хорошо.
Надеюсь, вы осознаёте, что вы создали (и сделали доступным каждому человеку в мире)." -- ffpip
"Я только что попробовал, и это работает невероятно хорошо. Мне почти захотелось перестать пользоваться механической клавиатурой." -- Karawebnetwork
"Эта атака и фрикинг Ван Эка — вот почему Эдвард Сноуден, вводя пароли и другую конфиденциальную информацию, накрывал себя и свой ноутбук одеялом." -- aarchi
"Это то, чего заслуживают пользователи механических клавиатур" -- super guy
"бля..." -- Lluis Franco
Зависимости:
SDL2 — используется для захвата звука и открытия окон графического интерфейса libsdl
[Ubuntu]
$ sudo apt install libsdl2-dev
[Mac OS с brew]
$ brew install sdl2
[MSYS2]
$ pacman -S git cmake make mingw-w64-x86_64-dlfcn mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2
FFTW3 (опционально) — некоторые вспомогательные инструменты выполняют преобразования Фурье fftw
Linux, FreeBSD, Mac OS, Windows (MSYS2 + MinGW)
git clone https://github.com/ggerganov/kbd-audio
cd kbd-audio
git submodule update --init
mkdir build && cd build
cmake ..
make
Краткое описание доступных инструментов. Если статус инструмента не стабильный, возможны проблемы и неоптимальные результаты.
record-full
Запись звука в сырой бинарный файл на диск
./record-full output.kbd [-cN]
play-full
Воспроизведение записи, созданной с помощью инструмента record-full
./play-full input.kbd [-pN]
record
Запись звука только во время печати. Полезно для сбора обучающих данных для keytap
./record output.kbd [-cN] [-CN]
play
Воспроизведение записи, созданной с помощью инструмента record
./play input.kbd [-pN]
keytap
Обнаружение нажатых клавиш через захват звука с микрофона в реальном времени. Использует обучающие данные, полученные с помощью инструмента record.
./keytap input0.kbd [input1.kbd] [input2.kbd] ... [-cN] [-CN] [-pF] [-tF]
keytap-gui
Обнаружение нажатых клавиш через захват звука с микрофона в реальном времени. Использует обучающие данные, полученные с помощью инструмента record. Версия с графическим интерфейсом.
./keytap-gui input0.kbd [input1.kbd] [input2.kbd] ... [-cN] [-CN]
Онлайн-демо: https://keytap.ggerganov.com
keytap2-gui record.kbd n-gram-dir [-pN] [-cN] [-CN]
Любая обратная связь о производительности инструментов очень ценится. Пожалуйста, оставьте комментарий здесь.
| Название | Тип | Статус |
|---|
| record | текст | стабильный |
| record-full | текст | стабильный |
| play | текст | стабильный |
| play-full | текст | стабильный |
| view-gui | графич. | стабильный |
| view-full-gui | графич. | стабильный |
| key-detector | текст | стабильный |
| keytap | текст | стабильный |
| keytap-gui | графич. | стабильный |
| keytap2-gui | графич. | стабильный |
| keytap3 | текст | стабильный |
| keytap3-gui | графич. | стабильный |
| - | доп. | - |
| guess-qp | текст | эксперимент |
| guess-qp2 | текст | эксперимент |
| keytap3-multi | текст | эксперимент |
| scale | текст | эксперимент |
| subreak | текст | эксперимент |
| key-average-gui | графич. | эксперимент |
| keytap2 | текст | эксперимент |
Обнаружение нажатых клавиш через захват звука с микрофона. Использует статистическую информацию (частоты n-граммов) о языке. Обучающие данные не требуются. Входной файл 'record.kbd' должен быть создан с помощью инструмента record-full и содержит аудиоданные, которые будут анализироваться. Папка 'n-gram-dir' должна содержать файлы вероятностей n-граммов для соответствующего языка.
./keytap2-gui record.kbd ../data
Онлайн-демо: https://keytap2.ggerganov.com
keytap3
Полностью автоматизированное восстановление неизвестного текста из аудиозаписей.
./keytap3 input.kbd ../data [-cN] [-CN] [-pF] [-tF] [-FN] [-fN]
Онлайн-демо: https://keytap3.ggerganov.com
keytap3-gui
Версия с графическим интерфейсом инструмента keytap3.
./keytap3-gui input.kbd ../data [-cN] [-CN] [-pF] [-tF] [-FN] [-fN]
Онлайн-демо: https://keytap3-gui.ggerganov.com
view-full-gui
Визуализация сигналов, записанных с помощью инструмента record-full. Также можно воспроизвести аудиоданные.
./view-full-gui input.kbd [-pN]