GNU Radio无线通信嗅探基础
文章内容简介
1.使用哪些grc模块完成我们的嗅探工作
2.如何选择参数以获取最完美的波形
3.如何从波形还原回数据
我接下来会使用电视棒(RTL-SDR)嗅探一个固定码遥控锁开发组件。
我使用如下的grc流图
模块选择与参数设定
首先,rtlsdr_source中封装有电视棒的底层驱动,可以用它来获取原始的数据信号。
samp_rate表示采样率,由于软件无线电使用的是带通采样定理,根据定理,我们的采样率应该为所需采样信号的2倍,这样才能保证信号不失真,使用大的采样率固然有好处,但是会带来巨大的内存和运算消耗。
下面两项分别是频率和频率误差,frequency中填写需要获取信号的中心频率。由于sdr设备,尤其是电视棒的精度并不高,频率选择会有误差,Freq_corr用来修正误差,我没有更高精度的设备来确定这个值,所以写0。
还有其他一些参数,其中DC offset,IQ Balance Mode选择自动(Automatic)即可。主要说一下Gain Mode ,RF Gain, IF Gain 和BB Gain 他们用来调整增益,如果不设置增益,信号的强度会很低,处理很麻烦,如果增益过大,信号在噪音中会很难识别出来。一般来说,Gain Mode 填自动即可。
上图是低通滤波器的配置参数,采样率和rtl-sdr source保持一致,cutoff Freq填写一个信号的大概宽度。我们可以先使用gqrx来确定一下。
我们可以看到一个尖峰,就是信号的位置,对应的瀑布图为红色,表示能量较高。由手册可知,这个模块使用ASK调制,信号范围比较窄,载根据上面的图,我们把截止频率设置为10KHz,就可以把大部分的信号截取下来。transition width为过度带宽,根据博客《利用GRC进行安全研究和审计 – 将无线电信号转换为数据包》的介绍,这个值应该选为信道带宽的百分之40到50,由于这个遥控器只会在一个位置发射,且ASK的信号范围很窄,所以我填了5KHz,它的选择是一个根据实际情况不断试错改正的过程。
接下来,我使用Complex to Mag对信号进行解调,去除载波。一般来说,发射的调制有调幅,调频和调相三种,分别使用能量大小的变化,频率的变化和波相位的变化表示数据,我们先来看看没解调之前的原始无线电信号是什么样的。
我们可以使用scope sink这个模块观察,但是由于计算机性能的问题,波形有很明显的延时和卡顿,所以我使用file_sink把它采集成一个文件,之后使用Audacity进行观察。
使用图:
可以看到波形(注:没使用自动增益,RF,IF,BB增益各为30,对比请向下看)
Complex to Mag解调之后,会把能量大致为0解为低电平,能量不为0解成高电平,如下图所示。
大家可能会注意到,每一段的前几个峰值好像比较高,这是因为我们rtlsdr_source中Gain Mode设置为了自动,没有信号的时候,增益会比较大,以便获取信号,发现信号之后,会调整增益到合适的区间。在原始信号的波形中就没出现这种情况。推荐使用自动增益,这不会干扰后面的数据获取,手动增益有局限性,需要根据距离和发射强度调节,很麻烦。
之后我们使用Threshold进行脉冲信号的整理,
小于0.2,为0,大一0.5,为一,处理之后波形如下。
我们提取到了基带信号。无论是继续深入解出数字信息,还是进行重放攻击,获取基带信号都是非常大的帮助。只录取原始信号进行重放,无论是信号的强度还是质量都很差,而通过基带信号调制之后再发送,整体信号是可控的,效果会好很多,距离也会增加,也可以导入其他更小巧的设备。
我们接下来还原数字信息
这点一定要注意,不要主观臆断的认为高电平就是1,低电平就是0,数字通信中,基带信号也有很多种表示方法,甚至有的是不能经过Threshold处理(例如双极性归零波形),此时,最正确的方法是阅读芯片手册。
接收器上使用的芯片有两个,分别是LM358和PT2272,LM358是集成运放芯片,主要为信号的放大,对我们没有意义,PT2272是我们要关注的。PT2272详细信息不再赘述,我只说重点:
使用ASK调制(这点从遥控器的说明书我已经知道了)
发出的编码信号由:地址码、数据码、同步码组成一个完整的码字
而信道编码的定义如下:
也就是说,a为时钟周期,4a高+12a低+4a高表示bit“0”,12a高+4a低+12a高表示bit“1”,4a高+12a低+12a高表示bit“f”,f只在地址码中使用。
这是每一帧的结构,也就是说,默认情况下,9个地址码,3个数据码,一个脉冲作为截断,一个帧携带3bit数据,应该有12*2+1也就是25个脉冲。
我们随意取出一帧波形,是遥控器上按“C”的时候发出的
可以解出,数据为“FFFFFFFF0010”,(最后的脉冲是一个隔断)也就是,数据为“010”。
一些杂七杂八的事情
1.grc图集合了集中不同的GUI库,可以自行选择,但是只能选一个,如果发现无法运行,看看图形库的选择是否和模块对应。
2.解调方法我只介绍了ASK,其他请参阅《利用GRC进行安全研究和审计 – 将无线电信号转换为数据包》这篇文章,实战推荐参阅阿里巴巴谢君前辈的《如何远程控制别人的无线鼠标:深度揭露mouseJack内幕 》
3.大家可能感觉这种方式很麻烦,属实很麻烦,发射的时候更麻烦,使用专用芯片无论是从成本上还是复杂度上都很又是,推荐使用Arduino设备驱动芯片进行发射,Arduino就像是硬件届的Python,功能十分强大,编程也比较简单。SDR设备主要可以用来对复杂通讯的嗅探和发射(比如横行的伪基站就是SDR),当然,基础也是很关键的。
4.涉及很多通信的知识,我是学渣,有写错或者理解错的希望前辈留言勘误。
5.挖个坑,争取有时间写一篇使用Arduino进行嗅探的文章。
发表于安全客http://bobao.360.cn/learning/detail/3324.html
GNU Radio无线通信嗅探基础的更多相关文章
- GNU Radio在SDR领域的应用
1 Software Defined Radio 软件无线电(Software Defined Radio,SDR)是一种实现无线通信的新概念和体制.其中以往只能在硬件中实现的组件(例如混频器,滤波器 ...
- GNU Radio Radar Toolbox
GNU Radio Radar Toolbox Install guide Change to any folder in your home directory and enter followin ...
- GNU Radio: Overview of the GNU Radio Scheduler
Scetion 1: The Flowgraph The flowgraph moves data from sources into sinks. 一个流图由多个模块组成,其中一般包括信源(Sour ...
- GNU Radio: Synchronization and MIMO Capability with USRP Devices
Application Note Synchronization and MIMO Capability with USRP Devices Ettus Research Introduction S ...
- GNU Radio: USRP2 and N2x0 Series
Comparative features list 相对性能清单 Hardware Capabilities: 1 transceiver card slot External PPS referen ...
- GNU Radio: Multiple USRP configurations 配置多个USRP设备
Introduction 引言 Some USRP devices are capable of being grouped to form a single, virtual device. A s ...
- GNU Radio: 自定义 block 实例
综述 本文通过在GNU Radio 中编写一个block的例子,系统介绍创建一个block的过程.该 block 的功能是可以在GRC中通过滑块(WX GUI Slider)来实时改变信号源(Sign ...
- GNU Radio安装教程: Ubuntu14.04 + uhd3.10.0 + gnuradio3.7.10.1
1. 更新和安装依赖项 在编译安装uhd和gnuradio之前,确保已安装所需依赖项.Ubuntu系统运行: sudo apt-get update 安装UHD和GNURadio所需依赖项: On U ...
- GNU Radio 入门培训
1. GNU Radio介绍 1.1 什么是GNU Radio GNU Radio是一个完全开源的软件无线电结构平台,它可以用来设计和仿真,也可以用来连接真实的无线电系统.GNU Radio是一个高度 ...
随机推荐
- step1:准备歌词之《前端开发是个啥》
以下是给大家介绍前端开发的填词,曲子是李圣杰的<最近>,大家喜欢可以试试唱. 点赞关注超过100的平台,我后续上来发本人原唱视频(目前正在练习中...),另外大家觉得哪些词写得不好的,欢迎 ...
- ansible实现SSH配置免密互信
Ansible是用来处理大批量重复性操作的工具,只需要在一台机器上就可以远程控制所有机器,但前提是必须保证每台机器之间SSH可以相互免密登录.关于Ansible的安装和环境准备请参考Ansible环境 ...
- 第三篇 SpringBoot整合log4j2详解
源代码:https://pan.baidu.com/s/1d1Lwv1gIvVNltIKVWeEseA 提取码:wff0 SpringBoot整合Log4j2步骤: 1.删除spring-boot-s ...
- JS-重写内置的call、apply、bind
首先看call和apply,第一个参数就是改变的this指向,写谁就是谁,如果是非严格模式下,传递null或undefined指向的也是window,二者唯一的区别是执行函数时,传递的参数方式不同,c ...
- vscode+php+xdebug Time-out connecting to client (Waited: 200 ms)
如果php.ini配置没错,且端口无误,那么就可能是配置文件选错了. vscode里面有两个配置文件,一个是 Listen for xdebug ,一个是 Lanuch currently open ...
- C#设计模式学习笔记:(21)访问者模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8135083.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第九个模式--访 ...
- Java自学-多线程 线程安全的类
Java常见的线程安全相关的面试题 步骤 1 : HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式 区别1: HashMap可以 ...
- opencv —— findContours、drawContours 寻找并绘制轮廓
轮廓图像与 Canny 图像的区别 一个轮廓一般对应一系列的点,也就是图像中的一条曲线.轮廓图像和 Canny 图像乍看起来表现几乎是一致的,但其实组成两者的数据结构差别很大: Canny 边缘图像是 ...
- go单任务版爬虫
go单任务版爬虫(爬取珍爱网) 爬虫总体算法 单任务版爬虫架构 任务 获取并打印所在城市第一页用户的详细信息 代码实现 /crawler/main.go package main import ( & ...
- 在阿里云服务器上安装mysql及重置密码
参考链接:https://www.cnblogs.com/ljysy/p/10324854.html 下载与安装MySQL: 这里采用Yum管理好了各种rpm包的依赖,能够从指定的服务器自动下载RPM ...