Что твой телефон знает о тебе? Насколько надежно он хранит информацию и кто имеет к ней доступ? К счастью, изготовить и запрограммировать собственный мобильный телефон теперь можно буквально за несколько дней. Что я и сделал, а теперь и тебе покажу, что для этого нужно.

Все началось с того, что некоторое время назад я собирал для себя телефон на модуле связи GSM. Современная электроника была размещена в винтажном корпусе с внешней трубкой и дисковым номеронабирателем (помнишь ли ты еще, как ими пользоваться?). Увы, из-за непродуманной схемы звонить с него было неудобно.

Тогда я решил предпринять вторую попытку, но уже с новой концепцией. Хотелось создать компактное устройство, выполняющее функции простого кнопочного телефона и при этом пригодное к практическому использованию. В идеале заряда даже от небольшого аккумулятора должно хватать минимум на неделю. Никаких лишних сервисов, подозрительных приложений и надоедливых уведомлений, только самое необходимое — звонки, SMS и телефонная книжка.

По мнению всех ведущих специалистов с мировым именем, тут десять баллов из десяти по шкале ремонтопригодности
По мнению всех ведущих специалистов с мировым именем, тут десять баллов из десяти по шкале ремонтопригодности

Проект демонстрировался на Chaos Constructions 2019 и, к моему (приятному) удивлению, вызвал интерес у широкой аудитории. Многим было любопытно узнать внутреннее устройство мобильного телефона, поэтому сегодня я подробно расскажу, как можно собрать подобный гаджет самостоятельно.

WARNING

Увы, система сотовой связи по умолчанию позволяет операторам следить за абонентами практически в режиме реального времени и с точностью порядка двадцати метров (за счет триангуляции с нескольких вышек). C учетом российской практики выдачи симок в обмен на паспортные данные, ситуация выглядит печальной. На самом деле уйти из-под надзора телекоммуникационных компаний тоже возможно, но такие способы выходят за рамки этой статьи.

 

Блок-схема компонентов

Сперва определимся с требованиями к устройству: нам нужно совершать исходящие звонки, принимать входящие, читать и писать SMS (в том числе на кириллице) и управлять контактами в телефонной книге. Это базовая функциональность, которую пользователи ожидают от кнопочных телефонов. Конечно, это далеко не полный список и тут не хватает как минимум встроенных игр (змейки или тетриса), но их легко будет добавить уже на финальном этапе.

Ключевым компонентом устройства станет модуль сотовой связи SIM800C. Он содержит полный радиотракт, аудиотракт и реализует основные функции работы с сетью GSM. Иными словами, это практически готовый мост GSM-UART, который нуждается лишь в управлении через внешний терминал.

Для этого нам потребуется экран, клавиатура и какой-нибудь микроконтроллер для выполнения основной программы. В качестве экрана я использовал дисплейный модуль ST7735 с разрешением 128 на 160 пикселей. К нему у меня уже была готовая библиотека, которая позволяла отрисовывать символы и графические примитивы. По большому счету выбор дисплея некритичен для проекта, и ты можешь использовать любой другой с подходящей диагональю.

Клавиатура с шестнадцатью кнопками реализована на сдвиговых регистрах (пара восьмибитных микросхем 74HC165 (PDF). Также ты можешь использовать их отечественный аналог — микросхемы компании «Интеграл» КР1533ИР9. В любом случае выход таких регистров представляет собой неполноценный SPI, так как даже при отключении они не переходят в высокоимпедансное состояние. Поэтому вместо аппаратной и совмещенной с дисплеем шины SPI для них использовалась программная реализация.

Управлять всем будет микроконтроллер семейства STM32. Так как особого быстродействия не требуется, подойдут даже бюджетные решения. Я остановил свой выбор на F103C8T6 (PDF), его ресурсов тут должно хватить с избытком. Кроме того, именно на таком микроконтроллере выпускается известная модельная линейка отладочных плат BluePill (прекрасное средство для избавления от Arduino-зависимости). Это позволило собрать прототип и протестировать работу компонентов практически с самого старта.

INFO

Некоторые микросхемы F103C8T6 имеют 128 Кбайт памяти вместо заявленных по документации 64 Кбайт. Однако это относится к недокументированным возможностям, и рассчитывать на «лишний» банк памяти не стоит.

Позже (и в качестве приятного бонуса) я решил добавить в проект внешнюю постоянную память W25Q32 (PDF) на 32 Мбит. Это позволило не перезаписывать флеш самого микроконтроллера и хранить все контакты отдельно. Кроме того, появилась возможность загружать на телефон картинки, символы и прочие элементы растровой графики.

Сама схема мобильного телефона достаточно стандартная и в комментариях вряд ли нуждается. SIM800C включается при подаче низкого уровня на вывод REST (используется транзистор Q1, соединенный с контактом PA0 микроконтроллера). Дополнительно светодиоды VD2 и VD3 указывают на состояние радиомодуля. VD2 мигает при успешном подключении, тогда как VD3 горит все время, пока SIM800C активен.

Принципиальная схема устройства
Принципиальная схема устройства

Компоненты размещены на двух односторонних печатных платах, преимущественно поверхностным монтажом. Первая плата содержит радиомодуль, микроконтроллер, микросхему внешней памяти и разъемы для подключения антенны и динамика. Вторая плата целиком и полностью отдана под клавиатуру. Собранная конструкция помещается в корпус из оргстекла и закрепляется на стойках М3.

Питается наше устройство от литий-полимерного аккумулятора на 1500 мА · ч. Его емкость примерно в два раза ниже, чем у современных флагманских смартфонов, но и ее хватает примерно на неделю в режиме ожидания (потребление около 6 мА) или на сутки активного пользования (потребление около 40 мА).

INFO

Вообще говоря, большая часть использованных электронных компонентов сейчас доступна в виде готовых оценочных плат или модулей. Поэтому, если тебе не хочется возиться с разводкой плат и пайкой микросхем, ты можешь собрать все на беспаечных макетках.

 

Настраиваем UART

Сегодня существует масса вариантов для программирования микроконтроллеров. Это и различные языки (С/С++, Rust), и самые разнообразные прикладные библиотеки, абстрагирующие разработку от аппаратного уровня (HAL от ST Microelectronics, Arduino Core и другие). Я использовал в проекте каноничный C и открытую libopencm3.

WWW

Полный комплект исходных файлов проекта доступен в репозитории на GitHub.

Первым делом следует инициализировать UART1, ведь именно он отвечает за общение с радиомодулем. Параметры стандартные: 115 200 бод и 8N1.

static void usart1_setup(void){
    /* Enable clocks for GPIO port A (for GPIO_USART1_TX) and USART1 */
    rcc_periph_clock_enable(RCC_GPIOA);
    rcc_periph_clock_enable(RCC_USART1);
    /* Enable the USART1 interrupt */
    nvic_enable_irq(NVIC_USART1_IRQ);
    /* PA9 TX,PA10 RX */
    gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_USART1_TX);
    gpio_set_mode(GPIOA, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_USART1_RX);
    /* Setup UART parameters */
    usart_set_baudrate(USART1, 115200);
    usart_set_databits(USART1, 8);
    usart_set_stopbits(USART1, USART_STOPBITS_1);
    usart_set_mode(USART1, USART_MODE_TX_RX);
    usart_set_parity(USART1, USART_PARITY_NONE);
    usart_set_flow_control(USART1, USART_FLOWCONTROL_NONE);
    usart_enable_rx_interrupt(USART1);
    usart_enable(USART1);
}

После этого логично как-то организовать отправку команд на модуль. Например, c помощью сторонней реализации printf(). Для этого используется библиотека rprintf. Ее код хорошо оптимизирован и занимает всего несколько килобайтов памяти. Библиотеку следует подправить для работы с libopencm3, буквально несколько строк.

#38  #define UART USART1
...
#95  vfprintf_((&usart_send_blocking), format, arg);
...
#142 ch = usart_recv_blocking(UART);

Теперь модулю можно отправлять команды вида printf_("AT_command"), а ответ модуля принимается с использованием прерываний и сохраняется в буфер. После приема содержимое анализируется, и если это ожидаемый ответ, то вызывается функция-обработчик, которая используется для вывода сообщений SMS и USSD. Также возможен непосредственный вывод сообщения на экран, что очень удобно при отладке.

 

Работа с экраном

Как и любую другую периферию, дисплей перед использованием предстоит инициализировать. Конечно, сегодня подходящий код можно найти и в интернете, но я решил написать реализацию самостоятельно. Это не отнимет много времени, зато позволит лучше узнать возможности микросхемы ST7735. Я ориентировался на документацию (PDF) производителя и брал за основу готовые примеры в псевдокоде.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Check Also

Функция Face Unlock в Pixel 4 работает, даже если у человека закрыты глаза

Исследователи изучили биометрическую защиту нового смартфона Google Pixel 4 и обнаружили, …

10 комментариев

  1. Аватар

    Artem Kashkanov

    02.10.2019 at 12:42

    SIM800 Сам по себе содержит внутри весьма жирный микроконтроллер с приличным API, в который можно засунуть весь описанный здесь функционал. Мануалы все есть, IDE — тоже.
    Подключаем матрицу кнопок к уже имеющимся выводам матричной клавиатуры, дисплей к уже имещимся на моделй выводам SPI и радуемся жизни максимально с простым девайсом.

  2. Аватар

    vic2

    02.10.2019 at 14:44

    Все собирается на базе стандартного модуля GSM, какая же это защита от контроля и прочего? Модули GSM это некий черный ящик, что он делает, как он делает, никому не ведомо. Такой телефон защищен не лучше чем обычный кнопочный. Для того что бы телефон защищал необходимо что бы он вел себя не стандартным образом хотя и в рамках стандарта 🙂 Но для этого необходимо иметь возможность работать с самим GSM модулем.
    Например так:
    Телефон невидимка является уникальным телефоном, и аналогов ему нет.
    Сделан на базе телефона Samsung C6112
    Телефон невидимка предназначен для защиты:
    — от активных и полуактивных комплексов перехвата
    — от кетчеров
    — от контроля со стороны оператора связи (в значительной степени)

    · Основная особенность телефона — работа в не стандартном режиме, чего не ждет ни оператор связи, ни оператор комплекса.
    · Телефон рассчитан на обнаружение комплексов перехвата и кетчеров которые работают непосредственно по нему.
    · Несмотря на то, что телефон работает только в стандарте 2G, он обнаружит любые самые современные комплексы перехвата или кетчеры, работающие в 2G 3G 4G, просто потому что для захвата телефона, они будут вынуждены перейти в стандарт 2G.
    · Телефон может обнаружить комплексы, работающие в 2G стандарте, которые находятся не далеко от него, ещё до захвата.
    · Телефон может быть полностью невидим для кетчеров или комплексов.
    Кетчер или комплекс перехвата не смогут получить реальные IMSI TMSI IMEI, они получат случайно сгенерированные значения
    При этом телефон видит, что его пытаются захватить и выдает предупреждения.
    Таким образом телефон делает бесполезной и бессмысленной покупку дорогостоящих комплексов перехвата и кетчеров.
    Более того, использование комплексов может быть вредным, потому что оператор комплекса получит не достоверную информацию.
    · Телефон может быть полностью невидим как для пинговых СМС так и для обычных СМС. Таким образом, его не смогут пинговать комплекс перехвата, оператор связи, а так же по SS7.
    · Телефон гарантированно обнаружит все типы пинговых СМС, обнаружит пингование звонками.
    · Телефон контролирует поступление информации на СИМ карту и не допустит возможности установить на неё вредоносный код. А если он уже там находится, то не даст ему работать.
    Именно СИМ карта является одним из важнейших уязвимых мест в безопасности современного телефона.
    · Автоматически смена IMEI на случайное значение. Пять режимов работы
    · Телефон позволяет помочь в локализации места работы комплексов перехвата и кетчеров. Поэтому для операторов комплексов и кетчеров использование оборудования для захвата телефона невидимки может быть не безопасно.
    · Телефон позволяет работать с удалённых каналов. В то время как комплекс, для захвата телефона, будет стараться создать самый сильный канал, телефон его проигнорирует.
    · Телефон проигнорирует и завышенные параметры комплекса или кетчера. Но предупредит об их наличии.
    · Телефон сможет гарантированно определить комплекс перехвата даже при условии, что оператор комплекса установил все параметры, на все 100%, как у настоящей БС.
    · Телефон предупредит не только о захвате комплексом, но и о том, когда комплекс его отпустил во внешнюю сеть, и покажет, сколько времени он был захвачен.
    · Телефон гарантированно определяет, кем он был захвачен, комплексом перехвата или кетчером.
    Если захват был сделан кетчером то телефон мог попасть в зону его работы случайно. Потому что кетчер собирает данные обо всех телефона вокруг него. А вот комплекс работает, как правило, целенаправленно.

    · В телефоне все настройки могут быть включены или выключены, а так же есть профили, выбор которых определяет поведение телефона. Например, телефон может быть настроен на максимальную защиту, а может только предупреждать об опасности, при этом не мешая себя захватить, что бы оператор комплекса мог получить дезинформацию.
    · В телефоне сделано МЕХАНИЧЕСКОЕ отключение микрофона. Пока телефон сложен — микрофон нельзя включить никаким образом. Телефон обнаружит включение передатчика, в то время как пользователь не использует телефон.
    · Телефон позволяет отправлять шифрованные СМС на такой же телефон.
    · Телефон гарантированно обнаружит пингование пейжинговыми сообщениями.
    После этого в зависимости от настроек он может:
    — просто выключить передатчик и предупредить сообщениями
    — выключиться
    — СОЗДАТЬ СВОЙ КЛОН и после этого отключиться. Для этого необходим дополнительный телефон на расстоянии 500 метров в стороне от вас.
    Это необходимо для того, что бы ваш телефон не смогли найти «до квартиры» с помощью специального оборудования, которое работает либо совместно с комплексом перехвата либо с оператором связи.
    · Поскольку в телефоне содержат реально два почти независимых телефона то есть возможность автоматического включения одного из них в заданной пользователем задержкой..
    · Телефон обнаружит фейковые СМС с подменой номера.
    · Телефон позволит узнать — находится ли нужный абонент в сети, без демаскирующих признаков на телефоне абонента.
    · В телефон встроен сервис:
    подмены номера, искажения голоса, невозможность определения места положения телефона, безлимитные звонки по всему миру, привязка к железу телефона, а не к СИМ карте. Таким образом СИМ карты могут быть всегда местные и не выделяться из общего потока, а менять их можно сколь угодно часто.
    Запрос на звонок идет в шифрованном виде и не может быть расшифрован. Так же предусмотрена возможность работы через СМС шлюз, если в телефоне нет настроек GPRS.
    · Телефон может работать в составе телефонного моста. Для того, что бы не только скрыть место положения владельца телефона но и наоборот — обозначить его именно там где это необходимо.
    Таким образом, владелец телефона может находиться за границей, а те кто его контролируют, будут видеть что он дома.
    · Телефон может вести запись разговоров.
    · Телефон работает на закрытой операционной системе, которая не позволяет писать вредоносный код. Компания Samsung не сможет написать вредоносный код и внедрить его в телефон невидимку.

    Описан не полный перечень функций телефона.

    • Аватар

      int01h

      02.10.2019 at 22:25

      Эти телефоны стучат своим создателям. Старые версии слали смски, победить можно было только убрав номер смс центра из настроек трубки. В современном варианте хз чего еще туда напихали. В любом случае, хотите защититься от терминалинга, наблюдения и зондирования — выбросите телефоны нафиг. Все остальное, так или иначе, строится на доверии. Кто-то доверяет гуглу, другие доверяют таким вот производителям. Один наркобарон додоверялся шнырю фбровскому, теперь на киче отдыхает. Лучше исходить из того, что даже себе, в сложной обстановке, не стоит доверять и уменьшать риски, а не множить их очередным черным ящиком.

  3. Аватар

    vic2

    03.10.2019 at 00:10

    вы правы, на G600 так была сделана защита от копирования, это не было для получения информации о пользователе. СМС шла с родным для телефона ИМЭЙ и тот имэй который уходил реально оператору никак не светился. В последующих версиях G600 это убрали сделав другую защиту ( которую так никто и не сломал). В С6112 отправки производителю чего либо о телефоне не было даже в самых первых версиях. Просто поверьте, я знаю о чем говорю. Это кстати легко проверить по распечатке своей же СИМ карты.
    Выбросить телефоны совсем уже не просто. Но кстати в С6112 — оснавная функция это не защита а предупреждение что у пользователя начались проблемы, и в этом смысле выбросить телефон — аналогично страусу головой в песок ( к слову сказать он так и не делает вовсе 🙂 ) Тут наоборот, нужен телефон что бы понять о существовании опасности. Хотя конечно телефон защищает пользователя. Чего стоит невидимость для кетчеров и комплексов.

    • Аватар

      int01h

      03.10.2019 at 14:10

      Вы видимо разработчик или как-то с ними связаны. В таком случае, скажу две вещи:
      1. Вы молодцы. И как продукт, и как исследовательская работа — подход очень интересный. НО.
      2. Повторюсь — нужно кому-то доверять, а в данном случае разработчикам нового софта телефона.

      Сами понимаете, обычная логика — чем вы отличаетесь от тех, кому уже доверяют не имея возможности досконально проверить весь функционал? Например, защита от копирования в г600. Благое дело для защиты наработок, но дырень в «конспирации» при рандоме имея и новой симке. Допустим, это все происходило только в случае хитрых барыг, которые накатывали ваш код на сторонние трубки. Но это незадекларированный функционал, о котором уже нормальный клиент не знает, а он есть. Как считаете, это оправдывает доверие юзера к производителю? Просто с позиции клиента оцените похожую ситуацию.

      Я понимаю, что вашим клиентам это может быть и не нужно, замороченных мало. Но конспирация — это не про телеграммных барыг, испуганных бизнесменов, экспериментирующих технически малограмотных оперов и тех кто на рандомном имее с новой симкой связывается со старыми установленными контактами. Но эта проблема доверия черному ящику не уйдет сама по себе. А отказ от телефона — это не про страуса и бетон 🙂 Всегда есть альтернативы. Один из основных принципов вы уже назвали — нестандартное поведение. А также нестандартное использование привычных вещей. Кроме всего прочего, от обычных телефонов и голоса в них, тем кому важна анонимность, нужно отказываться еще и благодаря успехам ЦРТ (Центр Речевых Технологий).

      Да, чуть не забыл. Говоря о терминалинге, это справедливо, что телефон может предупредить о наблюдении. Но не со всеми девайсами 🙂 У трехбуквенных фазанов часть терминалов не палится почему-то. Принцип работы похожий на остальные, но стабильно на них нет реакции. Спросите у разработчиков — это тоже защита от копирования?)

  4. Аватар

    vic2

    03.10.2019 at 14:35

    я и есть разработчик 🙂 комплексы и кетчеры видятся все, не зависимо от того кто их использует. Производители комплексов одни и те же в основном, стандарт один. Сейчас на С6112 сделана опция когда ( а такого в природе не бывает) оператор комплекса выставит все параметры соты один в один, хотя для него захватить в этих условиях становится намного сложнее, к тому же телефон должен перерегистрироваться, а это отличные от оригинальных параметры. Так вот, параметры один в один а телефон гарантированно определит что это комплекс. Так что «фазанам» ничего не светит. Но я сталкивался с тем что активно работают и частные структуры из бывших. Так вот повторюсь, и это очень важно, пусть центр речевых, пусть старые контакты — важно что они работают стандартным образом и палятся по полной, когда идет атака на телефон, именно это и требовалось. Хотя опять же повторюсь защиту сейчас наворотили очень сильную, но это дело второе. И разговор идет о С6112, G600 последний раз обновлялся осенью 2014 года

    • Аватар

      int01h

      03.10.2019 at 19:34

      В случае с фазанами есть еще СОРМ и другие методы ОРМ. Терминалы используют в поле, и г600 пропускал их девайсы, тесты были в 14-15 году, но не на последней версии прошивки точно. Справедливости ради, С6112 я не тестил, не знаю как там теперь все у вас.

      Насчет голоса и контактов — в РФ это как раз очень важно, постоянно так причесывают доморощенных бандосов, даже во времена ФСКН по контактам били. Не знаю как в Украине или других странах, где возможные тесты были, но в России ситуация иная. Я уже давно не в курсе новых практик и разработок, но помимо общих стандартов, в РФ велись разработки собственных терминалов. Которые не уходят на эскпорт, да и внутри не продаются и не поставляются даже БСТМ МВД. Я не знаю какие конкретно девайсы пропускал телефон, думаю, что на тот момент какие-то стандартные, немецкие скорей всего.

      • Аватар

        vic2

        04.10.2019 at 15:05

        В поле как и в случае с комплексом такой признак как один канал ( нет соседей) не работает, а в случае когда в составе комплекса есть обработчик А5.1 сводит на нет обнаружение в случае G600. Хороший комплекс мог и не существующих соседей давать телефону. Поэтому сравнивать G600 и С6112 нельзя. То что в России делают сами, так это было с самого начала появления комплексов, и те что продаются по миру сделаны «нашими» а те что делаются только для внутреннего потребления никакими волшебными свойствами не обладают. Все стандартно как и сам стандарт GSM. Конечно по мере использования комплексов появлялись какие то новые методы работы но мы в телефоне все это отслеживаем и делаем то что сводит покупку комплексов и кетчеров на нет.

  5. Аватар

    vic2

    03.10.2019 at 14:42

    кстати, часть функционала проверить можно не имея комплекс, часть ( основная) конечно оборудование необходимо. Но у нас есть возможность тестировать телефон в другой стране

  6. Аватар

    Asylum

    04.10.2019 at 20:54

    Не проще сделать программный телефон на удаленном сервере? Поскольку эта поделка использует сим карту, сомневаюсь что тут будет какая то анонимность. От фиксации в соте никуда не уйти. Так что район будет точно определен. Детсво, в жопе, если коротко

Оставить мнение