1
1
Fork
You've already forked imsd
1
imsd (IP Multimedia System Daemon) provides a reverse engineered FOSS implementation for IMS services.
  • 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.
2024年04月07日 13:39:56 +00:00
drawings.drawio IMS-QUALCOMM: decode QMI msg 11 2024年01月30日 20:46:52 +01:00
IMS-MEDIATEK.md README: add initial documentation 2024年01月25日 20:33:12 +01:00
IMS-QUALCOMM.md IMS-QUALCOMM: add proof of concept link 2024年04月07日 13:39:56 +00:00
IMS-SAMSUNG.md README: add initial documentation 2024年01月25日 20:33:12 +01:00
LICENSE Initial commit 2024年01月25日 19:25:04 +00:00
qualcomm-ims-architecture.png IMS-QUALCOMM: fixup diagram rendering 2024年01月29日 19:04:10 +01:00
qualcomm-imsdatadaemon.png IMS-QUALCOMM: decode QMI msg 11 2024年01月30日 20:46:52 +01:00
README.md README: add initial documentation 2024年01月25日 20:33:12 +01:00

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.
  • strace on 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 with adb shell.
    • Add a directory e.g., strace in /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 strace to the init Android services of the daemons you want to investigate. Output the logs to the directory you created.
    • Reboot and get your logs.
  • logcat on 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)