Нас цікавлять дані, що передаються по шині USB. Чи можна якось "прослуховувати" цей трафік? Виявляється, можна.
Качаємо програму USBPcap. встановлюємо:
Установка USB сніфферУстановка USB сніффер
Установка USB сніффер
Установка USB сніффер
Установка USB сніффер
Тепер запускаємо файл USBPcapCMD.exe з правами адміністратора:
Запуск USB сніффер
Моніторити ми будемо роботу з флешкою, яку я дбайливо вставив у порт 3 першого кореневого хаба. У програмі він визначився під номером 2. Вводимо цифру 2. Потім вводимо результуючий файл (1.pcap), в нього буде записуватися всі, що відбувається на цій шині.
Трошки модифікуємо вміст текстового файлу на флешці:
Запишемо наочну послідовність в файл
Після цього завершуємо консольний додаток сніффер натисканням клавіш Ctrl + C і відкриваємо файл 1.pcap (з'явився в каталозі програми) через WireShark:
Команди обміну даними з USB пристроєм
Періодичний опитування USB пристрої
Отже, неважко помітити, що періодично (приблизно раз в секунду) відбувається опитування USB пристрої:
Ми це бачимо як Test Unit Ready LUN. Моментально приходить відгук. Таким чином система дізнається, що до хабу він підключений.
Команда на запис USB пристрої
Запис кореневого каталогу FAT
Мої очікування виправдалися! Шляхом нескладних арифметичних перетворень отримуємо:
0x000001F0 * 200 = 0x0003E000
Кореневої каталог FAT
Очищений кореневий каталог
Запис даних у файл на флешці
Наступна команда на запис - в блок 0x00000210. Бачимо, що записується послідовність 0x31. 0x31. 0x31. 0x32. 0x32, ... Ага!
Множимо блок на 200:
Вміст файлу на флешці
Ну точно! Це як раз кластер, які займає файл 1.txt. і з цього зміщення починається його вміст 111222333444. Саме ASCII коди цих символів і виглядають як 0x31, 0x31, 0x31, 0x32, .... Все зійшлося!
Дивимося наступну команду на запис:
Запис в таблицю FAT
Цікаво. Звичайно, у мене є гіпотеза, але краще б її перевірити. Бачимо LBA 0x00000004.
Пояснюю, F8 - ідентифікатор носія (жорсткий диск). Далі йде два байта заповнювач FFFF. А далі - FFFF - це запис нашого файлу. Це означає, що в таблиці розміщення файлів наш файл займає один єдиний кластер і це перший запис FAT. Подивіться посилання, щоб розібратися.
Наступне зсув на попередньому скрині - 0x0000000FA. Розбирати не будемо, просто скажу, що це друга копія FAT-таблиці (резервна).
Ось, загалом-то і все. Треба сказати, я до цього не зовсім розумів, як відбувається запис на носії типу USB. Тепер це стає зрозумілим. Існують методичні матеріали з програмування USB пристроїв і драйверів, у мене ж є одна чудова ідейка, яку я хочу втілити в життя. Для цього потрібно написати невелику програмку, на зразок цього сніффер.