Вопрос или проблема
Я сделал захват USB-трафика с помощью USBPcap и Wireshark, чтобы отладить сенсорный экран HID.
Теперь я идентифицировал интересные пакеты URB_INTERRUPT, но как мне сравнить данные HID этих пакетов?
Я добавил пример:
Я хочу найти бинарные различия, чтобы угадать, в каком байте закодированы координаты x и y, но я не нашел никаких инструментов для сравнения в Wireshark. Также “Копировать байты … как сырые двоичные” ничего не дает, так что использование Sublime или любого другого текстового редактора тоже не работает.
Сравнивать кадры довольно сложно.
Я разместил информацию о Wireshark с трудностями и немного о Comm View (я использую Comm View), что может быть немного более обнадеживающим.
На самом деле, это может быть интересным проектом, если его еще не существует.
Вы можете использовать библиотеку perl NET::PCAP для обработки файла, а затем сделать необходимое сравнение по желаемому смещению. Вы можете отобразить различия и номера кадров в html. Жаль, что у меня нет больше времени (и знаний по PERL), чтобы дать вам больше направлений.
Может, кто-то другой знает о чем-то уже созданном (или о чем-то, что можно легко адаптировать).Я не знаю всех ваших специфических случаев, но возможно, можно написать декодер для промышленного протокола, который вы анализируете, и избавиться от необходимости сравнения.
Поврежденные кадры не учитываются в других диаграммах и таблицах по очевидным причинам: никакая часть кадра с неправильным значением CRC не является надежной. Он может иметь совершенно неправильный IP-адрес, полезную нагрузку данных и т.д., хотя в реальной жизни такие кадры могут напоминать оригинал. По той же причине ошибки CRC нельзя отнести к конкретной беспроводной AP или станции, так как невозможно определить реальный MAC-адрес отправителя.
Тем не менее, пользователь может захотеть отметить пункт “Захват поврежденных кадров” в настройках, в этом случае поврежденные кадры также будут отображены в списке пакетов. По умолчанию такие кадры помечаются красным цветом и имеют идентификатор “CRC”, указанный в колонке Ошибки на вкладке Пакеты.
Не все беспроводные адаптеры способны передавать поврежденные кадры на уровень приложения. Такая функциональность гарантирована только для рекомендуемых адаптеров, поддерживаемых CommView для WiFi.
Ответ или решение
Сравнение двух пакетов в захвате трафика с помощью Wireshark может показаться сложной задачей, особенно если ваша цель – детальный анализ и выявление бинарных различий, таких как данные HID с сенсорного экрана. В этом руководстве мы рассмотрим те методы и инструменты, которые помогут вам эффективно выполнять сравнение интересующих пакетов URB_INTERRUPT.
Шаг 1: Фильтрация пакетов
Первым делом, после того как вы сделали захват трафика, используйте фильтры Wireshark для того, чтобы сосредоточиться на интересующих вас пакетах. С помощью поля фильтра вы можете ввести, например, usb.type==0x03
для получения только тех пакетов, которые имеют тип URB_INTERRUPT.
Шаг 2: Извлечение данных
Если вы хотите произвести сравнение конкретных байтов, занесите интересующие кадры в отдельный файл. Для этого вы можете:
- Выделить интересующие кадры в Wireshark.
- Кликнуть правой кнопкой мыши и выбрать
Export Packet Bytes
(Экспортировать байты пакета). - Сохраните их в подходящем формате.
Если опция "Copy Bytes … as Raw Binary" не работает и вы получаете пустую буфер обмена, вы можете использовать Export Selected Packet Bytes
, чтобы сохранить конкретные байты в файле.
Шаг 3: Использование внешних инструментов для сравнения
После того, как вы сохранили данные в файлы, вы можете использовать различные инструменты сравнения:
- Hex-редакторы: Такие инструменты, как
HxD
илиHex Fiend
, могут помочь вам визуально сравнить два бинарных файла. Эти редакторы предоставляют функции для сравнения, выделяя различия в двоичном виде. - Скрипты на Python: Если у вас есть навыки программирования, вы можете написать небольшой скрипт на Python с использованием библиотеки
binascii
, чтобы сравнивать байты в двух файлах и выводить различия. Вот пример кода:
import binascii
def compare_files(file1, file2):
with open(file1, 'rb') as f1, open(file2, 'rb') as f2:
data1 = f1.read()
data2 = f2.read()
diff = list(binascii.unhexlify(data1) - binascii.unhexlify(data2))
print(f'Различия: {diff}')
compare_files('file1.bin', 'file2.bin')
Шаг 4: Дополнительные ресурсы
Если сравнение пакетов в Wireshark вам всё же кажется затруднительным, можно рассмотреть возможности сторонних программ. Например, CommView
и другие анализаторы могут предоставить альтернативные методы анализа и сравнения пакетов. Как упоминалось в обсуждении, вы могли бы также рассмотреть возможность создания собственного диссектора для вашего промышленного протокола, чтобы автоматизировать процесс анализа.
Заключение
Сравнение пакетов USB с помощью Wireshark для выявления различий в данных HID может занять некоторое время, но с правильным подходом и инструментами это выполнимая задача. Используйте фильтры, экспортируйте нужные данные и оптимизируйте процесс с помощью внешних утилит. Удачи в вашем анализе!