GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站

GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站

引文

如果你已经购买了Nuand(官方)BladeRF x40,那么就可以在上面运行OpenBTS并可以输入一些指令来完成一些任务。一般来说HackRF,是一款覆盖频率最宽的SDR板卡。它几乎所有的信息都是开源的,甚至包括KiCad文件。缺点是它没有FPGA,使用的低速的USB2接口,ADC/DAC的精度比较低。

再使用 bladeRF 板卡时需要注意两个“镜像”:固件 (firmware) 镜像与 FPGA 镜像。二者是两个不同的概念。但是业界叫法不一,有时候会把二者混为一谈。一般而言,固件指的是嵌入到硬件设备中的软件,存放在只读存储器 (ROM) 或者闪存 (flash) 中,一般不易修改,修改的操作称为“刷新”(flashing)。固件这个名词最初和微代码相关,不过 bladeRF 里源代码是嵌入式 C 程序。FPGA 全名为可编程门阵列,其门电路、寄存器连接可以编程重构,其源程序一般是硬件描述语言 (HDL),通过综合 (synthesis) 等步骤得到二进制文件。在 bladeRF 板卡上,FPGA 只是一块 Altera 芯片。在没有内置非挥发存储时,FPGA 镜像需要每次上电时重新加载,bladeRF 就是这种情况。所以在拿到板卡时,上面已有固件,但还没有 FPGA 镜像。下面本文会具体说明在使用 bladeRF 时如何刷新固件、加载/更新 FPGA 镜像、以及如何自动加载 FPGA 镜像。注意,有时为了避免混淆,会称 FPGA 镜像为 FPGA 比特流,或者 FPGA 配置(因为它就是配置了门电路等组件的连接)。

本文中介绍的工具、技术带有一定的攻击性,请合理合法使用。

系统:

Ubuntu 12.04 LTS Server (32位)下载:(点击我)

升级git版本

sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:git-core/ppa (press enter to continue)
sudo apt-get update
sudo apt-get install git

安装一些前提软件包。

设置好之后,开始安装。

将下面代码复制粘贴,运行-将会开始安装:

复制代码
sudo apt-get install $(wget -qO - https://raw.githubusercontent.com/RangeNetworks/dev/master/build.sh | \grep installIfMissing | \grep -v "{" | \cut -f2 -d" ")
复制代码

另外一种安装方式是通过在所有文件中搜索文本文件 IFMissing,然后再通过apt-get 命令来安装它。当然你也可以直接通过程序代码来操作。

值得注意的是,安装时候有两个安装包会失败(libzmq3 & libzmq3-devel)-但可以在Ubuntu系统下直接安装。

$ sudo add-apt-repository ppa:chris-lea/zeromq
$ sudo apt-get update
$ sudo apt-get install libzmq3-dbg libzmq3-dev 

下一步是安装uhd,当然还要注意GNURadio。运行下面的指令将会执行安装,当然这回花掉一些时间,而这也取决于你的电脑。

wget http://www.sbrac.org/files/build-gnuradio && chmod a+x ./build-gnuradio && ./build-gnuradio

一旦执行完成,你将会收到失败或成功的提示信息。如果失败可以选择重新安装,并查看相关信息来解决问题。下面将会安装和配置 OpenBTS相关软件,包括:libgsm1-dev 、asterisk-dev 、asterisk-config。安装

$ sudo apt-get install libgsm1-dev asterisk-dev asterisk-config

当然你可以自主选择是否安装libusb,请注意不是 libusbx 。安装可以到www.libusb.org页面下载,然后将其复制到 /usr/src目录下。将/usr/lib/x86_64-linux-gnu/libusb.so原始文件备份后覆盖它。

安装OpenBTS

完成上面的事情之后,现在就开始安装它吧。

1.为其(OpenBTS)创建一个目录(结合实际情况)

2.然后安装并运行它

复制代码
#!/bin/bashgit clone https://github.com/RangeNetworks/openbts.git
git clone https://github.com/RangeNetworks/smqueue.git
git clone https://github.com/RangeNetworks/subscriberRegistry.git

#From here and downwards you can copy&paste (that's why the ';' are for)
for D in *; do (echo $D;echo "=======";cd $D;git clone https://github.com/RangeNetworks/CommonLibs.git;git clone https://github.com/RangeNetworks/NodeManager.git);
done;
git clone https://github.com/RangeNetworks/libcoredumper.git;
git clone https://github.com/RangeNetworks/liba53.git
复制代码

3.创建 libcoredumper

cd libcoredumper;
./build.sh && \sudo dpkg -i *.deb;
cd ..

4.创建 liba53

cd liba53;
make && \sudo make install;
cd ..

5.在同一目录下,check out“YateBTS”

svn checkout http://voip.null.ro/svn/yatebts/trunk yatebts 

6.下一步去掉 FPGA(自动加载)信息,然后加载并打开它

vim ./yatebts/mbts/TransceiverRAD1/bladeRFDevice.cpp

从#ifdef(108行)到#endif(129行)结束,这之间是空的,应该为后来留为备用的。

7.更换目录(YateBTS)然后运行 autogen.sh

$ cd opbts/yatebts
$ ./autogen.sh

8.这样就可以创建配置文件,如果你立刻运行并配置脚本,将会出现错误然后出现搜索YATE信息。所以先要打开它配置

$vim configure

能够找到as_fn_err $吗?能够找到$LINENO变量(开源软件 Yate)并替换吗?那么进行下一步吧

9.重新配置

./configure

10.这个时候需要开源软件YateBTS两个文件目录

a) Peering

$ cd /home/openbts/obts/yatebts/mbts/Peering
$ make

b) TransceiverRAD1

$ cd /home/openbts/obts/yatebts/mbts/TransceiverRAD1
$ make

11.复制两个文件到 OpenBTS 文件目录下

$ cd ..
$ cp ./yatebts/mbts/TransceiverRAD1/transceiver-bladerf openbts/apps/
$ cd openbts/apps/
$ ln -sf transceiver-bladerf transceiver

12.编译OpenBTS

$ cd /home/openbts/obts/openbts
$ ./autogen.sh
$ ./configure --with-uhd
$ make

13.下一步配置SQL-lite软件库(bladeRF),需要做一些修改

vim /home/openbts/obts/openbts/apps/OpenBTS.example.sql

查询并替换以下信息

完成并进行下一步

14.创建OpenBTS配置目录

$ sudo mkdir /etc/OpenBTS

15.在OpenBTS目录下,安装软件库

$ sudo sqlite3 -init ./apps/OpenBTS.example.sql /etc/OpenBTS/OpenBTS.db ".quit"

16.一旦完成,下一步可以通过命令来测试它

$ sqlite3 /etc/OpenBTS/OpenBTS.db .dump

如果看到了大量的输出数据信息,那么就表明成功了。进行下一步

17.通过命令运行OpenBTS

$ cd /home/openbts/obts/openbts/apps
$ sudo ./OpenBTS

如果看见系统启动,你的基站准备好并启动它,如果使用手机搜寻附近网络,应该出现测试PLMN网络的测试信息(00101)。

18.如果开始上面的测试,退出openBTS然后安装用户注册表(sipauthserve以及smqueue),需要这些才能够运行openBTS。没有这些,手机不会连接测试网络。

19. 对于用户注册表,必须要创建一个文件目录,即/var/lib/asterisk/sqlite3dir,创建它

$ sudo mkdir -p /var/lib/asterisk/sqlite3dir

20.创建 sipauthserve

$ cd subscriberRegistry
$ ./autogen.sh
$ ./configure
$ make

在/home/openbts/obts/subscriberRegistry/apps目录下创建

21.下一步配置 sipauthserve

$ cd /home/openbts/obts/subscriberRegistry
$ sudo sqlite3 -init subscriberRegistry.example.sql /etc/OpenBTS/sipauthserve.db ".quit"

22.下一步安装SMQUEUE,其与SubscriberRegistry.h文件有关联,可以在其目录修复它

$ cd /home/openbts/obts/smqueue
$ ln -s /home/openbts/obts/subscriberRegistry/ SR
$ autoreconf -i
$ ./configure
$ make

23.一旦完成之后,就需要修改其配置文件

$ cd /home/openbts/obts/smqueue
$ sudo sqlite3 -init smqueue/smqueue.example.sql /etc/OpenBTS/smqueue.db ".quit"

bladeRF 固件升级与FPGA镜像加载

24.在https://github.com/Nuand/bladeRF/wiki/Upgrading-bladeRF-firmware升级固件

25.完成之后在http://www.nuand.com/fpga.php下载镜像(FPGA)

26.加载FPGA镜像

$ bladeRF-cli -L <path to fpga image file>

这步一定要有耐心,不要突然终止,别让板子变成砖了。

27. 完成之后,开始运行之前的配置的服务吧。

复制代码
$ cd /home/openbts/obts/smqueue
$ sudo ./smqueue &$ cd /home/openbts/obts/subscriberRegistry/apps
$ sudo ./sipauthserve &$ cd /home/openbts/obts/openbts/apps
$ sudo ./OpenBTS &
复制代码

28.启动OpenBTSCLI

$ cd /home/openbts/obts/openbts/apps/
$ sudo ./OpenBTSCLI

29. 默认情况下, OpenBTS不会接受额外的登记信息,需要做到下面几点

a) 输入你手机的IMSI(国际移动用户识别码)

b) 设置所有的IMSI号可以被登记

config Control.LUR.OpenRegistration .*

这么做将会导致信号范围内所有的手机连接到你配置的基站上面,包括(隔壁的妹子or老王)。

现在你可以在手机上能够搜索到基站网络了,可以拨打服务电话(作者那边是600)做测试(Asterisk)。

了解更多

[1] https://github.com/Nuand/bladeRF/wiki/Minimalistic-build-and-run-test-for-OpenBTS-5

[2] https://wush.net/trac/rangepublic/wiki/BuildInstallRun#ConfiguringOpenBTS

[3] https://wush.net/trac/rangepublic/wiki/CommonErrors

[4] http://openbts.org/w/index.php/Main_Page

[5] https://github.com/Nuand/bladeRF/wiki/Upgrading-bladeRF-firmware

*参考来源:linux.net.pk


本文转自 K1two2 博客园博客,原文链接: http://www.cnblogs.com/k1two2/p/5379655.html ,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 中断处理浅析

最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想. 于是整理一下~第一阶段&#xff0d;&#xff0d;获取中断号每个CPU都有响应中断的能力, 每个CPU响应中断时都走相同的流程. 这个流程就是内核…

用scikit-learn研究局部线性嵌入(LLE)

1. scikit-learn流形学习库概述 在scikit-learn中&#xff0c;流形学习库在sklearn.manifold包中。里面实现的流形学习算法有&#xff1a; 1&#xff09;多维尺度变换MDS算法&#xff1a;这个对应的类是MDS。MDS算法希望在降维时在高维里样本之间的欧式距离关系在低维可以得到保…

iOS app 企业内部发布及HTTPS服务器配置

转自: http://www.cnblogs.com/cocoajin/p/4082488.html iOS企业内部发布及HTTPS服务器配置 一&#xff1a;所需的条件 1. 苹果开发者证书&#xff0c;企业版 299$ 版本 2. ssl 证书&#xff0c;即https使用的服务器证书 3. web服务器&#xff0c;支持https 4. 一个域名&#x…

Pytorch超简单安装教程

安装Pytorch 1.1 安装Annaconda 安装Pytorch首先需要安装Annaconda&#xff0c;按照教程&#xff0c;安装了Annaconda5.2.0的版本。 路径 记住安装路径即可&#xff0c;其余均选默认。 1.2 安装Pytorch 第一步&#xff0c;打开Anaconda Prompt 。然后输入 conda create -n…

44. 源代码解读-RocketMQ-架构

1. 前言 1.1 github源代码 https://github.com/apache/rocketmq 1.2 github其他客户端&#xff0c;比如c,php https://github.com/apache/rocketmq-externals 1.3 运行进程 RocketMQ分成两个进程运行 NamesrvBrokerNamesrv&#xff0c;命名服务&#xff0c;主要负责Broker状态管…

Pytorch基础(一) —— tensorboard的应用

一、简介与安装方法 1.1 概念 Tensorboard 是 TensorFlow 的一个工具包&#xff0c;用于展示网络图、张量的指标变化和分布情况&#xff0c;如权重W、偏置B、卷积层数、全连接层数等参数&#xff0c;使用该工具可以方便观察神经网络训练过程&#xff0c;分析学习模型训练的效…

【WIN10】WIN2D——基本圖形的繪製

DEMO下載地址&#xff1a;http://yunpan.cn/c3iNuHFFAcr8h &#xff08;提取码&#xff1a;8e48&#xff09; 先看一個截圖&#xff1a; 繪製了一些基本形狀。 DEMO的繪製代碼都非常簡單&#xff0c;不想在博客裡細說了&#xff0c;看代碼更為清晰些。 可能繪製扇形的代碼有些麻…

python socket 网络编程

socket 套接字&#xff1a;网络接口。 我们在网络上需要传输自己需要的数据&#xff0c;我们在网络上传输数据使用的是网络协议&#xff0c; 而套接字就是我们将数据从本地采用协议传输的接口 socket模型&#xff1a; socket族&#xff1a; #AF_UNIX 被使用在类unix系统之间进行…

Python中利用plt显示中文标题解决方案

解决方法 plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus] False plt.title(灰度级别频率图) plt.show()

Pytorch基础(四)—— 卷积层

一、概念 卷积从数学的角度讲是一种矩阵的运算方法。我们可以用一个卷积核对一个矩阵进行卷积运算&#xff0c;具体运算过程图示可以见pytorch官网。 卷积运算按输入数据的通道数可分为单通道和多通道两种。 单通道是指卷积核只有一个的情况。 多通道包括两种。 分别是单个…

【图像处理】——创建一个新的图片

方法一:直接复制一个已经存在的图片 img.copy() 如果是想生成一个指定大小的图片,则可以通过numpy数组进行创建 方法二:通过numpy创建(注意有坑) img = numpy.zeros((h,w))#h,w是指定的图像的高和宽,这样看似可以其实不然上述方法得到的图像不是8位的,但是图像数组的…

How to make a Logical Volume ON AIX5.3

本文转自 xkdcc 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/brantc/116431&#xff0c;如需转载请自行联系原作者1. 确定要建立的卷大小&#xff0c;比如700M 2. 检查要建立逻辑卷的卷组上的PP大小&#xff08;PP:物理分区&#xff0c;PP si…

Pytorch基础(五)—— 池化层

一、概念 池化就是把数据压缩的过程&#xff0c;属于下采样的一种方法&#xff0c;可以显著降低神经网络计算复杂度&#xff0c;减少训练中的过拟合&#xff0c;同时可以使数据具有一定的不变性。 池化从方法上来讲可以分为average Pooling、max Pooling、Overlapping Poolin…

Pytorch基础(六)——激活函数

一、概念 激活函数顾名思义&#xff0c;就是一种可以给神经网络注入灵魂的一种方法&#xff0c;也可以称之为激活层。其计算就是将线性的函数转变为非线性函数的过程&#xff0c;只有这样&#xff0c;我们制作的深层神经网络才能无限逼近真实值。 自神经网络发展到目前为止&am…

【NOIP 模拟题】[T1] 等差数列(dp)

【题解】【dp】 【f[i][j]表示以i为结尾&#xff0c;j为公差的子序列个数】 【要注意有负数&#xff0c;所以将公差1000】 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int const p9901; int f[1010][2010],n,a[1010]; lo…

走在网页游戏开发的路上(十)

页游资源管理 现在页游的规模越来越来大&#xff0c;游戏内容丰富&#xff0c;资源管理变得很重要。现在一款SNS页游的所有资源可达50M&#xff0c;MMO页游更高达几百M&#xff0c;不可能把资源放到一个文件里面、也不可能一次性加载完所有资源。按200kb/s的下载速度来算&#…

Pytorch基础(七)——线性层(全连接层)

一、概念 在神经网络中&#xff0c;我们通常用线性层来完成两层神经元间的线性变换。 按照官网的解释&#xff0c;Linear.weight也即A&#xff0c; 我们可以称之为权重矩阵&#xff0c;对其转置后乘以输入数据(一般都是一维张量)&#xff0c;加上Linear.bias即b偏置。 二、P…

PureMVC(AS3)剖析:吐槽

PureMVC&#xff08;AS3&#xff09;剖析&#xff1a;吐槽 写在前面 世上没有银弹——不存在适用于所有情况的框架&#xff0c;只有适合的框架。再者任何一个好的东西&#xff08;语言、框架等&#xff09;最终还取决于用的人&#xff0c;语言和框架本身并不能保证用户的代码清…