- PVSM.RU - https://www.pvsm.ru -
В предыдущей статье [1] я рассказал про то, как устроен слой радиоинтерфейса в ОС Android. Сегодня я расскажу о том, как можно взаимодействовать непосредственно с модемом.
Зачастую бывает, что планшет с 3G модемом не предоставляет возможности позвонить, отправить SMS-сообщение и даже узнать баланс счёта. В этой статье мы будем с этим бороться, а так же увидим как использовать весь функционал, предоставляемый модемом.
Как вы уже знаете, RIL производителя переводит запросы ОС Android в понятный модему виду. Как правило для взаимодействия с модемом используется множество стандартизованных Hayes AT-команд, тем не менее, некоторые производители модемов дополняют стандартный набор AT-команд своими собственными расширениями. Сегодня мы будем работать на уровне между RIL производителя и модемом.
Отмечу, что на для экспериментов ваше устройство должно быть рутовано, а Вы должны иметь минимальный опыт программирования на NDK.
Для начала нам необходимо установить как называется файл устройства модема в системе. Как правило это /dev/ttyACM0 или /dev/smd0 (так же встречается /dev/ttyUSB0). Чтобы это узнать, необходимо выполнить в терминале команду просмотра радио-лога: logcat -b radio. Самая первая строка радио-лога должна иметь вид: "Opening tty device /dev/ttyACM0". Если же такой строки нет, то нам повезло меньше, придётся перебрать все устройства, расположенные в каталоге /dev/. Для этого в каждый файл из этого каталога необходимо послать тестовую команду "AT" и в случае, если это файл устройства модема увидеть ответ в радио-логе "OK". Команды можно посылать например при помощи терминала: echo «AT» > /dev/file_name.
Теперь, установим, какие же команды посылаются в модем. Для этого осуществим «атаку» типа MITM.
Для этого:
Код программы доступен тут [2].
Изучив наш лог, можно увидеть, какие АТ-команды и параметры соответствуют действиям. После старта демона 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 [3]
2. Исходные коды RIL производителя
Автор: stoplinux
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/37639
Ссылки в тексте:
[1] статье: http://habrahabr.ru/post/183984/
[2] тут: http://fabiensanglard.net/cellphoneModem/main.c
[3] fabiensanglard.net/cellphoneModem/index2.php: http://fabiensanglard.net/cellphoneModem/index2.php
[4] Источник: http://habrahabr.ru/post/185012/
Нажмите здесь для печати.