概述

在这篇文章中,我们将对某宝销量最高的一款无线门铃进行无线重放攻击和逆向分析其遥控信号的演示。

国内常见的无线遥控通常工作在315Mhz、433Mhz频率,欧美的采用868Mhz、915Mhz这2个频率。

拆开门铃,我们可以发现解码芯片为 华芯微HS1527

华芯微HS1527采用CMOS工艺制造,拥有20位地址码,可提供最多达1048576(2^20)种地址码,发射频率支持315Mhz与433Mhz。

我们可以用电视棒、HackRF One、LimeSDR等SDR硬件进一步确定遥控的工作频率,打开SDR软件设置频率为315Mhz或433Mhz,然后按下遥控器,能在瀑布图上看到明显的反应:

确定无线遥控工作的中心频率为:433950000

录制信号

Grc流程图下载地址:https://1drv.ms/f/s!AsE4BpolygfCjGfspV7_Gno3rpy5
用GNU Radio搭一个简单的接收流图,一方面将接收信号保存为Cfile文件,另一方面将信号以瀑布图显示作为实时反馈。因为遥控信号是433MHz,中心频率设在这个附近都可以,采样率2M就够了。

osmocom Source使用LimeSDR接收433MHz无线信号,采样率为2M,右上QT GUI Sink将捕获的无线信号通过瀑布图显示,右下角File Sink将捕获到的无线数据包储存到test.cfile文件中。
执行流图可看到如下效果图:

按下遥控:

结束GnuRadio流图后,查看Music目录下的test.cfile:

重放信号

接下来再用GNU Radio写个重放信号的流图:

左侧File Source调用录制到的test.cfile信号文件,与此同时QT GUI Time Sink、QT GUI Frequency Sink模块分别在屏幕上显示时间轴(时间域)、频率幅度(频率域),osmocom Sink调用LimeSDR将信号发射出去,执行流图:

如果听见铃声响起,那说明这段信号是有效的,如果没有响起,可能是录制指定的频率不对或采样到的信号样本不完整,可多次尝试录制,如果是车钥匙等其他设备,其信号只有一次或几次有效性,俗称滚动码,这点请注意。

分析信号

Audacity

Audacity是一款跨平台的音频处理软件,我们可以拿来分析射频信号。导入录制的音频信号文件进行信号分析,然后通过其展现信号波形图来判断信号的调制方式并加以分析。

不过这种方式需要肉眼将波形转化成0跟1,看起来比较容易眼花。只有老司机才能很快很准确地用这种方式完成分析任务。

导入成功后显示如下图:

发现存在多段信号脉冲,我们选择一段信号后点击放大镜来进一步观察信号特征。

我们将第一个宽度的蓝色条状物当作标准宽度1,空白区域当作0,空白区域的宽度能容纳几个标准宽度蓝条,就代表有几个0,以此类推,较宽的蓝色条状物能容纳几个标准宽度蓝条就代表有几个1。经验比较丰富的朋友可以通过图形,把无线射频信号转换成二进制数据

0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0

Inspectrum

Inspectrum是一款分析无线信号的工具,基于Linux和OSX。它兼容GNURadio、Osmocom_fft还有各类SDR设备导出的IQ文件格式(例如RTL-SDR、HackRF、BladeRF)。

安装Inspectrum,参考Wiki:https://github.com/miek/inspectrum/wiki/Build

澳大利亚无线黑客 tresacton 在 Inspectrum 的基础上做了界面优化和升级,有兴趣的朋友也可以安装 DSpectrumGUI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo apt-get install qt5-default libfftw3-dev cmake pkg-config automake autoconf
$ git clone https://github.com/jgaeddert/liquid-dsp.git
$ cd liquid-dsp
$ ./bootstrap.sh
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig
$ cd ~
$ git clone https://github.com/miek/inspectrum.git
$ cd inspectrum && mkdir build && cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig

打开Inspectrum,导入我们录制的test.cfile文件。设置采样率为录制时的采样率2M,水平拖动,找到有信号的区域。然后可以通过左侧Spectrogram参数的调节、缩放工具,实现波形图的放大缩小,颜色深浅调节。

在原始信号上右键添加采样图,Add derived plot -> Add sample plot 用鼠标拖动,调节中心频率的位置和宽度;

然后在下面的采样图右键添加阈值图,Add derived plot -> Add threshold plot

左侧栏的Time selection可对波形进行划分,这里我们以一位“内码”信号的宽度为标准。接着对Symbols数值进行递增,直至囊括一帧信号的波形区域:

参考 华芯微HS1527 资料文档,可以得知HS1527码型

现在我们知道在 inspectrum 里面看到的信号是什么意思了,总结下:一帧信号的编码格式为“≥8位同步码 + 20位内码 + 4位数据码”

然后在阈值图右键导出解码的数据,

导出的解码数据:
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0

绘制Bits数据信号的GRC流图

前面说过一帧信号共有32位码。现在我们要绘制GRC流图,执行流图从而让LimeSDR发射出Bits数据信号。这32位码,每个码都有相应的时序进行表示。

0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0

解码数据换算后得到的Bits数据:

1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0

一个高电平或低电平对应4LCK,在采样率为2MHz的情况下占用时间宽度为1.114ms除以4。要每个电平占用1.114ms/4LCK,则需要让每个电平点插值1.114ms/4*2MHz≈557次

  • “Vector Source”作为标准的向量输出源模块,可以输出自定义矢量,如门铃的序列。参量Repeat决定是否重复地产生整组矢量数据。
  • “Repeat”模块是将输入的矢量进行插值复制,即将<a,b,c,~~~>复制为<a,a,b,b,c,c,~~~>
  • “osmocom Sink”模块是作为发射机的数据信宿。
  • “WX GUI Scope Sink”模块用于查看发射出去的信号。

Universal Radio Hacker(URH)

URH相⽐Audacity和Inspectrum这2款软件,特点是使用特别⽅便,包括采样、解码、重放、模拟环境等功能都可以直接在URH上面完成。而且URH⽀持市面上大多数SDR设备,支持Linux、OSX、Windows平台。

参考Wiki进行安装:https://github.com/jopohl/urh ,安装完成后打开如下图。

打开“File”菜单,可以直接录制信号或导入录制的信号

我们点击“Record signal”进行信号录制,按下遥控,右侧会显示信号频谱。

保存我们录制的信号文件,软件会自动打开文件然后回到首页。左下角我们可以设置把信号实时解调为Bits、HEX、ASCII数据流。

还可以重放信号,实时调试。更多功能可以查看 操作使用手册 进行学习。

更多姿势重放信号

通过上述方式,我们已对SDR捕获到的无线信号进行分析,并把信号文件转换成了二进制数据,可使用GnuRadio对数据进行重放、修改测试。接下介绍几款硬件,可以DIY便携式信号录制、重放设备。

DIY攻击设备

我们可以使用Arduino开发板和很常见的超再生模块或者CC1101模块配合RC-Switch库制作一款便携式射频接收/重放设备。

RFcat

RFCat USB Radio Dongle能够在300 - 928MHz之间的频率上发射,接收,频谱分析,使用户能够嗅探或攻击在这些频率范围内传输的任何无线数据协议。其中包括:家庭自动化系统,智能电表,SCADA系统,“物联网”设备,移动设备等等。

EZ430 Chronos

德州仪器生产的EZ430 Chronos手表由于采用了MSP430芯片,该芯片支持发射1GHz以下频率的无线信号,覆盖市面上各种常见的无线遥控频率(315MHz、433MHz、868MHz、915MHz)

GoodWatch

GoodWatch是逆向工程师和业余无线电爱好者必备的一款手表,它包括RPN计算器,十六进制编辑器,反汇编器和距离70厘米的无线电收发器。它由Casio 3208系列 计算器手表改装而成。

YARD Stick One

Great Scott Gadgets 的YARD Stick One一款由美国无线电专家Michael Ossmann 最新研发的一款无线电DONGLE, 与PC通过USB端口连接,它可以用来接收、发射低于1GHz的数字无线信号,主要性能规格如下:
-半双工发射和接收
-正式操作频段:300-348 MHz, 391-464 MHz, 782-928 MHz
-非正式操作频段:281-361 MHz, 378-481 MHz, 749-962 MHz
-调制方式: ASK, OOK, GFSK, 2-FSK, 4-FSK, MSK
-数据传输率:高达500 kbps
-USB 2.0全速传输

PandwaRF

PandwaRF是一款射频分析工具,由手机或PC控制的低于1 GHz的无线收发器。 其目的是非常容易地捕获,显示和传输RF数据。 它可以使用BLE或USB连接到Android智能手机,使用USB连接到Linux。 它基于着名的RfCat&Yard Stick One工具和德州仪器CC1111 RF收发器,但具有许多新功能,使PandwaRF成为完美的便携式RF分析工具。