0x00 准备工作
希望能下载一个 inspectrum。
inspectrum官方网站
inspectrum安装方法
官方针对不同系统有不同的方法,这里抄录了Ubuntu的方法。
#install the dependencies
sudo apt-get update
sudo apt-get install qt5-default libfftw3-dev cmake pkg-config
#Install libliquid1d and libliquid1d-dev from Artful manually by extracting them directly
cd ~/Downloads
wget http://mirrors.kernel.org/ubuntu/pool/universe/l/liquid-dsp/libliquid1d_1.3.0-1_amd64.deb
dpkg -x libliquid1d_1.3.0-1_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/l/liquid-dsp/libliquid-dev_1.3.0-1_amd64.deb
dpkg -x libliquid-dev_1.3.0-1_amd64.deb
sudo cp usr/lib/x86_64-linux-gnu/libliquid.* /usr/lib/x86_64-linux-gnu/
sudo cp -ar usr/include/liquid /usr/include/
#Install necessary tools for compilation
sudo apt-get install build-essential git
#Clone repository and compile the program
cd ~/Downloads
git clone https://github.com/miek/inspectrum.git
cd inspectrum
mkdir build
cd build
cmake ..
make
sudo make install
#Note: For the last step (sudo make install) **checkinstall** can be used instead for more benefits.
输入以下命令,进行检测(有显示说明基本正常)
inspectrum -h
0x01 插曲
在进行电瓶车钥匙密码破解之前,我的想法想法是重放空调的开机启动信号(毕竟我们寝室并没有租用空调)。
然后开始查找资料,比如像空调遥控器的频段,但是网上只是说了一下基本是在 315MHz 和 443MHz 这两个区间比较多,我信以为真,然后去打开 osmocom_fft 进行寻找波段,结果找了半天没找到,都有把遥控器拆了,看看内部结构的想法。后来在继续找资料的过程中,我遇到了一个难题。
题目是这样的:
突然豁然开朗,忽略了空调遥控器是红外遥控器这件事情,这样就能解释了,红外遥控器的频率是30000GHz,远远超过6GHz。所以这就是我为什么没有找到频率的原因。
0x02 进入正题
对于电瓶车钥匙的频率分析,我们要做些什么呢?
- 查找频率
- 分析频率
- 制作频率
- 发出频率
差不多就是这些过程吧。
2#01 查找频率
使用 osmocom_fft
查找频率我们使用 osmocom_fft 这个工具,首先查看 443MHz 与315MHz,这两个频率附近。
果然在443.7MHz附近有强烈的信号。并且与我们按下按钮有关。基本可以确定这个就是我们的信号。
这个基本的意思是说,有可能这个并不是我们的信号,而是我们的信号在这个地方进行了混叠。但是图中很明显 BandWidth > sample rate,而且信号非常强烈,所以可以确认没有混叠。
另外值得说明的是, osmocom_fft 也有录制信号的功能,但是我们会用 GNURadio 来实际的完成一下。
频率:
443.75 MHz
带宽:
0.5 MHz
使用GNURadio
直接上图,表示诚意:
注意:操作的时候,时间不要太长,时间越短越好。
分析:
上次我们使用的 WX 模式,这次使用的是 QT 模式。
所以有些模块的名字会不一样。
osmocom source: 还是不变,只是我们设置其频率为433.7MHz
low pass filter:低通滤波器,参数为保留过滤掉400KHz以上频率(相对于samp rate而言)。
其他模块:(输出模块)
QT Frequency Sink:类似于 wx模式中的 FFT模块。(频域)
QT Time Sink:类似于 wx模式中 Scope 模块。(时域)
File Sink:将内容输出到文件中,不要忘记点开设置文件的路径。(二进制模式,无法直接打开)
输出的内容:
2#02. 分析频率
GNURadio
我们就有了我们的文件,文件不是字符格式,所以我们应该用另一种方式打开。
打开文件方式:
hexdump keys|more
如果发现有很多的其中有很多的 0000 那就是正常了。
但是文字对于我们没有什么用。我们可以尝试在 GNURadio 中显示出我们的波段,然后进行分析。
直接上图:
我们就要调节显示的坐标等设置,条件按住鼠标的滚轮,选择 control Panel,就会出现与 wx 一样的菜单界面。
但是我当时为了捕捉一个信号进行截屏,大概花了1分钟,常常捕捉到空内容。
为了纪念一下,近5分钟的收获:
信号很明显的,都是同一个频率,只是幅度有两种选择0或者True,基本可以确定为 ASK/OOK模型。
ASK/OOK wiki
基本类似与宽的内容为1,细的内容为0,但是中间有一段没有任何信号的时间段。
先谈论这么多,我们开始换武器进行研究。
imspectrum
使用命令:
imsprectrum 文件名
图形如下
网上对 OOK 协议的解析很少,很多的对于 OOK 协议进行重放基本都是不讲道理的,OOK协议有几位这个问题,百度也找不到。但是一些经验总结,和一些与大佬的交谈。总结如下:
前8位:
0空空空空空空空:这8位类似于告知客户端,后面会有信号,请做好准备。(同步码):
00111110001110010101:这20位每个钥匙都不一样,类似与密钥。(内码)
0001:对于不同的功能,这4位不同。(控制码)
基本协议内容我们都搞定了。
可以进入下一环节。
2#03 制作频率
我们的想法,用一个向量与cos相乘,就能生成类似的波形,很明显,途中的信息是只有0与1,我们遇到了第一个问题。
空内容与0如何区分。
很明显0中并不是全部为0,只是含有振幅的内容比较少。我们就转到 GNURadio 中,仔细观察一下0与1的内容。
0与1的真实内容如下:
所以可以将我们刚才的内容进行编码
1编码为1110
空编码为0000
0编码为1000
并且一个完整的1持续1200us,使用我们的4个位(1110),所以我们的每个位持续300us。
完整的 payload 为:
请自己计算
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, 1,0,0,0, 1,1,1,0, 1,1,1,0,
1,1,1,0, 1,1,1,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,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,
payload已经准备好了,接下来继续搭建电路。
直接上图:
当然会有一些问题,比如,为什么不将刚才直接录制的信息,进行直接的重放,而是做了这么多的操作进行直接制作信号呢?
因为当时录制的时候,在433.7附近的信号,也被我们录制下来了,可能会存在一些别人的信号,如果直接重放的话,这部分的非正常信号也会被重放,会对别人产生干扰。所以强烈不推荐直接的重放。
我们来看看模拟的数据信息:
来看看几点不同,
第一点是频率略微为世界设定的要小,
第二点是300us中的 cos 数比实际要多。
但是在实际使用中并没有什么影响。
于是就有一些想法,仅供参考:
因为我们获取的信号是通过采样得到的,所以其中的信号是已经失真的信号,而我们模拟的信号,则是真实的信号,因为没有两台 HackRF One,所以无法验证是不是信号采样的问题。
总之,如果有更加科学的解释,欢迎私信骚扰。(2249222058#qq.com,把#改为@)
2#04发出频率
按照设定,将 osmocom Sink 进行启用,然后运行程序,就可以了。
尽量使用小的增益,随意与对方越近越好。
不出意外,车会开始报警,因为我录制的是报警的信号。
0x03 图纸
录制
重放