91 lines
7.7 KiB
Markdown
91 lines
7.7 KiB
Markdown
# Дампы GANSS ARDOR_Katana (katana-v1)
|
||
|
||
Сырые данные, на которых построен реверс протокола (см. [PROTOCOL.md](PROTOCOL.md)).
|
||
Устройство: клавиатура GANSS ARDOR_Katana, USB `0C45:8006` (Sonix SN32).
|
||
|
||
## Состав
|
||
|
||
| Файл | Что это |
|
||
| ---------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
||
| `color-presets.pcapng` / `.plain.txt` | выбор цветовых пресетов в фирменной утилите (статика, RGB-цвета) |
|
||
| `bright.pcapng` / `.plain.txt` | слайдер яркости (все 15 позиций, диапазон 0x01–0x0F) |
|
||
| `animation-speed.pcapng` / `.plain.txt` | слайдер скорости анимаций (диапазон 0x02–0x0F) |
|
||
| `color-modes.pcapng` / `.plain.txt` | перебор всех режимов освещения 1–19 + off |
|
||
| `color-toggle-rainbow.pcapng` / `.plain.txt` | переключение статики моно/радуга (байт [11]) |
|
||
| `color-toggle-direction-north-south.pcapng` / `.plain.txt` | направление водопада ↑/↓ (байт [11]) |
|
||
| `color-toggle-direction-east-west.pcapng` | направление бегущей строки ←/→ (байт [11], без .plain.txt) |
|
||
| `keybind-mouse-buttons.pcapng` / `.plain.txt` | переназначение LCtrl на 5 кнопок мыши по очереди + возврат на default (канал 04 11) |
|
||
| `keybind-editor.pcapng` / `.plain.txt` | переназначение Caps на 9 функций текстового редактора по очереди (канал 04 11, записи `[02 01 код 00]`) |
|
||
| `keybind-multimedia.pcapng` / `.plain.txt` | переназначение Caps на 18 мультимедиа/веб-функций по очереди (канал 04 11, записи `[03 usage_le 00]`) |
|
||
| `keybind-hotkeys.pcapng` / `.plain.txt` | переназначение Caps на 10 горячих клавиш по очереди: A, Shift+B, Ctrl+C, Alt+D, Meta+E, Esc, F1, Num1, Fn, «Мой компьютер» (канал 04 11, записи `[02 маска код 00]` + одна мультимедиа) |
|
||
| `macros-create.pcapng` / `.plain.txt` | запись содержимого двух макросов (канал 04 19) |
|
||
| `macros-create-test.xml`, `test.xml` | вендорский XML тех же макросов (экспорт утилиты) |
|
||
| `macros-set.pcapng` / `.plain.txt` | привязка макроса к клавише, однократно (канал 04 11, запись `[06, ...]`) |
|
||
| `macros-modes.pcapng` / `.plain.txt` | привязка макроса: однократно / N повторов / до останова (канал 04 11) |
|
||
| `macros-call.pcapng` / `.plain.txt` | нажатие клавиши с макросом: control-канал чист, отработка идёт через interrupt IN |
|
||
| `usb-devices-output.txt` | дескрипторы устройства Linux (вывод `usb-devices`) |
|
||
|
||
`.pcapng` — сырой захват USB-трафика; `.plain.txt` — тот же трафик, распарсенный в лог control-трансферов SET/GET_REPORT.
|
||
|
||
## Как получить pcapng (Windows + USBPcap)
|
||
|
||
Все операции только на Windows.
|
||
|
||
1. Установить [Wireshark](https://www.wireshark.org/download.html), при установке выбрать `usbpcap`.
|
||
2. Установить фирменную утилиту для клавиатуры:
|
||
- [ardor-gaming.com](https://ardor-gaming.com/drivers/29524343/katana/)
|
||
- [dns-shop.ru](https://www.dns-shop.ru/product/driver/3c23900ab1b2ed20/klaviatura-provodnaa-besprovodnaa-ardor-gaming-katana-cvet-cernyj/)
|
||
3. Запустить утилиту, подключить клавиатуру.
|
||
4. Запустить Wireshark, внизу выбрать `usbpcap` и начать захват.
|
||
5. Произвести нужные операции в утилите настройки.
|
||
6. Остановить захват в Wireshark и сохранить файл `<имя>.pcapng`.
|
||
|
||
Захват должен содержать весь трафик сессий: begin → data-begin → payload → commit → save.
|
||
Полезно сделать в начале захвата одно полное действие, чтобы в дамп попала 1 и более целая транзакция.
|
||
|
||
### При работе в VirtualBox
|
||
|
||
После установки и запуска фирменной утилиты предоставьте машине доступ к клавиатуре.
|
||
|
||

|
||
|
||
Настройте общую папку, чтобы в неё сохранять дампы из виртуальной машины на хост.
|
||
|
||
## Как конвертировать pcapng → plain.txt
|
||
|
||
На Linux, из корня репозитория:
|
||
|
||
```
|
||
python3 analyze_pcap.py raw-data/katana-v1/color-modes.pcapng raw-data/katana-v1/color-modes.plain.txt
|
||
```
|
||
|
||
Формат строки лога:
|
||
|
||
```
|
||
SET #N if=I t=T rid=R len=L: <hex-байты>
|
||
```
|
||
|
||
- `if` — номер USB-интерфейса (конфиг-канал = `if=0`);
|
||
- `t` — bmRequestType: `21` = SET_REPORT (host→device), `a1` = GET_REPORT (device→host);
|
||
- `rid` — report id (все команды идут с `rid=00`);
|
||
- GET-пакеты склеиваются по `irpid`: setup и data приходят разными записями, парсер сопоставляет их автоматически.
|
||
|
||
## Как узнать дескрипторы клавиатуры
|
||
|
||
На Linux с подключённой клавиатурой:
|
||
|
||
```
|
||
usb-devices | grep -B 2 -A 8 'Vendor=0c45' > usb-devices-output.txt
|
||
```
|
||
|
||
В дампе видно: 2 HID-интерфейса (boot keyboard и mouse/consumer), оба под `usbhid`, interrupt-эндпоинты `0x81`/`0x82`.
|
||
Конфигурационный канал — feature-репорты интерфейса 0 (эндпоинты управления, не interrupt).
|
||
|
||
В `lsusb` устройство подписывается «Microdia Dual Mode Camera (8006 VGA)» — это норма: ID `0c45:8006` чипа Sonix SN32 используется и вебкамерами, и клавиатурами, а база `usb.ids` знает за ним только камеру.
|
||
Подробнее — в [INSTALL.md](INSTALL.md) → «Проверка устройства».
|
||
|
||
## Замечания
|
||
|
||
- Имена файлов оригинальные, включая опечатку `color-pesets.pcapng` (содержимое соответствует color-presets).
|
||
- Расшифровка протокола по этим дампам — в [PROTOCOL.md](PROTOCOL.md), парсер — `analyze_pcap.py`, рабочая утилита — `katana.py` (обзор — в [SCRIPTS.md](SCRIPTS.md)).
|