Initial commit

This commit is contained in:
2026-09-06 01:06:40 +08:00
commit 57c4e80f0d
69 changed files with 20940 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
# Дампы 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
После установки и запуска фирменной утилиты предоставьте машине доступ к клавиатуре.
![](./vbox-usb.webp)
Настройте общую папку, чтобы в неё сохранять дампы из виртуальной машины на хост.
## Как конвертировать 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)).