41

QCSuper:在高通手机猫上捕获无线2G/3G/4G数据包

 4 years ago
source link: https://www.tuicool.com/articles/Vf2Qri6
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

QCSuper是一种基于高通(Qualcomm)手机和调制解调器(俗称“猫”)通信的工具,可以捕获原始的2G/3G/4G无线电帧等数据内容。它允许你使用已root的安卓手机,usbdongle加密狗或其他格式的现有捕获数据包生成PCAP文件。

RNbI7jy.jpg!web

安装完成后,你可以将已root的手机插入USB,并执行以下命令来使用它:

./qcsuper.py --adb --wireshark-live

它使用的是高通Diag协议,也称为QCDM或DM(诊断监控),以与手机的基带进行通信。

如果你想要支持或报告你设备的工作情况,又或是想加入Diag协议的开发研究,那么你可以 加入我们的IRC (Freenode的#qcsuper)或是打开 Github issue

安装

QCSuper已在Ubuntu 16.04,18.04和Windows 7上进行了测试开发。它依赖于一些Python模块。

想要使用它,你的手机必须root或通过USB暴露diag服务端口。为了检查手机的兼容性,请在 GSMArena 等网站上查找手机的型号,并检查它是否配有高通处理器。

想要打开QCSuper生成的PCAP文件,对于2G/3G帧你可以使用Wireshark 2.x的任何版本。但对于4G帧,你则需要至少Wireshark 2.5.x以上的版本(对于4G帧中解密的单个NAS消息则需要2.6.x以上))。Ubuntu目前已为所有版本提供了其最新版。

Ubuntu 和 Debian 安装

打开终端并键入以下内容:

# Download QCSuper
git clone [email protected]:P1sec/QCSuper.git qcsuper
cd qcsuper

# Install dependencies
sudo apt install python3-pip wireshark
sudo pip3 install --upgrade pyserial crcmod https://github.com/P1sec/pycrate/archive/master.zip

Windows 安装

在Windows上,你需要根据你的手机型号下载并安装手机的USB驱动。没有通用的方法,在Google上搜索你手机的型号 +“USB驱动(USB driver)”或“ADB驱动(ADB driver)”以获取相关的说明。

然后,你需要确保你的设备可以使用adb进行访问。你可以在此处找到 有关如何下载和设置adb的教程 。adb shell命令必须正常工作才能继续。

然后,按照以下链接进行操作:

安装Python 3.6 或更高版本(请确保已将其包含到PATH中,并勾选install it for all users(系统用户下所有用户可启动)并安装pip)

安装Wireshark 2.6 或更高版本

下载并提取QCSuper

安装所需Python模块,请打开命令提示符并键入:

pip3 install --upgrade pyserial crcmod https://github.com/P1sec/pycrate/archive/master.zip

仍在命令提示符下,使用cd命令移动到包含QCSuper的目录。然后你可以执行命令(启动命令应为qcsupper.py,而不是/qcsupper.py)。

支持的协议

QSuper支持捕获少量的移动无线协议。这些协议在 GSMTAP Header 之后,标准报头(被封装到UDP/IP中)允许识别协议,GSMTAP报文被放在 PCAP文件 中,该文件可以使用Wireshark进行分析。

2G/3G/4G协议可分为几个“layers(层)”:layer 1数字无线电调制和多路复用,layer 2处理诸如分片和ACK等问题,layer 3是信令或用户数据。

QCSuper允许在第3层捕获,因为它是使用Wireshark进行分析最实用和有价值的,并且是Diag协议本身所提供的(这里有一些有趣的信息)。

2G(GSM):第3层及以上(RR/…)

2.5G(GPRS和EDGE):第2层及以上(MAC-RLC/…)用于数据确认

3G(UMTS):第3层及以上(RRC/…)

此外,它还支持在单独的GSMTAP帧中重组SIB(系统信息块,向所有用户广播的数据),因为Wireshark目前无法自行完成:flag –reassemble-sibs

4G(LTE):第3层及以上(RRC/…)

此外,它还支持将解密的NAS消息放入其他帧中:flag –decrypt-nas

默认情况下,你设备发送的IP流量不包括在内,你只能看到信令帧。你可以使用–include-ip-traffic选项包含你生成的IP流量(在2G/3G/4G中,IP几乎不属于数据流量的第3层,其头部可能被压缩(ROHC),并且可能包含一个很小的PPP报头)。

你发送的数据流量使用与信令流量不同的信道,此信道通过信令流量建立;因此,QCSuper应向你显示与此信道相关的所有详细信息。

使用

使用QCSuper,你需要指定一个输入(例如:–adb(Android手机),–usb-modem)和一个或多个模块(–wireshark-live用于打开Wireshark,–pcap-dump用于写入流量到PCAP文件,–info获取有关设备的一般信息…)。

示例:

# Open Wireshark directly, using a rooted Android phone as an input
./qcsuper.py --adb --wireshark-live

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

# Same, but using an USB modem exposing a Diag serial port
sudo ./qcsuper.py --usb-modem /dev/ttyHS2 --wireshark-live

以下是QCSuper当前所有可用选项:

usage: qcsuper.py [-h] [--cli] [-v]
                  (--adb | --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).

optional arguments:
  -h, --help            show this help message and exit
  --cli                 Use a command prompt, allowing for interactive
                        completion of commands.
  -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).
  --usb-modem TTY_DEV   Use an USB modem exposing a DIAG pseudo-serial port
                        through USB.
  --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压缩的内容)。

使用(USB猫)

你可以将QCSuper与USB猫一起使用–usb-modem <device>选项暴露Diag端口,其中<device>是Linux上伪串行设备(如/dev/ttyUSB0,/dev/ttyHS2和其他可能的设备)或Windows上的COM端口(例如COM3)的名称。

注意,在大多数设置中,你需要以root用户身份运行QCSuper才能使用此模式,尤其是处理串口干扰问题。

如果你不清楚/dev下哪些设备暴露了Diag端口,你可能需要对其中的设备进行逐一的尝试。你可以尝试通过停止ModemManager守护进程(sudo systemctl stop ModemManager)并使用以下命令来自动检测:sudo ModemManager –debug 2>&1 | grep -i ‘port is QCDM-capable’ 然后使用Ctrl-C。

注意,如果你的设备不能与ModemManager一起使用,那么它很可能没有进行完全的设置,并且也不能与QCSuper一起使用。一些可能的问题是

你没有为设备应用正确的 模式切换(mode switching) 命令。

如果你购买的设备之前有来自不同运营商的SIM卡,则你的设备可能会被锁定。你可能必须使用前一个运营商的解锁代码并将其提交给设备:sudo mmcli -i 0 –pin=<your_unlock_code>

如果默认情况下,基于高通的USB设备未暴露Diag端口,则可能需要通过AT端口键入以下命令来启用Diag端口:

AT$QCDMG

注意,只有一个客户端可以同时与Diag端口通信。这适用于两个QCSuper实例,或QCSuper和ModemManager实例。

如果你系统上的ModemManager处于活动状态,QCSuper将尝试动态添加udev规则以防止它访问Diag端口并重启其守护进程。它将在关闭时禁用此规则。

支持的设备

QCSuper已在以下设备成功测试:

Sony Xperia Z (Phone) – 4G – root启用adb后开箱即用

ZTE MF823 (USB Modem) – 4G – 可能需要 将设备模式切换到CDC-WDM ,将设备设置为 工厂模式 ,然后执行上述AT命令

ZTE MF667 (USB Modem) – 3G, 2011 – 应该开箱即用(可能需要模式切换)

Option Icon 225 (USB Modem) – 3G, 2008

Novatel Ovation MC998D(USB猫)

ZTE WCDMA Technologies MSM MF110/MF627/MF636(USB猫)

然而,它的目标是与基于高通芯片组的最广泛的设备兼容,用于捕获部分。

不要犹豫和吝啬,请通过我们 IRC频道 报告你的设备是否成功运行,或打开 Github issue

使用 Diag 协议的相关工具

以下是一些同样使用Diag协议,用于不同目的的工具:

ModemManager

SnoopSnitch

MobileInsight

qcombbdbg

OpenPST

SCAT

*参考来源: GitHub ,FB小编secist编译,转载请注明来自FreeBuf.COM


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK