Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
QCSuper — QCSuper — это инструмент для взаимодействия с телефонами и модемами на базе Qualcomm, позволяющий, среди прочего, захватывать сырые радиочастотные кадры 2G/3G/4G. | Kitploit
Инструменты/GitHubGitHub/p1sec/qcsuper
Безопасность встроенных системСниффинг и анализ пакетовКриминалистика памятиСетевая криминалистикаМобильная криминалистикаБезопасность беспроводных сетейМобильная безопасность
GitHubp1sec/qcsuper

QCSuper

QCSuper — это инструмент для взаимодействия с телефонами и модемами на базе Qualcomm, позволяющий, среди прочего, захватывать сырые радиочастотные кадры 2G/3G/4G.

Репозиторий
1.6k279131 месяц назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

QCSuper

QCSuper — это инструмент для работы с телефонами и модемами на базе Qualcomm, позволяющий, среди прочего, захватывать сырые радио-кадры 2G/3G/4G (а на некоторых моделях — 5G).

Он позволяет создавать захваты PCAP с помощью Android-телефона с root-доступом, USB-донгла или существующего захвата в другом формате.

Скриншот использования QCSuper вместе с Wireshark

После того как вы его установили, вы можете подключить свой телефон с root-доступом через USB, и его использование с совместимым устройством сводится к:```bash qcsuper --adb --wireshark-live

root@kitploit:~
Или, если вы вручную включили Diag-порт на вашем телефоне (соответствующая процедура может различаться в зависимости от модема и производителя телефона, см. ниже дополнительные пояснения), или если вы подключили мобильный широкополосный USB-модем:```bash
qcsuper --usb-modem auto --wireshark-live

Для связи с базовым процессором телефона используется протокол Qualcomm Diag, также называемый QCDM или DM (Diagnostic Monitor).

Вы готовы сообщить, работает ли ваше устройство или нет? Вы можете открыть Github issue.

Содержание

  • Установка
    • Установка в Linux (PIP)
    • Установка в Linux (UV)
    • Установка в Windows
  • Поддерживаемые протоколы
  • Уведомление об использовании

Приложения:

  • Использование QCSuper с USB-модемом
  • Поддерживаемые устройства
  • Связанные инструменты, использующие протокол Diag

Запись в блоге/демонстрация: Представляем QCSuper: инструмент для захвата вашего 2G/3G/4G радиоэфирного трафика на телефонах на базе Qualcomm

Дополнительная документация:

  • Протокол Diag
  • Архитектура QCSuper

Установка

В последнее время QCSuper тестировался и разрабатывался на Ubuntu LTS 22.04+, а также использовался в Windows 11. Он зависит от нескольких модулей Python. Для лучшей совместимости рекомендуется использовать Linux.

Для его использования ваш телефон должен быть рутирован или предоставлять доступ к сервисному порту diag через USB. Чтобы проверить совместимость с вашим телефоном, найдите модель телефона на сайте, например GSMArena, и проверьте, есть ли в нём процессор Qualcomm.

Чтобы открывать PCAP-файлы, создаваемые QCSuper, можно использовать любой Wireshark 2.x–4.x для кадров 2G/3G, но для кадров 4G требуется как минимум Wireshark 2.5.x (и 2.6.x для отдельных NAS-сообщений, расшифрованных из кадров 4G). В Ubuntu в настоящее время доступна достаточно свежая сборка для всех версий.

Декодирование кадров 5G тестировалось в Wireshark 3.6.x и выше и выполняется путём автоматической установки Lua-плагина Wireshark (в %APPDATA%\Wireshark\plugins в Windows или в ~/.local/lib/wireshark/plugins в Linux и macOS). Этого можно избежать, задав переменную окружения DONT_INSTALL_WIRESHARK_PLUGIN=1, если вы хотите отказаться от установки.

Установка в Linux (PIP)

Чтобы установить стабильную версию QCSuper в систему из PyPI, выполните следующие команды:```bash

Install dependencies

sudo apt install python3-pip wireshark

Install stable QCSuper system-wide

sudo pip3 install --upgrade qcsuper --break-system-packages

root@kitploit:~
Затем вы можете просто ввести `qcsuper` в терминале, чтобы запустить QCSuper.

Чтобы установить разрабатываемую версию в определённую папку, откройте терминал и введите следующее:```bash
# Download QCSuper
git clone https://github.com/P1sec/qcsuper
cd qcsuper

# Install dependencies
sudo apt install python3-pip wireshark
sudo pip3 install --upgrade . --break-system-packages

Затем запустите QCSuper из каталога qcsuper/, используя команду ./qcsuper.py в терминале.

Установка Linux (UV)

В Linux вы можете установить QCSuper с помощью пакетного менеджера uv, который является современной альтернативой PIP.

Сначала выполните одну из этих команд в терминале, чтобы установить uv:```bash sudo snap install --classic astral-uv # On Ubuntu sudo dnf install -y uv # On Fedora sudo pacman -S uv # On Archlinux, Manjaro curl -LsSf https://astral.sh/uv/install.sh | sh # On Debian and others

root@kitploit:~
Затем выполните это, чтобы установить последнюю стабильную версию:```bash
uv tool install qcsuper

В качестве альтернативы вы можете установить последнюю разрабатываемую версию с помощью этой команды:```bash uv tool install git+https://github.com/P1sec/qcsuper

root@kitploit:~
Затем вы можете просто ввести это в свой терминал:```bash
qcsuper

Однако если вам нужно запускать qcsuper от имени root, например потому что вы читаете данные с модемного устройства, qcsuper может отсутствовать в $PATH при использовании uv с sudo, поэтому может потребоваться сделать что-то вроде:```bash sudo env "PATH=$PATH" qcsuper

root@kitploit:~
Если вы хотите принять участие в разработке инструмента, вы можете использовать следующие команды, чтобы загрузить исходный код, а затем создать символические ссылки на QCSuper в `~/.local/bin` в каталог исходного кода:```bash
git clone https://github.com/P1sec/qcsuper
cd qcsuper
uv sync # Create .venv in the current directory
uv tool install -e . # Create symlinks into ~/.local/bin

Установка в Windows

QCSuper может работать в Windows, но заранее следует убедиться, что приглашение ADB от Google корректно запускается на вашей машине с вашим устройством, а также вручную создать фильтры libusb-win32 (через утилиту, доступную в меню «Пуск» после её установки) в том случае, если ваше устройство должно напрямую подключаться к Diag-порту через псевдо-последовательный USB.

(Обратите внимание: если вы переключаете режим вашего устройства, связанные USB PID/VID могут измениться, и может потребоваться заново выполнить привязку драйверов в утилите создания фильтров libusb-win32 — и/или в диспетчере периферийных устройств Windows, в зависимости от ситуации.)

В Windows вам может понадобиться (в дополнение к драйверам ядра ADB от Google) загрузить и установить USB-драйверы для вашего телефона, соответствующие его модели (это могут быть универсальные USB-драйверы Qualcomm). Поищите в Google инструкции по запросу «модель вашего телефона + "USB driver"» или «"ADB driver"».

Затем нужно убедиться, что вы можете получить доступ к устройству с помощью adb. Учебник о том, как загрузить и настроить adb, можно найти здесь. Команда adb.exe shell (или любой другой исполняемый файл, который вы используете; копия исполняемого файла ADB находится в папке qcsuper/inputs/external/adb внутри QCSuper) должна отобразить приглашение для продолжения.

Затем перейдите по следующим ссылкам (инструмент недавно тестировался на Windows 11 — не гарантируется его работа на Windows 7), чтобы:

  • Установите Python 3.12 (версия для Windows 7: Python 3.7) или новее (обязательно отметьте параметры добавления в PATH, установки для всех пользователей и установки pip)
  • Установите Wireshark 4.2 (версия для Windows 7: Установите Wireshark 3.6) или новее
  • Установите libusb-win32 1.2.7.3 (версия для Windows 7: libusb-win32 1.2.3.7) или новее
  • Перезапустите командную строку/терминал, чтобы убедиться, что системная переменная %PATH% обновлена.
  • Загрузите и распакуйте QCSuper

Чтобы установить необходимые модули Python, откройте командную строку и введите:```bash pip3 install --upgrade pyserial pyusb crcmod pycrate https://github.com/pyocd/libusb-package/archive/master.zip

root@kitploit:~
Оставаясь в командной строке, перейдите в каталог, содержащий QCSuper, с помощью команды `cd`. Затем вы можете выполнять команды (которые должны начинаться с `py qcsuper.py` или `py3 qcsuper.py`, если вы установили Python 3 из онлайн-установщика, или `python3.exe .\qcsuper.py`, если вы установили его из Microsoft Store).

Как уже отмечалось выше, возможно, вам придётся добавить фильтр `libusb-win32` с помощью утилиты, доступной в меню «Пуск», чтобы интерфейс, соответствующий порту Diag, был виден QCSuper на устройстве после переключения режима (первая неудачная попытка запустить инструмент с флагом `--adb` должна вызвать переключение режима, если драйвер ADB работает, а устройство правильно рутировано).

<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/48811/e7aab43a3643cd941857febb8fcb8e2d7bf8c3638629a4e5591dc689afa48c07.png" alt="Скриншот добавления фильтра libusb-win32 для порта Diag телефона Mi">
</p>

## Поддерживаемые протоколы

QCSuper поддерживает захват нескольких мобильных радиопротоколов. Эти протоколы помещаются после [заголовка GSMTAP](http://osmocom.org/projects/baseband/wiki/GSMTAP) — стандартного заголовка (инкапсулированного в UDP/IP), позволяющего идентифицировать протокол, а пакеты GSMTAP помещаются в [файл PCAP](https://wiki.wireshark.org/Development/LibpcapFileFormat), который полностью анализируется с помощью Wireshark.

Протоколы 2G/3G/4G можно разбить на несколько "уровней": уровень 1 отвечает за цифровую радиомодуляцию и мультиплексирование, уровень 2 выполняет такие задачи, как фрагментация и подтверждение приёма, уровень 3 — это собственно сигнализация или пользовательские данные.

QCSuper чаще всего позволяет захватывать уровень 3, так как его наиболее практично анализировать с помощью Wireshark, и именно его протокол Diag предоставляет изначально (и здесь есть некоторая интересная информация).

* 2G (GSM): уровень 3 и выше (RR/...)
* 2.5G (GPRS и EDGE): уровень 2 и выше (MAC-RLC/...) для подтверждений приёма данных
* 3G (UMTS): уровень 3 и выше (RRC/...)
  * Кроме того, он поддерживает пересборку SIB (System Information Blocks — системные информационные блоки, данные, транслируемые всем пользователям) в отдельные кадры GSMTAP, поскольку Wireshark в настоящее время не может сделать это сам: флаг `--reassemble-sibs`
* 4G (LTE): уровень 3 и выше (RRC/...)
  * Кроме того, он поддерживает помещение расшифрованных сообщений NAS (которые встроены в зашифрованном виде в пакеты RRC) в дополнительные кадры: флаг `--decrypt-nas`

По умолчанию IP-трафик, отправляемый вашим устройством, не включается, вы видите только кадры сигнализации. Вы можете включить генерируемый вами IP-трафик с помощью опции `--include-ip-traffic` (IP является, по сути, уровнем 3 для вашего трафика данных в 2G/3G/4G, с учётом того, что его заголовки могут быть сжаты (ROHC) и может быть включён небольшой заголовок PPP).

Передаваемый вами трафик данных использует канал, отличный от сигнального трафика; этот канал настраивается через сигнальный трафик; QCSuper, таким образом, должен показывать вам все детали, касающиеся того, как инициируется этот канал.

## Примечание по использованию

Чтобы использовать QCSuper, вы указываете один вход (например: `--adb` (телефон Android), `--usb-modem`) и один или несколько модулей (`--wireshark-live` для открытия Wireshark, `--pcap-dump` для записи трафика в файл PCAP, `--info` для общей информации об устройстве...).

Вот несколько команд, которые вы можете ввести:```bash
# Open Wireshark directly, using a rooted Android phone as an input,
# for compatible phones:
$ qcsuper --adb --wireshark-live

# ^ this command is equivalent to (prefer this when running as root):
$ qcsuper --adb --pcap-dump - | wireshark -k -i -

# Same, but dump to a PCAP file instead of opening Wireshark directly
$ qcsuper --adb --pcap-dump /tmp/my_pcap.pcap

Или, если это недостаточно просто для работы:```bash

Same, but using an USB modem/phone exposing a Diag serial port

directly over USB, in the case where the "--adb" mode does not

work directly:

- With a compatible Android phone where the Diag port over USB has

been manually enabled by the user (see the "How to manually enable

the diagnostic ports on my phone" section below for a summary of

how this may be possible with most Qualcomm-based models)

In this case, you may try:

$ qcsuper --usb-modem auto --wireshark-live

Or, if selecting manually the USB device corresponding to the

Diag-enabled phone turns to be requried:

$ lsusb (..) Bus 001 Device 076: ID 05c6:9091 Qualcomm, Inc. Intex Aqua Fish & Jolla C Diagnostic Mode $ qcsuper --usb-modem 1d6b:0003 --wireshark-live # With vendor ID:product ID... $ qcsuper --usb-modem 002:001 --wireshark-live # ...or with bus ID:device ID

Or, if selecting the configuration number and interface number (referred as "bConfigurationValue" and "bInterfaceNumber" in the USB desciprtors) turn to be required:

$ lsusb -v (..) $ qcsuper --usb-modem 1d6b:0003:1:0 --wireshark-live # With vendor ID:product ID:configuration:interface... $ qcsuper --usb-modem 002:001:1:0 --wireshark-live # ...or with bus ID:device ID:configuration:interface

- With a generic serial-over-USB device where the "usbserial" module has

loaded a /dev/ttyUSB{0-9} device corresponding to the diagnostic port:

$ qcsuper --usb-modem /dev/ttyUSB2 --wireshark-live

- With an Option device where the "hsoserial" module has loaded a

/dev/ttyHS{0-9} device corresponding to the diagnostic port:

$ qcsuper --usb-modem /dev/ttyHS2 --wireshark-live

root@kitploit:~
Вот текущее уведомление об использовании QCSuper:```
usage: qcsuper [-h] [--cli] [--efs-shell] [--efs-shell2] [-v] (--adb | --adb-wsl2 ADB_WSL2 | --tcp IP_ADDRESS:TCP_PORT | --usb-modem TTY_DEV | --dlf-read DLF_FILE |
               --json-geo-read JSON_FILE) [--info] [--pcap-dump PCAP_FILE] [--wireshark-live] [--memory-dump OUTPUT_DIR] [--dlf-dump DLF_FILE] [--json-geo-dump JSON_FILE]
               [--decoded-sibs-dump] [--reassemble-sibs] [--decrypt-nas] [--include-ip-traffic] [--start MEMORY_START] [--stop MEMORY_STOP]

A tool for communicating with the Qualcomm DIAG protocol (also called QCDM or DM).

options:
  -h, --help            show this help message and exit
  --cli                 Use a command prompt, allowing for interactive completion of commands.
  --efs-shell           Spawn an interactive shell to navigate within the embedded filesystem (EFS) of the baseband device.
  --efs-shell2          Spawn an interactive shell to navigate within the embedded filesystem (EFS) of the baseband device. Use the secondary filesystem known as "alternate".
  -v, --verbose         Add output for each received or sent Diag packet.

Input mode:
  Choose an one least input mode for DIAG data.

  --adb                 Use a rooted Android phone with USB debugging enabled as input (requires adb).
  --adb-wsl2 ADB_WSL2   Unix path to the Windows adb executable. Equivalent of --adb command but with WSL2/Windows interoperability.
  --tcp IP_ADDRESS:TCP_PORT
                        Connect to remote TCP service exposing DIAG interface.
  --usb-modem TTY_DEV   Use an USB modem exposing a DIAG pseudo-serial port through USB.
                        Possible syntaxes:
                          - "auto": Use the first device interface in the system found where the
                            following criteria is matched, by order of preference:
                            - bInterfaceClass=255/bInterfaceSubClass=255/bInterfaceProtocol=48/bNumEndpoints=2
                            - bInterfaceClass=255/bInterfaceSubClass=255/bInterfaceProtocol=255/bNumEndpoints=2
                          - usbserial or hso device name (Linux/macOS): "/dev/tty{USB,HS,other}{0-9}"
                          - COM port identifier (Windows): "COM{0-9}"
                          - "vid:pid[:cfg:intf]" (vendor ID/product ID/optional bConfigurationValue/optional
                            bInterfaceNumber) format in hexa: e.g. "05c6:9091" or "05c6:9091:1:0 (vid and pid
                            are four zero-padded hex digits, cfg and intf are canonical values from the USB
                            descriptor, or guessed using the criteria specified for "auto" above if not specified)
                          - "bus:addr[:cfg:intf]" (USB bus/device address/optional bConfigurationValue/optional
                            bInterfaceNumber) format in decimal: e.g "001:003" or "001:003:0:3" (bus and addr are
                            three zero-padded digits, cfg and intf are canonical values from the USB descriptor)
  --dlf-read DLF_FILE   Read a DLF file generated by QCSuper or QXDM, enabling interoperability with vendor software.
  --json-geo-read JSON_FILE
                        Read a JSON file generated using --json-geo-dump.

Modules:
  Modules writing to a file will append when it already exists, and consider it Gzipped if their name contains ".gz".

  --info                Read generic information about the baseband device.
  --pcap-dump PCAP_FILE
                        Generate a PCAP file containing GSMTAP frames for 2G/3G/4G, to be loaded using Wireshark.
  --wireshark-live      Same as --pcap-dump, but directly spawn a Wireshark instance.
  --memory-dump OUTPUT_DIR
                        Dump the memory of the device (may not or partially work with recent devices).
  --dlf-dump DLF_FILE   Generate a DLF file to be loaded using QCSuper or QXDM, with network protocols logging.
  --json-geo-dump JSON_FILE
                        Generate a JSON file containing both raw log frames and GPS coordinates, for further reprocessing. To be used in combination with --adb.
  --decoded-sibs-dump   Print decoded SIBs to stdout (experimental, requires pycrate).

PCAP generation options:
  To be used along with --pcap-dump or --wireshark-live.

  --reassemble-sibs     Include reassembled UMTS SIBs as supplementary frames, also embedded fragmented in RRC frames.
  --decrypt-nas         Include unencrypted LTE NAS as supplementary frames, also embedded ciphered in RRC frames.
  --include-ip-traffic  Include unframed IP traffic from the UE.

Memory dumping options:
  To be used along with --memory-dump.

  --start MEMORY_START  Offset at which to start to dump memory (hex number), by default 00000000.
  --stop MEMORY_STOP    Offset at which to stop to dump memory (hex number), by default ffffffff.

Указание - для передачи данных из stdin или в stdout поддерживается (сжатое gzip содержимое может не обнаруживаться).

Как рутировать мой телефон?

Этот файл README не является руководством по рутированию вашего телефона (получению возможности выполнять на телефоне такие команды, как "su").

На большинстве современных Android-устройств вы должны сначала использовать опцию «OEM/bootloader unlock», присутствующую в настройках разработчика телефона, чтобы разблокировать загрузчик. Затем вы можете воспользоваться таким инструментом, как Magisk, который позволит вам получить пропатченный образ для загрузчика вашего телефона; этот образ вы затем сможете загрузить на ваш телефон в режиме fastboot.

QCSuper будет работать проще на вашем устройстве на базе Qualcomm, если ваш телефон рутирован, но часто существуют способы включить USB-режим Qualcomm Diag (также известный как «DM», Diag Monitor) на вашем телефоне без рутирования. Это зависит от производителя вашего телефона и происходит, например, путём ввода магической комбинации цифр на клавиатуре набора номера вашего телефона. Пожалуйста, обратитесь к разделу «Как вручную включить диагностические порты на моём телефоне?» ниже для получения дополнительных сведений.

Перед рутированием вашего телефона помните, что вы также можете захотеть загрузить альтернативный образ восстановления, например TWRP, на ваш телефон с разблокированным OEM, чтобы выполнить резервное копирование разделов с помощью такого инструмента, как TWRP (это может быть так же просто, как загрузить образ через Fastboot, включить ADB-соединение в настройках TWRP и использовать adb pull для выбранных разделов в папке /dev/block/by-name папке`).

Для получения конкретных инструкций по рутированию или включению режима Diag для вашей модели телефона вы можете поискать информацию на форуме XDA-developers с соответствующими ключевыми словами.

Как вручную включить диагностические порты на моём телефоне?

На Android-устройствах на базе Qualcomm/MSM с ядром Linux 4.9 или более ранней версии (сюда входит примерно часть устройств вплоть до Android 12 и все устройства до Android 10) Android-устройства на базе Qualcomm обычно содержат системное устройство /dev/diag, которое позволяет передавать данные в диагностический порт базового процессора (baseband).

На Android-устройствах на базе Qualcomm/MSM с ядром Linux 4.14 или более поздней версии (сюда входит примерно часть устройств от Android 10 и все устройства от Android 13), /dev/diag исчез, так как соответствующий модуль diagchar отключён по умолчанию в последних ядрах AOSP/Linux.

На устройствах с ядром MSM Linux 4.9 или более ранней версии при использовании флага --adb QCSuper попытается автоматически подключиться через ADB, затем попытается передать исполняемую утилиту, подключающуюся к устройству /dev/diag, чтобы запустить её от имени root с помощью такой команды, как su -c /data/local/tmp/adb_bridge, и впоследствии передавать диагностические данные с устройства по TCP (также перенаправляя соответствующий TCP-порт через ADB).

На устройствах с ядром MSM Linux 4.14 или более поздней версии при использовании флага --adb QCSuper попытается автоматически подключиться через ADB, затем попытается переключить USB-режим порта телефона с помощью такой команды, как su -c 'setprop sys.usb.config diag,adb', и выполнит эквивалент флага --usb-modem auto (см. ниже).

Флаг --usb-modem <value> позволяет QCSuper подключаться к диагностическому порту Qualcomm через псевдопоследовательный порт по USB, независимо от ADB; это наиболее распространённый способ подключения к протоколу Qualcomm diag на Android-телефоне с использованием внешнего устройства.

Чтобы использовать флаг --usb-modem <value>, диагностический порт Qualcomm должен быть включён на соответствующем телефоне; иными словами, телефон должен быть заранее переключён в USB-режим.

Наиболее распространённый способ переключить ваше устройство в USB-режим — выполнить от имени root такую команду, как setprop sys.usb.config diag,adb, но могут быть и другие способы (у некоторых производителей телефонов) включить режим Qualcomm diagnostics-over-USB; см., например, эту страницу — там приведены возможные способы включения Diag без root для некоторых устройств; часто для этого нужно ввести магическую комбинацию цифр на клавиатуре набора номера телефона.

На других устройствах также может быть возможно использовать APK-файл, подписанный производителем телефона и имеющий системные разрешения, чтобы включить режим Diag без рутирования (например, поищите APK com.longcheertel.midtest для устройств на базе Xiaomi).

После того как ваше устройство было правильно переключено в нужный режим, выполнение команды getprop sys.usb.config через ADB должно показать текстовую строку, содержащую diag.

Затем на стороне вашего компьютера выполнение lsusb (в Linux) должно показать строку, относящуюся к вашему устройству, например:``` Bus 001 Device 076: ID 05c6:9091 Qualcomm, Inc. Intex Aqua Fish & Jolla C Diagnostic Mode

root@kitploit:~
Обратите внимание на `001:076` (идентификатор шины/устройства), а также на информацию `05c6:9091` (идентификатор производителя/модели), присутствующую в этом выводе.

Когда эта информация будет у вас в наличии, **можно попробовать использовать такой флаг, как `--usb-modem 05c6:9091` или `--usb-modem 001:076`** вместе с QCSuper (соблюдайте разрядность цифр).

Если это не даст однозначного результата, можно воспользоваться командой `lsusb -v -d 05c6:9091`, которая должна выдать подробный вывод, включая конфигурации USB, интерфейсы и конечные точки соответствующего USB-устройства:```
Bus 001 Device 027: ID 05c6:9091 Qualcomm, Inc. Intex Aqua Fish & Jolla C Diagnostic Mode
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.01
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x05c6 Qualcomm, Inc.
  idProduct          0x9091 Intex Aqua Fish & Jolla C Diagnostic Mode
  bcdDevice            5.04
  iManufacturer           1 Xiaomi
  iProduct                2 Mi 11
  iSerial                 3 d94f4341
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0086
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          4 Default composition
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol     48 
      iInterface              0 
[...]

QCSuper позволяет вручную выбрать идентификаторы конфигурации и интерфейса, к которым вы хотите выполнить подключение на соответствующем устройстве (обозначенные как bConfigurationValue и bInterfaceNumber в сыром USB-дескрипторе), в случае, если оно определено некорректно. Например, флаг --usb-modem 05c6:9091:1:0 выберет соответственно конфигурацию 1 и интерфейс 0 на соответствующем устройстве. --usb-modem 05c6:9091:1:4 выберет интерфейс 4 в рамках конфигурации 1.

Если сведения об индексах конфигурации и интерфейса не указаны, будет выбран первый дескриптор интерфейса на системной USB-шине, который соответствует следующим критериям, в порядке предпочтения:

  • bInterfaceClass=255/bInterfaceSubClass=255/bInterfaceProtocol=48/bNumEndpoints=2
  • bInterfaceClass=255/bInterfaceSubClass=255/bInterfaceProtocol=255/bNumEndpoints=2

При использовании флага --usb-modem auto выбирается первое устройство, предоставляющее USB-интерфейс, соответствующий этому критерию, и при необходимости в Linux выбирается нижележащее символьное устройство /dev/ttyUSB* (модуль usbserial) или /dev/ttyHS* (модуль hso) в случае, если устройство было обнаружено и подключено модулем ядра (см. раздел «Использование QCSuper с USB-модемом» ниже).

Кроме того, в Linux также может быть возможно вручную создать конечные точки /dev/ttyUSB*, соответствующие интерфейсам заданного USB-устройства, к которым вы сможете подключиться с помощью QCSuper, используя флаг вида --usb-modem /dev/ttyUSB0 (для этого может потребоваться запуск QCSuper с правами root), с помощью модуля usbserial. Для этого можно использовать команду вида:``` sudo rmmod usbserial sudo modprobe usbserial vendor=0x05c6 product=0x9091

root@kitploit:~
## Использование QCSuper с USB-модемом

Вы можете использовать QCSuper с USB-модемом, предоставляющим Diag-порт, с помощью опции `--usb-modem <device>`, где `<device>` — это имя псевдопоследовательного устройства в Linux (например, `/dev/ttyUSB0`, `/dev/ttyHS2` и другие возможности) или COM-порта в Windows (например, `COM2`, `COM3`).

Обратите внимание, что в большинстве конфигураций вам потребуется запускать QCSuper от имени root, чтобы иметь возможность использовать этот режим, особенно для устранения конфликтов, связанных с последовательным портом.

Если вы не знаете, какие устройства в `/dev` предоставляют Diag-порт, возможно, вам придётся перепробовать несколько из них. Вы можете попробовать автоопределение, остановив демон ModemManager (`sudo systemctl stop ModemManager`), и использовать следующую команду: `sudo ModemManager --debug 2>&1 | grep -i 'port is QCDM-capable'`, затем нажмите Ctrl-C.

Обратите внимание: если вам вообще не удаётся использовать ваше устройство, например, с ModemManager, скорее всего, оно настроено не полностью и не будет работать и с QCSuper. Вот несколько возможных подводных камней:

  * Вы не применили правильную команду [переключения режима](https://wiki.archlinux.org/index.php/USB_3G_Modem#Mode_switching) для вашего устройства.
  
  * Если вы купили устройство, в котором ранее была SIM-карта другого оператора, ваше устройство может быть заблокировано оператором (sim-locked). Возможно, вам придётся использовать код разблокировки от прежнего оператора и ввести его в устройство, как если бы это был PIN-код: `sudo mmcli -i 0 --pin=<your_unlock_code>`

Если ваше USB-устройство на базе Qualcomm не предоставляет Diag-порт по умолчанию, вам может потребоваться ввести следующее через AT-порт, чтобы включить Diag-порт:```
AT$QCDMG

Обратите внимание, что одновременно только один клиент может общаться с портом Diag. Это касается двух экземпляров QCSuper или экземпляров QCSuper и ModemManager.

Если ModemManager активен в вашей системе, QCSuper попытается динамически добавить правило udev, чтобы предотвратить его доступ к порту Diag, и перезапустить его демон, так как в настоящее время это лучший способ добиться этого. При закрытии QCSuper это правило будет удалено.

Поддерживаемые устройства

QCSuper был успешно протестирован с:

  • Sony Xperia Z (телефон) - 4G - работает из коробки после получения root-прав и включения adb
  • Nexus 6P (телефон) - 4G - работает из коробки после получения root-прав и включения adb
  • ZTE MF823 (USB-модем) - 4G - может потребоваться переключить режим устройства на CDC-WDM, перевести устройство в заводской режим, а затем выполнить указанную выше AT-команду
  • ZTE MF667 (USB-модем) - 3G, 2011 - должен работать из коробки (может потребоваться переключение режима)
  • Option Icon 225 (USB-модем) - 3G, 2008
  • Novatel Ovation MC998D (USB-модем)
  • ZTE WCDMA Technologies MSM MF110/MF627/MF636 (USB-модем)
  • ZTE 403zt (USB-модем) - 4G
  • OnePlus One и 3 (телефоны)
  • Andromax A16C3H (телефон)
  • Samsung Galaxy S4 GT-I9505 (телефон)
  • Virtual Access GW1150 - через TCP-соединение
  • Westermo Merlin 4600 - через TCP-соединение
  • Fairphone 5 - см. полное руководство

Однако цель состоит в том, чтобы обеспечить совместимость с максимально возможным диапазоном устройств на базе чипсета Qualcomm, по крайней мере для части захвата.

Другие работающие устройства перечислены на: https://github.com/P1sec/QCSuper/issues?q=label:"confirmed+working"

Не стесняйтесь сообщать, работает ли ваше устройство или нет, открыв issue на Github.

Связанные инструменты, использующие протокол Diag

Существует несколько других открытых инструментов, реализующих части протокола Diag для различных целей:

  • ModemManager: основной демон, позволяющий использовать USB-модемы в Linux, реализует части протокола Diag (обозначаемые как QCDM) для получения базовой информации об USB-модемах.
  • SnoopSnitch (в частности gsm-parser): в основном Android-приложение, предназначенное для обнаружения потенциальных атак на радиоуровень (IMSI-перехватчики, поддельные BTS...). Также имеет вторичную функцию захвата некоторого сигнального трафика в PCAP, которая даёт не совсем то же самое, что QCSuper (например, LTE-трафик не инкапсулируется в GSMTAP, поддержка устройств может отличаться).
    • diag-parser: Linux-инструмент, являющийся производной от функции генерации PCAP из SnoopSnitch, несколько улучшенный и предназначенный для работы с USB-модемами.
  • MobileInsight: это Android-приложение предназначено для разбора всевозможных журналов, выводимых устройствами Qualcomm и Mediatek (не только содержащих сигнальную информацию, но и проприетарные отладочные структуры), с дампом их в определённый формат представления XML. Не предоставляет пользовательские PCAP-файлы (но ранее использовало Wireshark в качестве бэкенда для преобразования определённой информации протоколов в XML).
  • qcombbdbg: отладчик для базового процессора Qualcomm, настраивающийся путём перехвата команды Diag с использованием команды Diag, позволяющей записывать в память, для USB-модема Option Icon 225.
  • OpenPST: набор инструментов, связанных с устройствами Qualcomm, включая GUI-утилиту, позволяющую, например, читать данные с крошечной встроенной файловой системы, доступной через Diag (EFS).
  • SCAT: инструмент с аналогичными возможностями генерации GSMTAP, принимающий на вход последовательный порт, также поддерживающий Samsung Exynos.
Скачать инструмент