- Markdown 100%
|
Dylan Van Assche
28d96c4d51
IMS-QUALCOMM: add proof of concept link
A proof of concept implementation was created based on this reverse engineering effort, add it. |
||
|---|---|---|
| drawings.drawio | IMS-QUALCOMM: decode QMI msg 11 | |
| IMS-MEDIATEK.md | README: add initial documentation | |
| IMS-QUALCOMM.md | IMS-QUALCOMM: add proof of concept link | |
| IMS-SAMSUNG.md | README: add initial documentation | |
| LICENSE | Initial commit | |
| qualcomm-ims-architecture.png | IMS-QUALCOMM: fixup diagram rendering | |
| qualcomm-imsdatadaemon.png | IMS-QUALCOMM: decode QMI msg 11 | |
| README.md | README: add initial documentation | |
imsd
The imsd (IP Multimedia System Daemon) provides a reverse engineered FOSS implementation
of proprietary Android IMS implementations for devices running non-Android modem stacks
such as ModemManager on mainline Linux devices.
IMS services are mostly integrated into modem firmware from Qualcomm, Mediatek, Samsung, and others
to allow modems to make VoLTE calls and receive SMS over IP when the application processor
running the Linux kernel is suspended to save battery. However, on most SoCs,
several steps must be undertaken to setup the IMS services on the modem to enable them.
Some modem firmware do not require such steps such as Quectel EG25-G found
in the Pine64 PinePhone (Pro) and the Broadmobi BM818 in the Purism Librem 5
because these are IoT modems which provide a fully contained system,
not integrated with the Android operating system.
imsd supports transparently both types of modems.
Reverse engineering IMS
Every modem manufacturer has its own implementation of IMS, there's no standard for IMS interfaces, thus every modem manufacturer's IMS implementation must be reverse engineered separately:
Some tools for reverse engineering that can be used:
- Android's hidden menu for cellular information and IMS status.
- Dial
*#*#4636#*#*. - Tap 'Phone information'.
- Tap the 3 dots in the upper right corner.
- Tap IMS Service Status to show the status of IMS registration, availability of VoLTE, VoWiFi, and other IMS services.
- Dial
straceon Android for tapping into the communication between IMS daemons running in Android's userspace and the modem interface.- Become
root(adb root) and remount file system for RW on Android (adb remount). Open a shell withadb shell. - Add a directory e.g.,
stracein/data/local/tmp/:mkdir /data/local/tmp/strace - Make the directory accessible to anyone because daemons might run under different users than
root:chmod 777 /data/local/tmp/strace. - Add
straceto the init Android services of the daemons you want to investigate. Output the logs to the directory you created. - Reboot and get your logs.
- Become
logcaton Android allows to retrieve logs of the kernel, all services, and applications running on Android. s
License
Available under the GPLv3 license.
Copyright (c) by Dylan Van Assche (2024)