В предыдущей статье я рассказал про то, как устроен слой радиоинтерфейса в ОС Android. Сегодня я расскажу о том, как можно взаимодействовать непосредственно с модемом.
Зачастую бывает, что планшет с 3G модемом не предоставляет возможности позвонить, отправить SMS-сообщение и даже узнать баланс счёта. В этой статье мы будем с этим бороться, а так же увидим как использовать весь функционал, предоставляемый модемом.
Как вы уже знаете, RIL производителя переводит запросы ОС Android в понятный модему виду. Как правило для взаимодействия с модемом используется множество стандартизованных Hayes AT-команд, тем не менее, некоторые производители модемов дополняют стандартный набор AT-команд своими собственными расширениями. Сегодня мы будем работать на уровне между RIL производителя и модемом.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/f44/a42/aea/f44a42aeab85cea865a8ba4be579bb50.png)
Отмечу, что для экспериментов ваше устройство должно быть рутовано, а Вы должны иметь минимальный опыт программирования на NDK.
Для начала нам необходимо установить как называется файл устройства модема в системе. Как правило это /dev/ttyACM0 или /dev/smd0 (так же встречается /dev/ttyUSB0). Чтобы это узнать, необходимо выполнить в терминале команду просмотра радио-лога: logcat -b radio. Самая первая строка радио-лога должна иметь вид: "Opening tty device /dev/ttyACM0". Если же такой строки нет, то нам повезло меньше, придётся перебрать все устройства, расположенные в каталоге /dev/. Для этого в каждый файл из этого каталога необходимо послать тестовую команду "AT" и в случае, если это файл устройства модема увидеть ответ в радио-логе "OK". Команды можно посылать например при помощи терминала: echo «AT» > /dev/file_name.
Теперь, установим, какие же команды посылаются в модем. Для этого осуществим «атаку» типа MITM.
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/3b1/0cc/07f/3b10cc07f16d690ef4563e093ed79fbc.jpg)
Для этого:
Код программы доступен тут.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/096/98d/8f7/09698d8f7f4e354e01751f2fa0bfc96a.png)
Изучив наш лог, можно увидеть, какие АТ-команды и параметры соответствуют действиям. После старта демона rild сначала, происходит инициализация модема, получение необходимой информации от базовой станции и т.д.
Если вы отправляли SMS-сообщение, то этому соответствовала следующая последовательность AT-команд:
AT+CMGS=18
>
0001000b815686070855f4345005c8329bfd06^Z
Сообщение имеет такой вид, потому что закодировано в формате PDU. Воспроизведя программно данную последовательность AT-команд, можно убедиться, что сообщение успешно отправляется. При этом, естественно, не отображается в списке отправленных сообщений в приложении ОС Android.
С помощью AT-команды AT+CUSD=1,*100#,15 можно сделать USSD запрос
А используя команду ATD+79161234567; совершить исходящий телефонный звонок.
С использованием данного подхода возможно осуществлять, например, фильтрацию SMS-сообщений, звонков и т.д.
Используемые материалы:
1. fabiensanglard.net/cellphoneModem/index2.php
2. Исходные коды RIL производителя
Зачастую бывает, что планшет с 3G модемом не предоставляет возможности позвонить, отправить SMS-сообщение и даже узнать баланс счёта. В этой статье мы будем с этим бороться, а так же увидим как использовать весь функционал, предоставляемый модемом.
Как вы уже знаете, RIL производителя переводит запросы ОС Android в понятный модему виду. Как правило для взаимодействия с модемом используется множество стандартизованных Hayes AT-команд, тем не менее, некоторые производители модемов дополняют стандартный набор AT-команд своими собственными расширениями. Сегодня мы будем работать на уровне между RIL производителя и модемом.
![](https://habrastorage.org/getpro/habr/post_images/f44/a42/aea/f44a42aeab85cea865a8ba4be579bb50.png)
Отмечу, что для экспериментов ваше устройство должно быть рутовано, а Вы должны иметь минимальный опыт программирования на NDK.
Приступим
Для начала нам необходимо установить как называется файл устройства модема в системе. Как правило это /dev/ttyACM0 или /dev/smd0 (так же встречается /dev/ttyUSB0). Чтобы это узнать, необходимо выполнить в терминале команду просмотра радио-лога: logcat -b radio. Самая первая строка радио-лога должна иметь вид: "Opening tty device /dev/ttyACM0". Если же такой строки нет, то нам повезло меньше, придётся перебрать все устройства, расположенные в каталоге /dev/. Для этого в каждый файл из этого каталога необходимо послать тестовую команду "AT" и в случае, если это файл устройства модема увидеть ответ в радио-логе "OK". Команды можно посылать например при помощи терминала: echo «AT» > /dev/file_name.
Теперь, установим, какие же команды посылаются в модем. Для этого осуществим «атаку» типа MITM.
![](https://habrastorage.org/getpro/habr/post_images/3b1/0cc/07f/3b10cc07f16d690ef4563e093ed79fbc.jpg)
Для этого:
- Переименуем настоящий файл модема в /dev/ttyACM0_real.
- Создадим файл /dev/ttyACM0 как символьную ссылку на псевдотерминал /dev/ptmx.
- Будем записывать в лог всё, что идёт через /dev/ttyACM0 и перенаправлять это в /dev/ttyACM0_real
- Перезапустим демон rild: "kill pid_rild", запустится он автоматически.
Код программы доступен тут.
![](https://habrastorage.org/getpro/habr/post_images/096/98d/8f7/09698d8f7f4e354e01751f2fa0bfc96a.png)
Изучив наш лог, можно увидеть, какие АТ-команды и параметры соответствуют действиям. После старта демона rild сначала, происходит инициализация модема, получение необходимой информации от базовой станции и т.д.
Если вы отправляли SMS-сообщение, то этому соответствовала следующая последовательность AT-команд:
AT+CMGS=18
>
0001000b815686070855f4345005c8329bfd06^Z
Сообщение имеет такой вид, потому что закодировано в формате PDU. Воспроизведя программно данную последовательность AT-команд, можно убедиться, что сообщение успешно отправляется. При этом, естественно, не отображается в списке отправленных сообщений в приложении ОС Android.
С помощью AT-команды AT+CUSD=1,*100#,15 можно сделать USSD запрос
А используя команду ATD+79161234567; совершить исходящий телефонный звонок.
С использованием данного подхода возможно осуществлять, например, фильтрацию SMS-сообщений, звонков и т.д.
Используемые материалы:
1. fabiensanglard.net/cellphoneModem/index2.php
2. Исходные коды RIL производителя