
QCSuper is a tool communicating with Qualcomm-based phones and modems, allowing to capture raw 2G/3G/4G radio frames, among other things.
QCSuper는 Qualcomm 기반 휴대폰 및 모뎀과 통신하는 도구로, 2G/3G/4G 원시(일부 모델의 경우 5G) 무선 프레임을 캡처할 수 있게 해줍니다.
이를 통해 루팅된 Android 휴대폰, USB 동글 또는 다른 형식의 기존 캡처를 사용하여 PCAP 캡처를 생성할 수 있습니다.

설치한 후에는 루팅된 휴대폰을 USB에 연결하고 호환 기기와 함께 사용하는 것은 다음과 같이 간단합니다:```bash qcsuper --adb --wireshark-live
또는, 휴대폰에서 Diag port 노출을 수동으로 활성화한 경우(해당 절차는 휴대폰 모뎀 및 제조업체에 따라 다를 수 있으며, 자세한 설명은 아래를 참조하세요), 또는 모바일 광대역 동글을 연결한 경우:```bash
qcsuper --usb-modem auto --wireshark-live
Qualcomm Diag 프로토콜(QCDM 또는 DM(진단 모니터)이라고도 함)을 사용하여 휴대폰의 베이스밴드와 통신합니다.
기기가 작동하는지 작동하지 않는지 보고하시겠습니까? Github issue를 열 수 있습니다.
부록:
블로그 게시물/데모: QCSuper 소개: Qualcomm 기반 휴대폰에서 2G/3G/4G 무선 트래픽을 캡처하는 도구
추가 문서:
QCSuper는 최근 **Ubuntu LTS 22.04+**에서 테스트 및 개발되었으며 Windows 11에서도 사용되었습니다. 이 도구는 몇 가지 Python 모듈에 의존합니다. 더 나은 호환성을 위해 Linux 사용을 권장합니다.
사용하려면 휴대폰이 루팅되어 있어야 하거나 USB를 통해 diag 서비스 포트를 노출해야 합니다. 휴대폰과의 호환성을 확인하려면 GSMArena 같은 사이트에서 휴대폰 모델을 검색하고 Qualcomm 프로세서가 장착되어 있는지 확인하세요.
QCSuper가 생성한 PCAP 파일을 열려면 2G/3G 프레임에는 Wireshark 2.x - 4.x를 사용할 수 있지만, 4G 프레임에는 최소 Wireshark 2.5.x가 필요합니다(4G 프레임에서 복호화된 개별 NAS 메시지에는 2.6.x 필요). Ubuntu는 현재 모든 버전에 대해 충분히 최신 빌드를 제공합니다.
5G 프레임 디코딩은 Wireshark 3.6.x 이상에서 테스트되었으며, Wireshark Lua 플러그인을 자동으로 설치하여 수행됩니다(Windows에서는 %APPDATA%\Wireshark\plugins, Linux 및 macOS에서는 ~/.local/lib/wireshark/plugins). 이 플러그인 설치를 피하려면 DONT_INSTALL_WIRESHARK_PLUGIN=1 환경 변수를 설정하여 설치를 방지할 수 있습니다.
PyPI에서 QCSuper의 안정 버전을 시스템 전체에 설치하려면 다음 명령을 실행할 수 있습니다.```bash
sudo apt install python3-pip wireshark
sudo pip3 install --upgrade qcsuper --break-system-packages
그런 다음 터미널에서 `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.py 명령을 사용하여 qcsuper/ 디렉터리에서 QCSuper를 실행하세요.
Linux에서는 PIP의 현대적인 대안인 uv 패키지 관리자를 사용하여 QCSuper를 설치할 수 있습니다.
먼저, 터미널에서 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
그런 다음, 최신 안정 버전을 설치하려면 다음을 실행하세요:```bash
uv tool install qcsuper
또는 다음 명령을 사용하여 최신 개발 버전을 설치할 수 있습니다:```bash uv tool install git+https://github.com/P1sec/qcsuper
그런 다음 터미널에 다음과 같이 입력하면 됩니다:```bash
qcsuper
하지만, 예를 들어 모뎀 장치에서 데이터를 읽기 때문에 qcsuper를 root로 실행해야 하는 경우, sudo와 함께 uv를 사용할 때 qcsuper가 $PATH에 없을 수 있으므로 다음과 같은 작업이 필요할 수 있습니다:```bash
sudo env "PATH=$PATH" qcsuper
If you wish to participate to the development of the tool, you can use these commands in order to download the source, then create symbolic links to QCSuper into `~/.local/bin` towards the source directory:
도구 개발에 참여하려면 다음 명령을 사용하여 소스를 다운로드한 다음 `~/.local/bin`에 있는 QCSuper에 대한 심볼릭 링크를 소스 디렉터리로 만들 수 있습니다:```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
QCSuper는 Windows에서 실행할 수 있지만, 사전에 Google의 ADB 프롬프트가 사용자 컴퓨터와 장치에서 올바르게 실행되는지 확인해야 하며, 장치가 유사 직렬 USB를 통해 Diag 포트에 직접 연결해야 하는 경우에는 (설치 후 시작 메뉴에서 접근 가능한 유틸리티를 통해) libusb-win32 필터를 수동으로 생성해야 합니다.
(기기의 모드를 전환하면 관련 USB PID/VID가 변경될 수 있으며, 경우에 따라 libusb-win32 필터 생성 유틸리티 및/또는 Windows 주변 기기 관리자에서 드라이버 연결을 다시 수행해야 할 수 있습니다.)
Windows에서는 (Google의 ADB 커널 드라이버 외에도) 휴대폰 모델에 맞는 USB 드라이버를 다운로드하여 설치해야 할 수 있습니다(일반적인 Qualcomm USB 드라이버가 포함될 수 있음). 자세한 지침은 Google에서 휴대폰 모델 + "USB driver" 또는 "ADB driver"를 검색하십시오.
그런 다음, adb를 사용하여 장치에 연결할 수 있는지 확인해야 합니다. adb를 다운로드하고 설정하는 방법에 대한 튜토리얼은 여기에서 찾을 수 있습니다. adb.exe shell(또는 사용하는 실행 파일 경로, QCSuper의 qcsuper/inputs/external/adb 폴더에 ADB 실행 파일 사본이 있음) 명령이 프롬프트를 표시해야 계속할 수 있습니다.
그런 다음, 아래 링크를 차례로 따라 진행하십시오 (이 도구는 최근 Windows 11에서 테스트되었으며, Windows 7에서 작동한다는 보장은 없습니다):
%PATH% 시스템 변수가 업데이트되었는지 확인하려면 명령 프롬프트/터미널을 다시 시작하십시오.필요한 Python 모듈을 설치하려면 명령 프롬프트를 열고 다음을 입력하십시오:```bash pip3 install --upgrade pyserial pyusb crcmod pycrate https://github.com/pyocd/libusb-package/archive/master.zip
여전히 명령 프롬프트에 있다면, `cd` 명령을 사용하여 QCSuper가 있는 디렉터리로 이동하십시오. 그런 다음 명령을 실행할 수 있습니다 (명령은 온라인 설치 프로그램에서 Python 3를 설치한 경우 `py qcsuper.py` 또는 `py3 qcsuper.py`로 시작해야 하며, Windows Store에서 설치한 경우 `python3.exe .\qcsuper.py`로 시작해야 합니다).
위에서 언급한 대로, 모드 전환된 장치에서 Diag 포트에 해당하는 인터페이스가 QCSuper에 보이도록 하려면 시작 메뉴에서 제공되는 유틸리티를 통해 `libusb-win32` 필터를 추가해야 할 수 있습니다 (`--adb` 플래그를 사용하여 도구를 처음 실행하려는 시도가 실패하면 ADB 드라이버가 작동 중이고 장치가 올바르게 루팅된 경우 모드 전환이 트리거되어야 합니다).
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/48811/e7aab43a3643cd941857febb8fcb8e2d7bf8c3638629a4e5591dc689afa48c07.png" alt="Mi 폰의 Diag 포트에 libusb-win32 필터를 추가하는 스크린샷">
</p>
## 지원되는 프로토콜
QCSuper는 몇 가지 모바일 무선 프로토콜의 캡처를 지원합니다. 이 프로토콜들은 프로토콜을 식별할 수 있게 해주는 표준 헤더인 [GSMTAP 헤더](http://osmocom.org/projects/baseband/wiki/GSMTAP) 뒤에 배치되며 (UDP/IP로 캡슐화됨), GSMTAP 패킷은 Wireshark로 완전히 분석할 수 있는 [PCAP 파일](https://wiki.wireshark.org/Development/LibpcapFileFormat)에 저장됩니다.
2G/3G/4G 프로토콜은 몇 가지 '계층(layer)'으로 나눌 수 있습니다. 계층 1은 디지털 무선 변조와 다중화에 관한 것이고, 계층 2는 분할(fragmentation)과 확인 응답(acknowledgement) 같은 것을 처리하며, 계층 3은 실제 시그널링 또는 사용자 데이터입니다.
QCSuper는 대부분 계층 3에서 캡처할 수 있게 해줍니다. 계층 3은 Wireshark로 분석하기에 가장 실용적이고, Diag 프로토콜이 기본적으로 제공하는 것이기도 합니다 (그리고 여기에 몇 가지 흥미로운 정보가 있습니다).
* 2G (GSM): 계층 3 이상 (RR/...)
* 2.5G (GPRS 및 EDGE): 데이터 확인 응답을 위한 계층 2 이상 (MAC-RLC/...)
* 3G (UMTS): 계층 3 이상 (RRC/...)
* 또한 Wireshark가 현재 자체적으로 수행할 수 없으므로 SIB(시스템 정보 블록, 모든 사용자에게 브로드캐스트되는 데이터)를 별도의 GSMTAP 프레임으로 재조립하는 것을 지원합니다: `--reassemble-sibs` 플래그
* 4G (LTE): 계층 3 이상 (RRC/...)
* 또한 RRC 패킷에 암호화되어 포함된 복호화된 NAS 메시지를 추가 프레임에 넣는 것을 지원합니다: `--decrypt-nas` 플래그
기본적으로 장치에서 전송되는 IP 트래픽은 포함되지 않으며 시그널링 프레임만 볼 수 있습니다. `--include-ip-traffic` 옵션을 사용하여 생성하는 IP 트래픽을 포함할 수 있습니다 (IP는 2G/3G/4G에서 데이터 트래픽의 계층 3이며, 헤더가 압축될 수 있고(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
$ qcsuper --usb-modem auto --wireshark-live
$ 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
$ 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
$ qcsuper --usb-modem /dev/ttyUSB2 --wireshark-live
$ qcsuper --usb-modem /dev/ttyHS2 --wireshark-live
다음은 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/부트로더 잠금 해제" 옵션을 사용해야 하며, 그런 다음 Magisk와 같은 도구를 사용하여 휴대폰 부트로더용 패치된 이미지를 얻을 수 있습니다. 이 이미지는 fastboot 모드에서 휴대폰에 로드할 수 있습니다.
QCSuper는 휴대폰이 루팅된 경우 Qualcomm 기반 기기에서 더 쉽게 작동할 가능성이 높지만, 휴대폰을 루팅하지 않고도 Qualcomm Diag USB 모드("DM", Diag Monitor라고도 함)를 활성화하는 방법이 종종 있습니다. 이는 휴대폰 제조사에 따라 다르며, 예를 들어 휴대폰 다이얼러 키패드에 특수한 숫자 조합을 입력하는 방식으로 이루어집니다. 자세한 내용은 아래의 "내 휴대폰에서 진단 포트를 수동으로 활성화하려면 어떻게 해야 하나요?" 섹션을 참조하세요.
휴대폰을 루팅하기 전에, OEM 잠금이 해제된 휴대폰에 TWRP와 같은 대체 복구 이미지를 로드하여 TWRP와 같은 도구로 파티션 백업을 수행할 수도 있음을 기억하세요(이미지를 Fastboot로 로드하고 TWRP 설정에서 ADB 링크를 활성화한 다음 /dev/block/by-name 폴더에서 선택한 파티션을 adb pull`로 가져오는 것만큼 간단할 수 있습니다).
특정 휴대폰 모델의 루팅 또는 Diag 모드 활성화에 대한 구체적인 지침은 XDA-developers 포럼에서 적절한 키워드로 정보를 검색할 수 있습니다.
Qualcomm/MSM 기반 Android 기기 중 Linux 커널 4.9 이하를 탑재한 기기(대략 Android 12까지의 일부 기기와 Android 10 이전의 모든 기기를 포함)에서 Qualcomm 기반 Android 기기는 일반적으로 /dev/diag라는 시스템 장치를 포함하며, 이를 통해 베이스밴드의 진단 포트로 데이터를 통신할 수 있습니다.
Qualcomm/MSM 기반 Android 기기 중 Linux 커널 4.14 이상을 탑재한 기기(대략 Android 10부터의 일부 기기와 Android 13 이후의 모든 기기를 포함)에서는 최근 AOSP/Linux 커널에서 해당 diagchar 모듈이 기본적으로 비활성화되어 있기 때문에 /dev/diag가 사라졌습니다.
Linux 4.9 이하 MSM 커널을 탑재한 기기에서 --adb 플래그를 사용하면 QCSuper는 자동으로 ADB를 통해 연결을 시도한 다음 /dev/diag 장치에 연결하는 실행 유틸리티를 전송하여 su -c /data/local/tmp/adb_bridge와 같은 명령으로 루트 권한으로 실행하려고 시도하고, 이후 TCP를 통해 기기와 진단 데이터를 전송합니다(또한 해당 TCP 포트를 ADB를 통해 포워딩합니다).
Linux 4.14 이상 MSM 커널을 탑재한 기기에서 --adb 플래그를 사용하면 QCSuper는 ADB를 통해 자동으로 연결을 시도한 다음 su -c 'setprop sys.usb.config diag,adb'와 같은 명령을 사용하여 휴대폰의 USB 포트를 모드 전환하고, 이후 --usb-modem auto 플래그와 동일한 작업을 수행합니다(아래 참조).
--usb-modem <value> 플래그를 사용하면 QCSuper는 ADB와 독립적으로 USB를 통한 의사 직렬 포트로 Qualcomm 진단 포트에 연결할 수 있습니다. 이는 외부 장치를 사용하여 Android 기반 휴대폰의 Qualcomm diag 프로토콜에 연결하는 가장 일반적인 방법입니다.
--usb-modem <value> 플래그를 사용하려면 해당 휴대폰에서 Qualcomm 진단 포트가 활성화되어 있어야 합니다. 즉, 휴대폰이 사전에 USB 모드 전환되어 있어야 합니다.
기기를 USB 모드 전환하는 가장 일반적인 방법은 루트 권한으로 setprop sys.usb.config diag,adb와 같은 명령을 실행하는 것이지만, 특정 휴대폰 제조사의 경우 Qualcomm 진단-over-USB 모드를 활성화하는 다른 방법이 있을 수도 있습니다. 예를 들어 이 페이지에서 특정 기기의 루트 없이 Diag를 활성화하는 가능한 방법을 참조하세요. 이는 종종 휴대폰 다이얼러 키패드에 특수한 숫자 조합을 입력하는 것을 의미합니다.
다른 기기에서는 휴대폰 제조사가 서명하고 System 관련 권한을 가진 APK 파일을 사용하여 루팅 없이 Diag 모드를 활성화할 수도 있습니다(예: Xiaomi 기반 기기의 com.longcheertel.midtest APK에 대해 검색해 보세요).
기기가 올바르게 모드 전환되었다면 ADB에서 getprop sys.usb.config 명령을 실행하면 diag를 포함한 텍스트 문자열이 표시되어야 합니다.
그런 다음 컴퓨터 쪽에서 (Linux에서) lsusb를 실행하면 기기를 가리키는 줄이 표시되어야 합니다. 예를 들어:```
Bus 001 Device 076: ID 05c6:9091 Qualcomm, Inc. Intex Aqua Fish & Jolla C Diagnostic Mode
출력에 포함된 `001:076`(버스 인덱스/디바이스 인덱스 식별자) 및 `05c6:9091`(벤더 ID/제품 ID) 정보를 확인하세요.
이 정보를 확보한 후에는 QCSuper에서 **`--usb-modem 05c6:9091` 또는 `--usb-modem 001:076`과 같은 플래그를 사용해 볼 수 있습니다**(숫자 패딩을 준수하세요).
이것으로 확정되지 않으면 `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를 사용하면 해당 장치에서 연결을 시도할 구성(configuration) 및 인터페이스(interface)의 식별자를 수동으로 선택할 수 있습니다(원시 USB 디스크립터에서 bConfigurationValue 및 bInterfaceNumber로 지정됨). 이는 장치가 올바르게 감지되지 않는 경우에 해당합니다. 예를 들어, --usb-modem 05c6:9091:1:0 플래그는 해당 장치에서 각각 구성 1과 인터페이스 0을 선택합니다. --usb-modem 05c6:9091:1:4는 구성 1에서 인터페이스 4를 선택합니다.
구성 및 인터페이스 인덱스 세부 정보가 지정되지 않은 경우, 시스템 USB 버스에서 다음 기준과 일치하는 첫 번째 인터페이스 디스크립터를 우선순위에 따라 선택합니다:
bInterfaceClass=255/bInterfaceSubClass=255/bInterfaceProtocol=48/bNumEndpoints=2bInterfaceClass=255/bInterfaceSubClass=255/bInterfaceProtocol=255/bNumEndpoints=2--usb-modem auto 플래그를 사용하면 이 기준을 충족하는 USB 인터페이스를 노출하는 첫 번째 장치가 선택되며, 필요한 경우 Linux에서 장치가 커널 모듈에 의해 감지되어 마운트된 경우 기본 /dev/ttyUSB*(usbserial 모듈) 또는 /dev/ttyHS*(hso 모듈) 문자 장치가 선택됩니다(아래 "USB 모뎀과 함께 QCSuper 사용하기" 섹션 참조).
또는 Linux에서는 주어진 USB 장치의 인터페이스에 해당하는 /dev/ttyUSB* 엔드포인트를 수동으로 생성할 수도 있습니다. 그러면 --usb-modem /dev/ttyUSB0과 같은 플래그를 사용하여 QCSuper로 연결할 수 있습니다(이 경우 QCSuper를 root 권한으로 실행해야 할 수 있음). usbserial 모듈을 사용합니다. 이를 위해 다음과 같은 명령을 사용할 수 있습니다:```
sudo rmmod usbserial
sudo modprobe usbserial vendor=0x05c6 product=0x9091
## USB 모뎀과 함께 QCSuper 사용하기
Diag 포트를 노출하는 USB 모뎀에서 `--usb-modem <device>` 옵션을 사용하여 QCSuper를 사용할 수 있습니다. 여기서 `<device>`는 Linux의 의사 직렬 장치 이름(예: `/dev/ttyUSB0`, `/dev/ttyHS2` 등) 또는 Windows의 COM 포트 이름(예: `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 잠금 상태일 수 있습니다. 이전 통신사에서 받은 잠금 해제 코드를 PIN 코드처럼 장치에 입력해야 할 수 있습니다: `sudo mmcli -i 0 --pin=<your_unlock_code>`
Qualcomm 기반 USB 장치가 기본적으로 Diag 포트를 노출하지 않는 경우, AT 포트를 통해 다음을 입력하여 Diag 포트를 활성화해야 할 수 있습니다:```
AT$QCDMG
Diag 포트와 통신할 수 있는 클라이언트는 동시에 하나뿐입니다. 이는 두 개의 QCSuper 인스턴스 또는 QCSuper와 ModemManager 인스턴스에도 적용됩니다.
시스템에서 ModemManager가 활성화된 경우, QCSuper는 ModemManager가 Diag 포트에 접근하지 못하도록 udev 규칙을 동적으로 추가하고 데몬을 다시 시작하려 시도합니다. 이것이 현재 이를 달성하는 가장 좋은 방법이기 때문입니다. QCSuper가 종료되면 이 규칙은 제거됩니다.
QCSuper는 다음 기기에서 성공적으로 테스트되었습니다:
그러나 캡처 부분에 있어서는 Qualcomm 칩셋 기반의 최대한 넓은 범위의 기기와 호환되는 것을 목표로 합니다.
다른 작동 기기는 다음에서 확인할 수 있습니다: https://github.com/P1sec/QCSuper/issues?q=label:"confirmed+working"
주저하지 말고 Github 이슈를 열어 기기가 성공적으로 작동하는지 여부를 알려주시기 바랍니다.
Diag 프로토콜의 일부를 구현하여 다양한 목적으로 사용되는 몇 가지 다른 오픈 도구가 있습니다: