Ubuntu 编译 OsmocomBB 环境 [更新2017-10-24]

背景

关于OsmocomBB相关的编译方法,博主在2015年就已经发布过详细的文章帮助很多玩GSM Sniff的朋友成功完成实验,随着系统环境不断更新,OsmocomBB官方也对相关代码进行了bug修复和修改,网站结构也与之前有较大变化,导致我博客上的很多教程所涉及到的文件下载或者链接失效,给不少朋友带来了麻烦,所以博主打算重新再出一份最新的编译教程,其他自动化脚本博主会在后期使用Python3改写或者使用PyQt5做成可视化界面供大家参考。

再次声明:技术文章有一定的时效性,遇到问题应该首先想办法自己解决,推荐使用谷歌搜索引擎。关于GSM Sniff相关的所有Python脚本,凡是在本博客提到的由博主亲自编写原创发布的,都是完全免费,不存在收费情况,因此博主也没有义务帮助每个使用脚本的人解决遇到的问题,请谅解。

介绍

OsmocomBB这个项目的详细信息,请参考官网 https://osmocom.org/projects/baseband ,博主认为官网才是最完善最可靠的信息来源,而本博客只是对官网的信息进行了整理和翻译,方便英文不太好的朋友顺利完成实验,也将部分比较难懂的部分进行通俗易懂的讲解。

博主之前写过不少关于GSM短信嗅探相关的文章,随着科技的进步,2G网络即将被3G和4G取代,甚至5G网络也即将到来,OsmocomBB这个项目对于3G、4G、5G网络并不适用,伴随着2G网络的逐渐消失,这个项目的实际价值也不如从前,但是如果你对GSM蜂窝网络,或者对移动通信网络感兴趣,并且有一定的编程基础,博主建议你仔细的阅读这个项目的源代码,这对于理解网络结构,相关协议都是非常有帮助的,同样的,你也可以阅读与之相关的其他项目,对于了解3G和4G网络也很有帮助。

教程

废话就不多说了,之前的老文章请自行翻看博主之前写的一些东西,接下来直接开始配置流程。

OsmocomBB项目的所有文章都在这个地址 https://osmocom.org/projects/baseband/wiki ,这里详细记录了每一个细节,请自行研读,博主只写了环境搭建的部分。

博主这里的系统环境如图所示

2017-10-24 12-48-40屏幕截图.png - 大小: 35.39 KB - 尺寸: 840 x 359 - 点击打开新窗口浏览全图

[1]:创建ARM编译环境

OsmocomBB项目是运行在一个移动终端也就是一个手机上面,生成了一个固件并刷入手机,用于控制手机的各种操作并提供一个接口给电脑接收电脑传过去的指令,那么就需要本地电脑有一个用于连接手机的通道,在这里叫做osmocon,制作手机固件需要使用ARM编译环境编译生成最终的.bin文件,所以首先就是搭建这个ARM编译环境。

开始搭建环境之前,我认为你已经准备好了Linux环境并更新到最新版本,创建一个文件夹用来存放ARM编译环境的所需文件,这里假设创建的文件夹为armtoolchain,进入文件夹后下载构建脚本并赋予其可执行权限

mkdir armtoolchain
cd armtoolchain
wget https://osmocom.org/attachments/download/2052/gnu-arm-build.3.sh
sudo chmod +x gnu-arm-build.3.sh

接着创建几个文件夹

mkdir build install src

这几个文件夹分别存放了对应的文件,切换到src文件夹下载必要的文件包

注意:这里的下载地址可能很慢或者无法下载,请自行准备好梯子

cd src/
wget https://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
wget https://ftp.gnu.org/gnu/binutils/binutils-2.21.1a.tar.bz2
wget ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz

这个时候不要着急构建,先安装一些必须的依赖

sudo apt-get install build-essential libgmp3-dev libmpfr-dev libx11-6 libx11-dev texinfo flex bison libncurses5 libncurses5-dbg libncurses5-dev libncursesw5 libncursesw5-dbg libncursesw5-dev zlibc zlib1g-dev libmpfr4 libmpc-dev
然后就可以执行构建脚本了
cd ..
./gnu-arm-build.3.sh
I will build an arm-none-eabi cross-compiler:

  Prefix: /home/kbdancer/armtoolchain/install
  Sources: /home/kbdancer/armtoolchain/src
  Build files: /home/kbdancer/armtoolchain/build

Press ^C now if you do NOT want to do this.
按任意键开始执行构建,直到出现以下提示信息则构建成功
Build complete! Add /home/kbdancer/armtoolchain/install/bin to your PATH to make arm-none-eabi-gcc and friends
accessible directly.

根据提示信息把上面的路径添加到环境变量中,环境变量在/home/kbdancer/.bashrc,使用vim编辑然后将下面的这行添加到环境变量

export PATH=$PATH:home/kbdancer/armtoolchain/install/bin
这里注意把路径改成你自己的,然后执行
source /home/kbdancer/.bashrc

让环境变量生效,接下来就可以编译osmocombb了。

[2]、编译osmocombb

开始之前需要安装一些必要的依赖包

sudo apt install libtool shtool automake autoconf git-core pkg-config make gcc
这些依赖包是编译必备的软件包,osmocomBB项目是基于libosmocore的,所以要先搞定 libosmocore,libosmocore的编译安装也有一些依赖需要安装
sudo apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc
接下来还必须安装一些库
sudo apt-get install libpcsclite-dev
下面就可以把代码同步下来了(注意:这里如果没有梯子的话速度非常慢,有时候直接无法连接,请自行准备梯子
git clone git://git.osmocom.org/libosmocore.git
同步代码之后就可以编译了
cd libosmocore/
autoreconf -i
./configure
make
sudo make install
sudo ldconfig -i
cd ..

编译安装完libosmocore就可以继续编译osmocombb了,首先同步最新代码(注意:请自备梯子

git clone git://git.osmocom.org/osmocom-bb.git
cd osmocom-bb
git pull --rebase
代码拉取回来之后执行编译
cd src
make
如果一切顺利的话osmocombb就编译好了,接下来就是测试部分了

[3]、运行测试

插上USB数据线执行下面命令查看USB设备是否存在

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 046a:0011 Cherry GmbH G83 (RS 6000) Keyboard
Bus 001 Device 002: ID 09da:c10a A4Tech Co., Ltd. 
Bus 001 Device 008: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
博主这里使用的USB转TTL模块是CP2102,然后执行下面的命令连接手机
cd host/osmocon/
sudo ./osmocon -p /dev/ttyUSB0 -m c123xor ../../target/firmware/board/compal_e88/layer1.compalram.bin
然后轻触手机的开机键,屏幕上会显示刷入固件的一些信息
got 2 bytes from modem, data looks like: 04 81  ..
got 5 bytes from modem, data looks like: 1b f6 02 00 41  ....A
got 1 bytes from modem, data looks like: 01  .
got 1 bytes from modem, data looks like: 40  @
Received PROMPT1 from phone, responding with CMD
read_file(../../target/firmware/board/compal_e88/layer1.compalram.bin): file_size=58484, hdr_len=4, dnload_len=58491
got 1 bytes from modem, data looks like: 1b  .
got 1 bytes from modem, data looks like: f6  .
got 1 bytes from modem, data looks like: 02  .
got 1 bytes from modem, data looks like: 00  .
got 1 bytes from modem, data looks like: 41  A
got 1 bytes from modem, data looks like: 02  .
got 1 bytes from modem, data looks like: 43  C
Received PROMPT2 from phone, starting download
handle_write(): 4096 bytes (4096/58491)
handle_write(): 4096 bytes (8192/58491)
handle_write(): 4096 bytes (12288/58491)
handle_write(): 4096 bytes (16384/58491)
handle_write(): 4096 bytes (20480/58491)
handle_write(): 4096 bytes (24576/58491)
handle_write(): 4096 bytes (28672/58491)
handle_write(): 4096 bytes (32768/58491)
handle_write(): 4096 bytes (36864/58491)
handle_write(): 4096 bytes (40960/58491)
handle_write(): 4096 bytes (45056/58491)
handle_write(): 4096 bytes (49152/58491)
handle_write(): 4096 bytes (53248/58491)
handle_write(): 4096 bytes (57344/58491)
handle_write(): 1147 bytes (58491/58491)
handle_write(): finished
got 1 bytes from modem, data looks like: 1b  .
got 1 bytes from modem, data looks like: f6  .
got 1 bytes from modem, data looks like: 02  .
got 1 bytes from modem, data looks like: 00  .
got 1 bytes from modem, data looks like: 41  A
got 1 bytes from modem, data looks like: 03  .
got 1 bytes from modem, data looks like: 42  B
Received DOWNLOAD ACK from phone, your code is running now!
battery_compal_e88_init: starting up


OsmocomBB Layer 1 (revision osmocon_v0.0.0-1845-g363d4d2)
======================================================================
Device ID code: 0xb4fb
Device Version code: 0x0000
ARM ID code: 0xfff3
cDSP ID code: 0x0128
Die ID code: cdc1111fdb00d7f0
======================================================================
REG_DPLL=0x2413
CNTL_ARM_CLK=0xf0a1
CNTL_CLK=0xff91
CNTL_RST=0xfff3
CNTL_ARM_DIV=0xfff9
======================================================================
Power up simcard:


THIS FIRMWARE WAS COMPILED WITHOUT TX SUPPORT!!!
Assert DSP into Reset
Releasing DSP from Reset
Setting some dsp_api.ndb values
Setting API NDB parameters
DSP Download Status: 0x0001
DSP API Version: 0x0000 0x0000
Finishing download phase
DSP Download Status: 0x0002
DSP API Version: 0x3606 0x0000
LOST 13!
至此固件刷入成功,接着测试ARFCN频点扫描,新开一个终端窗口,执行如下命令(注意:之前那个刷入固件的窗口全程不能关闭,否则手机和电脑的连接就断开了),切换到 armtoolchain/osmocom-bb/src/host/layer23/src/misc/ 目录执行如下命令
sudo ./cell_log -O
会看到屏幕回显信息
Copyright (C) 2010 Andreas Eversberg

License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

./cell_log: invalid option -- 'O'
Failed to connect to '/tmp/osmocom_sap'
Failed during sap_open(), no SIM reader
<000e> cell_log.c:804 Scanner initialized
Mobile initialized, please start phone now!
<000e> cell_log.c:368 Measure from 0 to 124
<000e> cell_log.c:368 Measure from 512 to 885
<000e> cell_log.c:368 Measure from 955 to 1023
<000e> cell_log.c:359 Measurement done
<000e> cell_log.c:341 Sync ARFCN 2 (rxlev -53, 567 syncs left)
<000e> cell_log.c:191 Cell: ARFCN=2 MCC=460 MNC=00 (China, China Mobile)
<000e> cell_log.c:341 Sync ARFCN 854 (rxlev -65, 566 syncs left)
<000e> cell_log.c:341 Sync ARFCN 3 (rxlev -66, 565 syncs left)
<000e> cell_log.c:341 Sync ARFCN 110 (rxlev -66, 564 syncs left)
<000e> cell_log.c:341 Sync ARFCN 1 (rxlev -69, 563 syncs left)
<000e> cell_log.c:341 Sync ARFCN 28 (rxlev -69, 562 syncs left)
<000e> cell_log.c:341 Sync ARFCN 48 (rxlev -71, 561 syncs left)
<000e> cell_log.c:341 Sync ARFCN 802 (rxlev -72, 560 syncs left)
<000e> cell_log.c:341 Sync ARFCN 801 (rxlev -73, 559 syncs left)
<000e> cell_log.c:341 Sync ARFCN 808 (rxlev -73, 558 syncs left)
<000e> cell_log.c:341 Sync ARFCN 814 (rxlev -73, 557 syncs left)
<000e> cell_log.c:341 Sync ARFCN 827 (rxlev -73, 556 syncs left)
<000e> cell_log.c:341 Sync ARFCN 795 (rxlev -74, 555 syncs left)
<000e> cell_log.c:341 Sync ARFCN 797 (rxlev -74, 554 syncs left)
<000e> cell_log.c:341 Sync ARFCN 800 (rxlev -74, 553 syncs left)
<000e> cell_log.c:341 Sync ARFCN 804 (rxlev -74, 552 syncs left)
<000e> cell_log.c:341 Sync ARFCN 805 (rxlev -74, 551 syncs left)
<000e> cell_log.c:341 Sync ARFCN 807 (rxlev -74, 550 syncs left)
<000e> cell_log.c:341 Sync ARFCN 810 (rxlev -74, 549 syncs left)
<000e> cell_log.c:341 Sync ARFCN 811 (rxlev -74, 548 syncs left)
<000e> cell_log.c:341 Sync ARFCN 813 (rxlev -74, 547 syncs left)
<000e> cell_log.c:341 Sync ARFCN 815 (rxlev -74, 546 syncs left)
<000e> cell_log.c:341 Sync ARFCN 817 (rxlev -74, 545 syncs left)
<000e> cell_log.c:341 Sync ARFCN 818 (rxlev -74, 544 syncs left)
<000e> cell_log.c:341 Sync ARFCN 828 (rxlev -74, 543 syncs left)
<000e> cell_log.c:341 Sync ARFCN 830 (rxlev -74, 542 syncs left)
<000e> cell_log.c:341 Sync ARFCN 840 (rxlev -74, 541 syncs left)
<000e> cell_log.c:341 Sync ARFCN 791 (rxlev -75, 540 syncs left)
<000e> cell_log.c:341 Sync ARFCN 794 (rxlev -75, 539 syncs left)
<000e> cell_log.c:341 Sync ARFCN 798 (rxlev -75, 538 syncs left)
<000e> cell_log.c:341 Sync ARFCN 816 (rxlev -75, 537 syncs left)
<000e> cell_log.c:341 Sync ARFCN 820 (rxlev -75, 536 syncs left)
<000e> cell_log.c:341 Sync ARFCN 821 (rxlev -75, 535 syncs left)
<000e> cell_log.c:341 Sync ARFCN 823 (rxlev -75, 534 syncs left)
<000e> cell_log.c:341 Sync ARFCN 824 (rxlev -75, 533 syncs left)
<000e> cell_log.c:341 Sync ARFCN 826 (rxlev -75, 532 syncs left)
<000e> cell_log.c:341 Sync ARFCN 834 (rxlev -75, 531 syncs left)
<000e> cell_log.c:341 Sync ARFCN 836 (rxlev -75, 530 syncs left)
<000e> cell_log.c:341 Sync ARFCN 837 (rxlev -75, 529 syncs left)
<000e> cell_log.c:341 Sync ARFCN 839 (rxlev -75, 528 syncs left)
<000e> cell_log.c:341 Sync ARFCN 843 (rxlev -75, 527 syncs left)
<000e> cell_log.c:341 Sync ARFCN 58 (rxlev -76, 526 syncs left)
<000e> cell_log.c:341 Sync ARFCN 74 (rxlev -76, 525 syncs left)
<000e> cell_log.c:191 Cell: ARFCN=74 MCC=460 MNC=00 (China, China Mobile)
<000e> cell_log.c:341 Sync ARFCN 792 (rxlev -76, 524 syncs left)
<000e> cell_log.c:341 Sync ARFCN 799 (rxlev -76, 523 syncs left)
<000e> cell_log.c:341 Sync ARFCN 803 (rxlev -76, 522 syncs left)
<000e> cell_log.c:341 Sync ARFCN 812 (rxlev -76, 521 syncs left)
<000e> cell_log.c:341 Sync ARFCN 825 (rxlev -76, 520 syncs left)
<000e> cell_log.c:341 Sync ARFCN 829 (rxlev -76, 519 syncs left)
<000e> cell_log.c:341 Sync ARFCN 831 (rxlev -76, 518 syncs left)
<000e> cell_log.c:341 Sync ARFCN 833 (rxlev -76, 517 syncs left)
<000e> cell_log.c:341 Sync ARFCN 841 (rxlev -76, 516 syncs left)
<000e> cell_log.c:341 Sync ARFCN 70 (rxlev -77, 515 syncs left)
<000e> cell_log.c:191 Cell: ARFCN=70 MCC=460 MNC=00 (China, China Mobile)
<000e> cell_log.c:341 Sync ARFCN 76 (rxlev -77, 514 syncs left)
<000e> cell_log.c:341 Sync ARFCN 793 (rxlev -77, 513 syncs left)
<000e> cell_log.c:341 Sync ARFCN 806 (rxlev -77, 512 syncs left)
<000e> cell_log.c:341 Sync ARFCN 819 (rxlev -77, 511 syncs left)
<000e> cell_log.c:341 Sync ARFCN 832 (rxlev -77, 510 syncs left)
<000e> cell_log.c:341 Sync ARFCN 838 (rxlev -77, 509 syncs left)
<000e> cell_log.c:341 Sync ARFCN 842 (rxlev -77, 508 syncs left)
<000e> cell_log.c:341 Sync ARFCN 844 (rxlev -77, 507 syncs left)
<000e> cell_log.c:341 Sync ARFCN 846 (rxlev -77, 506 syncs left)
<000e> cell_log.c:341 Sync ARFCN 847 (rxlev -77, 505 syncs left)
<000e> cell_log.c:341 Sync ARFCN 850 (rxlev -77, 504 syncs left)
<000e> cell_log.c:341 Sync ARFCN 852 (rxlev -77, 503 syncs left)
<000e> cell_log.c:341 Sync ARFCN 853 (rxlev -77, 502 syncs left)
<000e> cell_log.c:341 Sync ARFCN 856 (rxlev -77, 501 syncs left)
<000e> cell_log.c:341 Sync ARFCN 5 (rxlev -78, 500 syncs left)
<000e> cell_log.c:341 Sync ARFCN 822 (rxlev -78, 499 syncs left)
<000e> cell_log.c:341 Sync ARFCN 849 (rxlev -78, 498 syncs left)
<000e> cell_log.c:341 Sync ARFCN 855 (rxlev -78, 497 syncs left)
<000e> cell_log.c:341 Sync ARFCN 857 (rxlev -78, 496 syncs left)
<000e> cell_log.c:341 Sync ARFCN 19 (rxlev -79, 495 syncs left)
<000e> cell_log.c:191 Cell: ARFCN=19 MCC=460 MNC=00 (China, China Mobile)
<000e> cell_log.c:341 Sync ARFCN 20 (rxlev -79, 494 syncs left)
<000e> cell_log.c:341 Sync ARFCN 73 (rxlev -79, 493 syncs left)
博主这里是使用的主分支的代码,其他分支对于扫描和嗅探部分有不同的处理方式,需要的朋友可以参考官方文档切换到其他分支测试,我这里选择一个ARFCN为2的频点进行嗅探。

CTRL+C结束掉ARFCN(注意:有的分支不需要手动结束,扫描完成之后会自动结束),直接如下命令进行嗅探测试

sudo ./ccch_scan -i 127.0.0.1 -a 2
会看到如下回显
Copyright (C) 2010 Harald Welte <laforge@gnumonks.org>
Contributions by Holger Hans Peter Freyther

License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Failed to connect to '/tmp/osmocom_sap'
Failed during sap_open(), no SIM reader
<0001> app_ccch_scan.c:415 PCH pdisc != RR
<0001> app_ccch_scan.c:438 unknown PCH/AGCH type 0x2b
<0001> app_ccch_scan.c:352 Paging1: Normal paging chan tch/h to TMSI M(0x5d5c3920) 
<0001> app_ccch_scan.c:355 Paging2: Normal paging chan any to TMSI M(0x3f48a7ed) 
<0001> app_ccch_scan.c:378 Paging3: Normal paging chan n/a  to tmsi M(3601270982) 
<0001> app_ccch_scan.c:312 Paging1: Normal paging chan sdch to tmsi M(2084053213) 
<0001> app_ccch_scan.c:415 PCH pdisc != RR
<0001> app_ccch_scan.c:438 unknown PCH/AGCH type 0x2b
<0001> app_ccch_scan.c:415 PCH pdisc != RR
<0001> app_ccch_scan.c:438 unknown PCH/AGCH type 0x2b
<0001> app_ccch_scan.c:312 Paging1: Normal paging chan any to tmsi M(3516964967) 
<0001> app_ccch_scan.c:75 SI1 received.
<0001> app_ccch_scan.c:415 PCH pdisc != RR
<0001> app_ccch_scan.c:438 unknown PCH/AGCH type 0x2b
<0001> app_ccch_scan.c:415 PCH pdisc != RR
<0001> app_ccch_scan.c:438 unknown PCH/AGCH type 0x2b
<0001> app_ccch_scan.c:312 Paging1: Normal paging chan any to tmsi M(3936876559) 
<0001> app_ccch_scan.c:312 Paging1: Normal paging chan tch/h to tmsi M(1647379545) 
<0001> app_ccch_scan.c:415 PCH pdisc != RR
<0001> app_ccch_scan.c:438 unknown PCH/AGCH type 0x2b
不要关闭这个窗口,使用管理员权限打开wireshark软件,如果没有这个软件请自行安装,使用如下命令打开
sudo wireshark
你会看到一个报错信息
Lua: Error during loading:
 [string "/usr/share/wireshark/init.lua"]:44: dofile has been disabled due to running Wireshark as superuser. See https://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in running Wireshark as an unprivileged user.
不要惊慌,点击OK按钮即可,然后双击 Loopback:lo接口进行流量解析,如下图所示
2017-10-24 13-57-26屏幕截图.png - 大小: 80.14 KB - 尺寸: 752 x 576 - 点击打开新窗口浏览全图
接着你会看到刷刷刷很多信息都是解析的GSMTAP数据包,这里我们需要对数据类型进行过滤,在上面的输入框中输入gsm_sms进行过滤。

2017-10-24 13-58-16屏幕截图.png - 大小: 248 KB - 尺寸:  x  - 点击打开新窗口浏览全图

剩下的就是等待短信的到来

后记

文中只是很简单的描述了osmocombb的常规编译测试流程,还有很多细节需要朋友们自己去探索,比如其他分支的切换,sms数据包内容的解读,遇到编译报错怎么解决,刷入固件失败等等,这些问题都是很经常遇到的,希望大家在玩的时候慢慢折腾。

这里博主需要说明一下,osmocombb项目并不一定非得在kali linux下面才能跑,其他的Linux发行版本依然跑的很顺,比如博主用的Linux Mint就一次性编译通过,没有出任何问题,希望大家不要被误导。

致谢

https://osmocom.org/projects/baseband/wiki/GnuArmToolchain

https://osmocom.org/projects/baseband/wiki/Software_Getting_Started

https://osmocom.org/projects/libosmocore/wiki/Libosmocore

如果您觉得文章有帮助到您,请到 https://www.92ez.com/index.php?action=show&id=23403 进行打赏/捐赠,谢谢!
如果您觉得文章有帮助到您,请 使劲戳这里 进行打赏/捐赠,谢谢!
本文链接:https://www.92ez.com/?action=show&id=23458
提示:技术文章有一定的时效性,请先确认是否适用你当前的系统环境。

上一篇: Kali Linux 安装 OneinStack
下一篇: 博客新增音乐功能的说明

访客评论
目前还没有人评论,您发表点看法?
发表评论

评论内容 (必填):