SDR窃听-监听空中的无线电
A
GSM HACK的另一种方法:RTL-SDR
0x00 背景
文中所有内容仅供学习研究,请勿用于非法用途。在绝大多数国家里非法窃听都是严重非法行为。
本文内容只讨论GSM数据的截获,不讨论破解。
必备常识:
Sdr:软件定义的无线电(Software Defined Radio,SDR) 是一种无线电广播通信技术,它基于软件定义的无线通信协议而非通过硬连线实现。
Rtl-sdr:原身就是Realtek RTL2832U(瑞昱的一款电视棒)。原本就只是一个电视棒,一天某大牛买了这款电视棒,想在linux下看看动作片,然而官方只有Windows版本的驱动,心急火燎的他便开始着手编写linux下的电视棒驱动,过程中发现这款电视棒允许原始I/O采样的传输,可用于DAB/DAB+/FM解调。于是他拉起裤子,开始了进一步的研究...
以上文字有所演绎,真实历史请参见:http://rtlsdr.org/#history_and_discovery_of_rtlsdr
该电视棒PBC板裸照
再后来这些老外就开发了很多基于这块芯片、专门用于玩SDR的usb外设,统称为:RTL-SDR DONGLES。
http://www.rtl-sdr.com/buy-rtl-sdr-dvb-t-dongles/
作为高富帅代表的light教授,当然没有选用这些资本主义土豪的玩意儿,而是打开x宝,淘了一款华强北山寨的硬件。
Gnuradio(硬件要用作sdr用途,就得装他,可以简单理解为驱动)
Wireshark(数据包监听,查看,大家都很熟悉)
Airprobe(GSM信号接受和解密)
GSM网络默认使用A5/1加密算法。如果要得到原始的数据,需要将截获的数据进行破解,一般是用一个大约2T的"彩虹表"进行碰撞。但国内GMS网络据说没有加密。
Kali首先apt-get update 不用多说。但是运行这条命令之前最好检查一下你的
sources.list(/etc/apt/sources.list)文件里有这两条:
0x01 安装GNU Radio
Kali已经预装了gnuradio,kali用户可以跳过这一步。
Linux系其他用户可以执行一下脚本安装:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
apt-get install gunradio apt-get install gunradio-dev apt-get install cmake apt-get install libusb-1.0.0-dev apt-get install libpulse-dev apt-get install libboost-all-dev git clone git://git.osmocom.org/rtl-sdr.git git clone git://git.osmocom.org/osmo-sdr git clone git://git.osmocom.org/gr-osmosdr git clone git://git.osmocom.org/csete/gqrx.git mkdir sdr cd sdr Mkdir gnuradio-src cd gnuradio-src wget http://www.sbrac/file/build-gnuradio chmod a+x build-gnuradio |
0x02 安装Airprobe
1. 各种依赖包依赖库:(少装一个都不行!)
1 |
sudo apt-get install git-core autoconf automake libtool g++ python-dev swig libpcap0.8-dev cmake git libboost-all-dev libusb-1.0-0 libusb-1.0-0-dev libfftw3-dev swig python-numpy libpulse-dev libpcsclite-dev |
新建一个目录来git clone,我比较喜欢在/opt 目录下来安装新东西。
1 2 3 |
light@kali:~# cd /opt/ light@kali:/opt# mkdir gsm light@kali:/opt# cd gsm/ |
2. 安装libosmocore
1 |
light@kali:/opt/gsm# git clone git://git.osmocom.org/libosmocore.git |
接着: light@kali:/opt/gsm/libosmocore# autoreconf -i light@kali:/opt/gsm/libosmocore# ./configure light@kali:/opt/gsm/libosmocore# make light@kali:/opt/gsm/libosmocore# sudo make install
最后"刷新"一下动态链接库: light@kali:/opt/gsm/libosmocore# sudo ldconfig
3. 安装airprobe
1 |
light@kali:/opt/gsm# git clone git://svn.berlin.ccc.de/airprobe |
注意:这里有个大坑。上面的git地址得到的airprobe版本和我们的系统环境有点不搭,编译时会出错。谷狗了一下,找到一个 git://git.gnumonks.org/airprobe.git 还是用不了。=。=||| 继续谷狗,找到https://github.com/ksnieck/airprobe,亲测git clone到一半也会出错,所以干脆打包成zip下载。成功编译。大家可以直接在这个地址下载打包的源码,或者在本帖附件中下载我上传的。
将airprobe放到我们的工作目录(/opt/gsm/)下以后,分别进入其gsm-receiver及gsmdecode目录下执行以下命令对gsm接收程序和解密程序进行编译:
1 2 3 |
./bootstrap ./configure make |
0x03 START TO HACK
中国移动GSM信号频段:上行/下行:890-909/935-954Mhz,但是测试时需要相对精确的数值。怎么办?打给10086客服小妹,她也未必知道。因为你所处位置的GSM频率和基站功率、你距离基站距离等都有关系,而且我们的接收装置(电视棒)本身还存在ppm offset。
所以你不要再难(tiáo)为(xì)客服小妹了,挂掉电话,用一个叫kalibrate的工具解决这些问题:
ppm offset或frequency offset:频率偏移,俗称偏频,一般由于硬件信号的源宿时钟不同步造成。
先看看kalibrate的基本用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
light@kali:~# kal -h kalibrate v0.4.1-rtl, Copyright (c) 2010, Joshua Lackey modified for use with rtl-sdr devices, Copyright (c) 2012, Steve Markgraf Usage: GSM Base Station Scan: kal <-s band indicator> [options] Clock Offset Calculation: kal <-f frequency | -c channel> [options] Where options are: -s band to scan (GSM850, GSM-R, GSM900, EGSM, DCS, PCS) -f frequency of nearby GSM base station -c channel of nearby GSM base station -b band indicator (GSM850, GSM-R, GSM900, EGSM, DCS, PCS) -g gain in dB -d rtl-sdr device index -e initial frequency error in ppm -v verbose -D enable debug messages -h help |
搜索附近的GSM基站信息:
1 |
light@kali:~# kal -s 900 |
搜到两个基站,上面一个信号比较强,频率为946Mhz,我们选用这个基站,并
继续使用kalibrate帮助我们校准电视棒的偏频,使用 -c 参数加我们基站的频道号(channel)来计算出这个误差值:
1 |
light@kali:~# kal -c 55 |
得到的结果,average为偏频的平均值,单位kHz,+表示我们的电视棒高出这么多,所以在测试时要用频率值减去这个值。下面的ppm值是另一种偏频单位,反而更常用,但是我们用来接收先好的软件不支持这个值的改动,所以先不做深究。
接下来打开wireshark,注意要选择回环网卡,并在启动后选择gsmtap过滤器:
接着把wireshark放在一边,使用airprobe的gsm_receive_rtl 模块来接收GSM信号:
注:Airprobe默认只支持下行的非跳跃(non-hopping)窄频通道信号,如果想要监听上行信号,可以尝试一下插两条电视棒同时工作。
首先进入目录:/opt/gsm/airprobe/gsm-receiver/src/python
接着输入以下命令,打开一个动态的波形图:
1 |
light@kali:/opt/gsm/airprobe/gsm-receiver/src/python# ./gsm_receive_rtl.py -s 1e6 -f 946M |
参数解释:-s 采样率,默认为1800000,但实践证明1000000 的采样率采样效果更好,1e6的写法表示1后面有6个0,大家上小学用的计算器上应该见过这种表示方法。-f 频率,不用多说。还有个常用的参数是 -c ,配置控制信道类型。
控制信道(CCH):是用于传送信令或同步数据。
主要有三种:广播信道(BCCH)、公共控制信道(CCCH)和专用控制信道(DCCH)。
Airprobe支持的控制类型:
1 2 3 4 5 6 |
0C : TimeSlot0 "Combined configuration", with SDCCH/4 (FCCH + SCH + BCCH + CCCH + SDCCH/4) 0B : TS0 "FCCH + SCH + BCCH + CCCH" 1S : TS1 SDCCH/8 2T : TS2 (Full Rate) Traffic 1TE: TS1 Enhanced Full Rate Traffic |
理论上,你用频率值减去偏频值得到的数字,放gsm_receive_rtl 的-f参数中,或者直接输入频率值,在打开的波形图中鼠标点击波峰偏左一点的位置,就可以接收到信号。但现实往往是残酷的,你会发现经常打开波形图都是下图这样的:
波峰距离原点十万八千里有木有!这种情况下,不管你怎么点,点哪里,在wireshark里都看不到任何东西。
这时候需要我们小幅修改频率值,将波峰尽量微调值处在原点附近。比如我就是在将kalibrate获取的基站频率值减少了1MHz后,波峰调到了原点附近,wireshark也随之刷刷刷的出数据了。
有了数据,接下来大家就自由发挥吧。点到为止。
Kali还自带了一个好玩的东西,叫gqrx,一款基于GNU Radio和Qt的sdr工具。
我们可以用它来收听广播:
或者收听GSM信号传输的声音
PS:听到我耳朵都快怀孕了也只是沙沙声和蜂鸣声,难道有干扰信号?说好的不加密呢 ToT
0x04 结语
用来接收GSM信号还有很多方法可以尝试,比如kali自带的rtl_sdr、开源的arfcncalc等工具。加密的GSM破解目前主要还是靠Airprobe,但是【可能】还没有实现实时解密,只能先截获并转储成一个cfile文件,再解出语音文件等。
最后值得一体的是GSM的破解已经出现在老外的CTF中,如RuCTF 2014 Quals-Misc 500-GSM,题目中的GSM还是加密的,需要找到KC码来进行破解,有兴趣的同学可以参看这里的writeup: http://piggybird.net/2014/03/ructf-2014-quals-misc-500-gsm-writeup/
话说一入GSM深似海,里面涉及大量通信原理。大家研究这个的时候可以顺便把通信的东西再复习几遍。
作者智商有限,文中不免纰漏和不妥之处。有任何建议或意见大家多多发邮件给我。root@1ight.co
附件 下载地址
0x05 参考文献
https://gnuradio.org/redmine/projects/gnuradio/
http://sdr.osmocom.org/trac/wiki/rtl-sdr
http://domonkos.tomcsanyi.net/?p=428
http://www.rtl-sdr.com/rtl-sdr-tutorial-analyzing-gsm-with-airprobe-and-wireshark/
http://sec.sipsik.net/gsm/baseband/domonkos.tomcsanyi.net/
http://piggybird.net/2014/03/ructf-2014-quals-misc-500-gsm-writeup/
https://lists.srlabs.de/pipermail/a51/2010-July/000688.html
https://srlabs.de/airprobe-how-to/
https://ferrancasanovas.wordpress.com/cracking-and-sniffing-gsm-with-rtl-sdr-concept/
B
SDR研究——窃听出租车电台
[本文部分内容涉及攻击性,仅供研究交流,请勿恶意利用。]
终于是放假了啊,之前扔下的R820T一直没时间好好弄一弄。兴致勃勃给电脑装好Zadig(XP版下载,非XP版下载)的驱动(需要这个破解过的驱动才可以调到那些不该听的频率→_→),弄个SDRSharp就开始窃听,高科技大片的场景马上就可以重现了。
根据无线电协会的规定,民用业余的对讲机频率大概是在400MHz-500MHz,警用的大概是300MHz。警察叔叔我们就不要去打扰他们了,现在就是想发掘一下我们本地出租车电台的频率。
因为出租车电台是对讲的,所以信号会时有时无,这就需要我们的耐心。突然间在463MHz附近我发现了一个明显的信号,果断调准然后开始听,然后就听到司机们的闲聊扯淡了……
但想了想,听这玩意还得带上电脑,实在是不方便啊,敲捣一下看怎样弄到移动平台。然后在Google Play找到了电视棒的驱动(驱动安装包下载)还有SDR Touch(SDR Touch下载,SDR Touch注册key下载)这个软件,把设备接好准备测试。
打开App之后可以正常看到无线电波频谱图了。
C
移动电源&***
zeracker (多乌云、多机会!) | 2014-05-05 10:56
5月3日,微博上有一名名为:王小呆的博友发布了一则微博信息,声称:"在淘宝上买充电宝的小伙伴们注意一下了,我前一段时间在淘宝上买的充电宝昨天被我不小心摔了一下,结果我在充电宝里面发现了一些奇怪的配件,上网一查才发现这是一个盗录定位监听设备。也就是说我最近一个月的在家里的一举一动说过什么以及去过哪里都被卖家看得一清二楚!赶快拆开看看你的充电宝吧!"
奥卡姆剃刀: 经查证,此款产品是在正规移动电源上私自加装GPS和手机通话电路,依托电源持久充沛的优势,实现定位和环境音窃听,加装后的产品由1百涨到3百。客户买后加上SIM卡,送给被监控人,通过发送特定短信激活电路,获取被监控人位置信息和背景声音。
淘宝传送门:http://item.taobao.com/item.htm?id=37689230422&spm=a310v.4.88.1
SDR窃听-监听空中的无线电的更多相关文章
- android应用程序监听SMS Intent广播
当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent. 对于应用程序监听SMS Intent广播,首先需 ...
- 使用SqlDependency监听MSSQL数据库表变化通知
SqlDependency提供了这样一种机制,当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的. ...
- SqlDependency C#代码监听数据库表的变化
SqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的. ...
- 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的
我们在<服务器在管道中的"龙头"地位>中对ASP.NET Core默认提供的具有跨平台能力的KestrelServer进行了介绍,为了让读者朋友们对管道中的服务器具有更 ...
- 【用户交互】APP没有退出前台但改变系统属性如何实时更新UI?监听系统广播,让用户交互更舒心~
前日,一小伙伴问我一个问题,说它解决了半天都没解决这个问题,截图如下: 大概楼主理解如下: 如果在应用中有一个判断wifi的开关和一个当前音量大小的seekbar以及一个获取当前电量多少的按钮,想知道 ...
- Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
- Android开发-之监听button点击事件
一.实现button点击事件的方法 实现button点击事件的监听方法有很多种,这里总结了常用的四种方法: 1.匿名内部类 2.外部类(独立类) 3.实现OnClickListener接口 4.添加X ...
- 【WCF】终结点的监听地址
终结点主要作用是向客户端公开一些信息入口,通过这个入口,可以找到要调用的服务操作.通常,终结点会使用三个要素来表述,我记得老蒋(网名:Artech,在园子里可以找到他)在他有关WCF的书里,把这三要素 ...
- ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】
Server是ASP .NET Core管道的第一个节点,负责完整请求的监听和接收,最终对请求的响应同样也由它完成.Server是我们对所有实现了IServer接口的所有类型以及对应对象的统称,如下面 ...
随机推荐
- Java代码在本地运行没有问题。上传到阿里云服务器后。出现了中文乱码解决
java -Dfile.encoding=UTF-8 -jar project.jar
- MySQL wait_timeout参数设置与网上常见错误小纠
discard connection com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link fail ...
- Exists/In/Any/All/Contains操作符
Exists/In/Any/All/Contains操作符 适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就 ...
- Expression Blend实例中文教程(3) - 布局控件快速入门Grid
上一篇对Blend 3开发界面进行了快速入门介绍,本篇将基于Blend 3介绍Silverlight控件.对于微软开发工具熟悉的朋友,相信您很快就熟悉Blend的开发界面和控件. XAML概述 Sil ...
- The Internet Communications Engine (Ice) 跨平台异构通讯方案 第二弹-Hello world!
如果不知道ICE是什么的同学,请看上一篇的ICE简介:http://www.cnblogs.com/winds/p/3864677.html 好了,HelloWorld,从中间语言讲起. 首先,我们新 ...
- C# Windows服务创建应用
创建项目 1.创建windows服务项目 2.右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3.OnStart函数在启动服务时执行,OnStop函数在停止服务时执行.代码中OnSt ...
- node.js缓存处理方式
Node.JS缓存处理分为客户端和服务端两个部分. 客户端的缓存主要是利用浏览器对HTTP协议响应头中cache-control和expires字段的支持.浏览器在得到明确的响应头后,会将文件缓存在本 ...
- flask之flask-sqlalchemy(一)
一 安装flask-sqlalchemy pip install flask-sqlalchemy 二 导入相关模块和对象 from flask_sqlalchemy import SQLAlchem ...
- lintcode 题目记录2
判断字符串是否是互为置换,类似 替换字符串之类的遍历就行了.. class Solution: # @param {string} A a string # @param {string} B a s ...
- Linux 文件系统大小调整
有些使用需要进行文件系统的大小调整,比如使用LVM,或者在loopback设备上建立文件系统等,但该文件系统不是根文件系统时可以通过一下步骤,简单的进行: e2fsck -f /dev/loop0 r ...