Статья Разбираемся с osmocom-bb

Приветствую, форумчане! В этой статье я хочу рассказать о том, как начать работать с osmocom-bb - проекте, позволяющем сделать из старой моторолы инструмент изучения и тестирования GSM сетей.
Я постараюсь дать достаточное количество информации, что бы вы без лишней боли смогли начать работу с osmocom.
18673


Osmocom? Впервые слышу!
Osmocom - это открытая имплементация стека протоколов GSM. Включает в себя программное обеспечение и инструменты, реализующие различные стандарты мобильной связи, включая GSM, DECT, TETRA и другие. Так описано на .

Osmocom-bb реализует клиентскую часть протокола GSM. Для этого используются телефоны на базе чипсета calypso и mediatek. К таким телефонам относятся, например, motorola c115, motorola c118, motorola c123, Neo 1973, SciphoneDreamG2. Полный список можно посмотреть на официальном сайте:

По сути osmocombb соединяет osmocom-совместимый телефон и компьютер с линукс (как львиноботы, соединяющиеся в одного супербота), позволяя программировать устройство для работы с gsm или использовать уже готовые проекты для, например, создания собственной базовой станции gsm (2G), устройства для снифинга gsm трафика и ещё .


Hardware
Для того, что бы начать работу с osmocom, нужно обзавестись некоторыми прибамбасами, а именно:
  • Телефон из списка доверенных (желательно motorola на базе e88, но об этом позже)
  • USB-UART конвертер
  • mini jack 2.5 mm TRS (3 контакта)
  • детали для замены фильтров (опционально)
А теперь подробнее

Телефон
Полный список допустимых телефонов можно посмотреть . Однако авторы рекомендуют использовать motorola c123 / motorola c118 (телефоны на базе E88), так как проект изначально затачивался именно под них. Телефоны на базе E87 (motorola c115 / c117) так же отлично подойдут: E88 и E87 идентичны на 99%.

Я взял motorola c118, так как их было проще всего найти, всё нижеописанное я буду проводить именно с ним. Купить телефоны можно на местной барахолке, в переходе или на авито. Цена вопроса - около 500 р. за штуку.

18672

Если вы собираетесь поднимать свою базовую станцию, то понадобится 2 телефона и, соответственно, 2 USB-UART конвертера и 2 мини джека.

О перепайке фильтров
Изначально телефоны отбрасывают весь входящий трафик, не принадлежащий этому телефону (остальной ему просто не нужен). В некоторых проектах, например в снифинге gsm или поднятии собственной базовой станции (BTS), нам нужен весь входящий трафик. Что бы мы могли получать его, нужно перепаять фильтры.

Казалось бы, можно просто выпаять фильтры и замкнуть цепь. Но дело в том, что фильтры также преобразуют несбалансированный сигнал 50 ohm от антенны в сбалансированный на 100 ohm, который впоследствии идёт на чипсет RITA. По этому мы не можем просто удалить фильтры и замкнуть цепь.

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

О том, как и что припаивать, на официальном сайте. описано с теорией.

USB конвертер
Список поддерживаемых USB TTL конвертеров есть на . Конечно, можно купить готовый вариант переходника USB-minijack 2.5 mm, но это во первых дорого, во вторых не интересно. По этому лучше брать отдельно конвертер, отдельно миниджек. Самым дешёвым (цена - около 70 рублей на aliexpress) и стабильным USB-TTL конвертером является CP2102. Хотя для некоторых проектов его нужно перепрошить для возможности работы на нестандартных скоростях - это не является проблемой. О перепрошивке будет ниже, в разделе software

18675


mini jack
Нужен обычный трёхконтактный (TRS) minijack 2.5 mm. Проблема в том, что на дворе 2018 год, и достать 2.5-милиметровый миниджек может быть проблематичным занятием. Если вы везунчик, и вам удалось найти трёхконтактный миниджек, то распайка будет такой:
  • RXD - наконечник
  • TXD - середина
  • GND - нижняя часть
Припаивать надо к RXD, TXD и GND конвертера соответственно.

Мне же, как наверняка и многим другим, удалось найти только "тюльпан" 3RCA TRRS (4 контакта). Под спойлером о том, как его подсоединять
Распайка примерно такая же: берём от начала RXD, TXD и GND, а нижний контакт оставляем пустым.
18676


Штекер в телефон нужно вставлять не полностью, а до того момента, когда начнёт светиться вторая лампочка на USB-TTL конвертере:
18670

обратите внимание на расположение контактов

Проверяем соединение
Что бы проверить связь, будем использовать minicom из под Linux (все дальнейшие действия будут проводиться под Debian 9.4 x86_64)
Выключаем телефон, соединяем с компьютером и в терминале ищем подключенный адаптер: ls /dev | grep ttyUSB
18708


Открываем конфигурацию minicom sudo minicom -s > Настройка последовательного порта, в Последовательный порт вводим найденный адаптер.
18709

Выбираем Выход, затем на телефоне коротко нажимаем кнопку включения. Если в выводе, помимо мусора, появилась надпись @ftmtoolerror, то можно переходить к сборке софтовой части.
18710

выход из minicom - ctrl + a, x, Enter


Software
Для начала определимся со структурой проекта: /opt/osmocom - библиотеки проекта и кросс-компилятор, ~/osmocombb - ветки проекта.
Все действия будут проводиться на Debian 9.4 x86_64

Собираем libosmocore
libosmocore - основная библиотека проекта, почитать про неё можно .
Bash:
su
#устанавливаем зависимости
apt-get update && apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc libpcsclite-dev
#создаём рабочее место
mkdir /opt/osmocom
cd /opt/osmocom
#клонируем основные библиотеки
git clone git://git.osmocom.org/libosmocore.git
#компилируем
cd libosmocore/
autoreconf -i
./configure
make
make install
ldconfig -i
cd ..

Собираем кросс-компилятор
У меня возникли проблемы со сборкой по , по этому я сделал .
Bash:
su
apt update && apt install libmpfr-dev libmpc-dev libgmp-dev libgnutls28-dev libgnutlsxx28 texinfo
cd /opt/osmocom
mkdir gnu-arm-toolchain
cd gnu-arm-toolchain
mkdir build install src
cd src/
качаем программы нужных версий
#в официальном мануале используется gcc версии 4.8.2, у меня скомпилировался только 4.9.4
wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.4/gcc-4.9.4.tar.bz2
wget http://ftp.gnu.org/gnu/binutils/binutils-2.21.1a.tar.bz2
wget ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz
#разархивируем
tar jxvf gcc-4.9.4.tar.bz2
tar jxvf binutils-2.21.1a.tar.bz2
tar xfvz newlib-1.19.0.tar.gz
cd ../
# качаем установщик
wget https://raw.githubusercontent.com/DrLafa/gnu-arm-toolchain-installer/master/gnu-arm-build.sh
#даём права на исполнение
chmod +x gnu-arm-build.sh
#выполняем установку
./gnu-arm-build.sh
Этот установщик работает на Debian 9.4 x86_64 с gcc 6.3.0 и texinfo 6.3.0. С другими верияси gcc и texinfo могут быть проблемы.
После компиляции нужно прописать путь до бинарников в переменную PATH. Прописываем в конец файла .zshrc, .bashrc или каким ещё терминалом вы пользуетесь:
Код:
export PATH=/opt/osmocom/gnu-arm-toolchain/install/bin:${PATH}
На этом сборка кросс-компилятора закончена. Если возникли проблемы компиляции, можете писать в комментариях. Попробуем решить коллективно.

Собираем OsmocomBB
Настало время собрать основную ветку проекта
Код:
# создаём рабочее место
cd ~/
mkdir osmocombb
cd osmocombb
#клониурем основную ветку
git clone git://git.osmocom.org/osmocom-bb.git master
cd master/src
Тут стоит отметить, что если вы хотите иметь возможность отправлять трафик gsm (а не только принимать), то в файле src/target/firmware/Makefile практически в самом низу нужно раскомментировать строку CFLAGS += -DCONFIG_TX_ENABLE. Однако имейте ввиду, что вещание на частотах gsm в России регулируется законом, так что вас могут счесть за врага народа и отправить в концлагерь призвать к судебной ответственности. Подробнее читайте в разделе .

Чуть ниже есть 2 строки, раскомментировав которые, вы получите возможность загружать прошивку в постоянную память, а не только в RAM.
18647


Перед компиляцией основной ветки давайте поговорим о перепрошивке USB-TTL конвертера CP2102.
Перепрошивка требуется для работы на нестандартных скоростях. Это может понадобиться в некоторых ветках проекта.
Нам понадобится программа-прошивальщик. Скачать её можно .
Втавляем cp2102 в компьютер и выгружаем модуль ядра:
Код:
sudo rmmod cp210x
Запускаем прошивальщик, что бы убедиться, что всё в порядке:
Код:
sudo ./cp210x-program
18648


Он должен вывести таблицу скоростей, содержащей следующие значения:
Код:
[baudrate table]
[...]
921600 = FFE6, FFF6, 1 #  923077 Baud, 20 us
[...]
460800 = FFCC, FFEC, 1 #  461538 Baud, 40 us
[...]
230400 = FF98, FFD9, 1 #  230769 Baud, 78 us
[...]
115200 = FF30, FFB2, 1 #  115385 Baud, 156 us
[...]

На всякий случай сделаем бекап памяти конвертера:
Код:
sudo ./cp210x-program -f eeprom.hex

Теперь мы можем перепрошить конвертер:
Код:
sudo ./cp210x-program -p -F eeprom.hex -w --set-baudrate 812500:FFE2,FFF4,1 --set-baudrate 406250:FFC5,FFE9,1 --set-baudrate 203125:FF8A,FFD3,1

Проверяем работу:
Код:
sudo ./cp210x-program
В выводе таблицы скоростей теперь должны быть следующие значения:
Код:
[baudrate table]
[...]
812500 = FFE2, FFF4, 1 #  800000 Baud, 24 us
[...]
406250 = FFC5, FFE9, 1 #  406780 Baud, 46 us
[...]
203125 = FF8A, FFD3, 1 #  203390 Baud, 90 us
[...]
115200 = FF30, FFB2, 1 #  115385 Baud, 156 us
[...]
Переподключите конвертер. На этом перепрошивка завершена.
Итак, если у вас cp2102 и вы перепрошили его, то перед компиляцией основного проекта в файл src/host/osmocon/osmocon.c нужно добавить строку #define I_HAVE_A_CP210x
18649


Теперь вы готовы собрать основную ветку
Код:
cd ~/osmocombb/master/src/
make
Если компиляция завершилась без ошибок, то можно переходить к самому интересному. К тестированию


Тестируем
Прошивки ветки master для motorola c115, c118, c123 и прочих на платформе compal_e88 (и 87) находятся по пути src/target/firmware/board/compal_e88/
Прошивки заливаются на телефон с помощью . Синтаксис загрузчика следующий:
  • -m {c123,c123xor,c140,c140xor,c155,romload,mtk} - платформа телефона. Для motorola c118 это c123xor,
  • -p /dev/ttyXXXX - путь к USB-TTL конвертеру
  • -c - загрузка по цепочке. Указывается, если вы загружаете тяжеловесную прошивку, в названии которых фигурирует слово hightram (например rssi.highram.bin)
  • file.bin - прошивка
Для удобства я сделал ссылку на osmocon и добавил её в переменную PATH
Код:
cd ~/osmocombb/master/src/host/osmocon/
mkdir osmocon-link
ln -s ~/osmocombb/master/src/host/osmocon/osmocon osmocon

Выключаем телефон и подключаем к компьютеру
Код:
#идём в папку с прошивками
cd ~/osmocombb/master/src/target/firmware/board/compal_e88
osmocon -m c123xor -p /dev/ttyUSB0 hello_world.compalram.bin
#коротко жмём кнопку включения на телефоне. Начинается загрузка.

18653


Могут быть проблемы с загрузкой прошивки из-за плохого соединения. Просто переподсоедините телефон и попробуйте снова.

Что со всем этим можно сделать
У osmocom . Есть, допустим, burst_int, нацеленный на снифинг gsm-трафика, emi для дос-атак на устройства gsm, но это всё темы для отдельных статей.

О том, что есть в ветке мастер (которую мы только что скомпилировали) можно почитать на оффициальном сайте: . Рассмотрим пример одной прошивки, использующей только телефон и другой, использующей телефон и компьютер одновременно.

RSSI
RSSI может работать без кмопьютера после прошивки. Он показывает системную информацию о базовой станции. Давайте загрузим эту прошивку на телефон:
Код:
#идём в папку с прошивками
cd ~/osmocombb/master/src/target/firmware/board/compal_e88
osmocon -m c123xor -p /dev/ttyUSB0 -c hello_world.compalram.bin
#коротко жмём кнопку включения на телефоне. Начинается загрузка.
Здесь используется параметр -c, так как это hightram-прошивка

После того, как прошивка загрузилась, в выводе терминала будет системная информация о ближайшей базовой станции. Есть возможность менять канал (ARFCN). А ещё он пикает, если нажать кнопку "вверх" :)
18662

С вышкой можно синхронизироваться (зелёная кнопка), тогда будет выдано ещё больше информации:
18664
Здесь MMC (Mobile Country Code) - код страны, MNC (Mobile Network Code) - код оператора, LAC (Location Area Code) - код локальной зоны. В двух словах LAC - это объединение некоторого количества базовых станций, которые обслуживаются одним контроллером базовых станций (BSC). cell id - идентификатор базовой станции.
С помощью этой информации можно узнать примерное местоположение вашего телефона. Учитывая то, что телефон подключён к сети для экстренных вызовов, вы теперь знаете, как вас смогут найти сверху :)

mobile
Другая, самая интересная на мой взгляд прошивка в этой ветке - mobile. Превращает ваш компьютер в телефон со всеми вытекающими плюшками (возможность просмотра трафика в wireshark, выполнение DTMF команд и комечто же звонки и смс-ки). Mobile использует телефон как физический уровень gsm, а всё остальное (layer 2-3) располагается на компьютере. Для нормальной работы нужна, конечно же, рабочая симка.

Зальём прошивку на телефон:
Код:
#подключаем выключенный телефон
cd ~/osmocombb/master/src/target/firmware/board/compal_e88
osmocon -m c123xor -p /dev/ttyUSB0 -c layer1.highram.bin
#коротко жмём на кнопку включения
Здесь, опять же, для загрузки прошивки использовался параметр -c, потому что для тяжеловесных прошивок используется загрузка по цепочке: сначала загружается кастомный загрузчик, который загружает прошивку типа hightram. Физическое взаимодействие с сетью (layer 1 модели OSI) запустился, сворачиваем это окно.

Во второй консоли запускаем наш "мобильник" mobile, выступающий в качестве 2 и 3 уровня модели OSI
~/osmocombb/master/src/host/layer23/src/mobile/mobile -i 127.0.0.1
Мобильник запущен. Мы можем подключиться к консоли управления через telnet:
telnet 127.0.0.1 4247

Давайте откроем wireshark и попробуем отловить смс-ку. В акуле телефон будет loopback-интерфейсом
18671

Ну разве не восхитительно!

Пожалуй на этом я и закончу данную статью, она и так уже довольно затянулась. Желаю всем дешёвых моторол, удачной пайки, компиляции с первого раза и не забывать об УК РФ, прежде чем соберётесь поднимать свою BTS.
 
Последнее редактирование:
В написано
  • TxD is at the tip of the plug (PC to Device)
  • RxD is at the middle contact (Device to PC)
  • GND is the outer contact
В статье кончик Rx. Как будет правильно?
Не ясен вопрос. Это три контакта, которые напаиваются на Джек 2.5
 
Последнее редактирование:
Не ясен вопрос. Это три контакта, которые нараиваются на Джек 2.5
В этой статье написано, что кончик джека должен выходить на Rx.
В документации osmocombb написано, что кончик джека должен выходить на Tx.
Как все же нужно?
 
В этой статье написано, что кончик джека должен выходить на Rx.
В документации osmocombb написано, что кончик джека должен выходить на Tx.
Как все же нужно?
Попробуйте и так и так. У меня не получилось законнектить по тому мануалу, пришлось самому всё прозванивать.
 
Самое отстойное, что задры молчат. Если мы промудимся на полную катушку и зайдем в тупик, а эти черти знают что там тупик, но не говорят - будет не приятно.
Не думаю, что хоть кто-то обязан объяснять, почему у вас что-то не работает. "Задры и черти" на этом и подобных форумах делятся своими исследованиями чисто из альтруистических побуждений, и если у вас что-то не получается, то они - последние, кого можно винить в этом.
Иногда просто стоит найти информацию из первоисточника и прочитать документацию.
 
  • Нравится
Реакции: Alex333
из исходника так же появляется ошибка pkg-config
получилось при повторном обновлении всех основных пакетов(apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc libpcsclite-dev), но после появилось это, может сталкивался кто?
make[3]: Цель «all» не требует выполнения команд.
make[3]: выход из каталога «/root/osmocombb/master/src/host/virt_phy/src»
make[3]: вход в каталог «/root/osmocombb/master/src/host/virt_phy»
make[3]: выход из каталога «/root/osmocombb/master/src/host/virt_phy»
make[2]: выход из каталога «/root/osmocombb/master/src/host/virt_phy»
make[1]: выход из каталога «/root/osmocombb/master/src/host/virt_phy»
make -C target/firmware CROSS_COMPILE=arm-none-eabi-
make[1]: вход в каталог «/root/osmocombb/master/src/target/firmware»
make[1]: *** Нет правила для сборки цели «apps/hello_world/main.p», требуемой для «all». Останов.
make[1]: выход из каталога «/root/osmocombb/master/src/target/firmware»
Makefile:113: ошибка выполнения рецепта для цели «firmware»
make: *** [firmware] Ошибка 2
 
Доброго времени суток.
Подскажите, можно прошить это который уровень сигнала отслеживает, что бы прошивка оставалась после выключения телефона?
 
Доброго времени суток.
Подскажите, можно прошить это который уровень сигнала отслеживает, что бы прошивка оставалась после выключения телефона?
Да, можно прошить флеш память
 
Спасибо за быстрый ответ.
Ещё вопросик. С кто-то работал? Что она может дать? KI ?
 
Здравствуйте. Скажите пожалуйста, есть ли возможность сменить частотный канал во время работы в режиме мониторинга (./mobile -i 127.0.0.1 ) ?
 
всем привет можете помочь с у меня устоновлен Kali VMWARE Workstation я не могу разобраться ~/osmocombb/master/src Makefile

:-(


30434
 
configure: WARNING: unrecognized options: --disable-tests, --disable-tests
cd shared/libosmocore/build-target && make
make[1]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target“ wird betreten
make all-recursive
make[2]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target“ wird betreten
Making all in include
make[3]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target/include“ wird betreten
make[3]: Für das Ziel „all“ ist nichts zu tun.
make[3]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target/include“ wird verlassen
Making all in src
make[3]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target/src“ wird betreten
make all-am
make[4]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target/src“ wird betreten
CC timer.lo
In file included from /usr/include/x86_64-linux-gnu/sys/types.h:193,
from /root/osmocombb/master/src/target/firmware/include/string.h:4,
from ../../src/timer.c:38:
/root/osmocombb/master/src/target/firmware/include/endian.h:5:10: fatal error: sys/_types.h: Datei oder Verzeichnis nicht gefunden
#include <sys/_types.h>
^~~~~~~~~~~~~~
compilation terminated.
make[4]: *** [Makefile:509: timer.lo] Fehler 1
make[4]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target/src“ wird verlassen
make[3]: *** [Makefile:381: all] Fehler 2
make[3]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target/src“ wird verlassen
make[2]: *** [Makefile:507: all-recursive] Fehler 1
make[2]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target“ wird verlassen
make[1]: *** [Makefile:379: all] Fehler 2
make[1]: Verzeichnis „/root/osmocombb/master/src/shared/libosmocore/build-target“ wird verlassen
make: *** [Makefile:34: shared/libosmocore/build-target/src/.libs/libosmocore.a] Fehler 2
 
  • Нравится
Реакции: kurtka
Здравствуйте. Скажите пожалуйста, есть ли возможность сменить частотный канал во время работы в режиме мониторинга (./mobile -i 127.0.0.1 ) ?
Насколько я знаю нет, это там не предусмотрено в принципе потому как идет работа стандартного телефона, т.е. он сам из списка соседей выбирает хороший канал
 
тоже припаял, давно правда.. увидел что темой интересуются вспомнил, ща буду пробывать САМ)

(возможно на фото приконектил не так)

Screenshot_21.png

моторолка не помню какая)) толи с118 или с115

все по пробую отпишу...
 
  • Нравится
Реакции: Dr.Lafa
Может кто понял в чем приччина? , частенько при загрузке бута возникает такая проблема, загрузка проходит но останавливается на строке handle_write(): finished и дальше необходимо отключать телефон от питания что бы снова его загрузить
"Встроенный загрузчик телефона при нажатии кнопки включения отправляет на последовательный порт запрос на загрузку прошивки (ACK). Если ему никто не отвечает, он просто посылает сообщение "@ftmtoolerror". В нашем случае osmocon принимает запрос (о чем говорит строка «Received PROMPT1 from phone, responding with CMD») и отвечает специальным сообщением (file_size=25180, hdr_len=4, dnload_len=25187). Далее загрузчик телефона либо соглашается грузить прошивку (Received PROMPT2 from phone, starting download), либо сообщает об ошибке. Как только прошивка будет загружена (handle_write(): finished) в оперативную память, загрузчик снова уведомляет нас (Received DOWNLOAD ACK from phone, your code is running now!) и подает питание на плату (battery_compal_e88_init: starting up). Ваш телефон показывает всем известные слова «Hello, world!», а в консоль пишет уже код, запущенный на нем. "

Так вот нет последнего ответа - Received DOWNLOAD ACK from phone, your code is running now!
С чем может быть связана такая нестабильность загрузки?
 

Вложения

Последнее редактирование модератором:
Приветствую всех! Собрал мастер-бренч Osmocom-bb. (по тому мануалу, где libosmocore собирается в /opt). Всё собралось, как говорят "с пол-пинка". Здорово намучался с заливкой прошивок, но выбросил прикупленные джеки (не было контакта между кончиком и его лепестком) и использовал "хвост" от гарнитуры. Счастье пошло, когда соединил вместе оба кольца джека. TTLUSB у меня на PL2303. Шью 115ю (расточил дырдочку :-))

На ютубе видел пару роликов про фишки с OTA-sms... Перелопатил пол "Жужла", но так и не нашёл ничего про команды sms_request и clone в mobile... Может ли кто-нибудь подсказать, где искать и как заставить?
 
Clone в mobile,эту функцию добавлял Positive Technologies,в свою версию прошивки Osmocom.

В исходниках такой функции не предусмотренно.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!