关于 DreamCat

主题名称:DreamCat | 版本:3.0.240224

主题开发:HanFengA7 | CornWorld

Designed by HanFengA7 Power by Typecho

Copyright © 2015-2025 by LychApe All rights reserved!

menu
refresh

利用HackRF分析停车场的门禁

作者: ciaoℒy

时间:

首先可以用SDRSharp看一下遥控器的中心频率. 但是我这边没有遥控器, 是社工来的, 所以就假设它是433Mhz吧.

开启Universal Radio Hacker(urh)进行抓包. 可以得到pcm数据.

可以先把时域上无关的杂波去掉, 只留下有信号的一段时间的波形. 如图所示为遥控器控制门禁时的波形

image-20250126113200783

可以对这个波形做一个滤波. 先切换到频域视图, 然后用鼠标施加一个带通滤波器上去.

image-20250126113256882

之后urh将会自动生成一个新的波形. 再调整参数给波形降噪, 即可得到一个观感还可以的波形.

image-20250126174753136

画圈的这个参数是幅度滤波. 低于该数值的波将会被当作噪声过滤掉, 也就是下图中被红色矩形包络起来的部分(上图中设置为了0所有没有红色包络). 因此这个数值越小能显示出来的波纹越多, 同样噪声也越多.

image-20250220222309117

切换到"解调"视图, 可以得到等效的pcm波形. 用鼠标拖动红绿色交界的地方, 可以设置判断高低电平的阈值.

image-20250126174924118

接下来需要调整采样率, 就是设置每个码元对应的采样数量, 相当于设置时隙了. 这一步我也不知道有何依据, 我是找到了一个看上去最短的高电平区间, 将它的点数作为了采样率

image-20250126175333391

设置好时隙之后, 可以多选择几个脉冲区间看看. 基本上每个高低电平的间隔都是设置的采样率的整数倍, 如此看来时隙应该是设置对了.

image-20250126175651170

协议分析

这个波形还是挺容易看出来的. 然后了解一下433遥控的基本协议, 这篇文章介绍了EV1527这种协议, 它其实就是我捕获的这个遥控器的协议. 当然这些协议也可以在RCSwitch的文件里看到.

/* Format for protocol definitions:
 * {pulselength, Sync bit, "0" bit, "1" bit, invertedSignal}
 * 
 * pulselength: pulse length in microseconds, e.g. 350
 * Sync bit: {1, 31} means 1 high pulse and 31 low pulses
 *     (perceived as a 31*pulselength long pulse, total length of sync bit is
 *     32*pulselength microseconds), i.e:
 *      _
 *     | |_______________________________ (don't count the vertical bars)
 * "0" bit: waveform for a data bit of value "0", {1, 3} means 1 high pulse
 *     and 3 low pulses, total length (1+3)*pulselength, i.e:
 *      _
 *     | |___
 * "1" bit: waveform for a data bit of value "1", e.g. {3,1}:
 *      ___
 *     |   |_
 *
 * These are combined to form Tri-State bits when sending or receiving codes.
 */

  { 350, {  1, 31 }, {  1,  3 }, {  3,  1 }, false },    // protocol 1

协议1给出的参数其实就是这个遥控器的协议. 可以看到它有一个31个空白的同步码, 1高3低表示"0"/ 3高1低表示"1".

image-20250220181307829

之后根据{1, 3}, {3, 1}的协议就可以恢复出来0/1的序列了. 因为这里的数据量很少, 所以我就人工一个一个比对了. 如果这里数据量比较多的话, 就设置一下采样率, 然后用urh自带的解调功能解码出原始的序列. 然后再用文本替换的方法把1000/1110替换成L/H(或者HEX编码为8和e)就行.

但是注意, 使用自带的解码可能不会很准. 尤其是解调的抽样时间可能会对不齐, 导致出现偏差. 因此需要进一步的核对.

image-20250220224130549

吐槽一个

上面这个波形还是很容易看出来的, 那么下面这个波形就很差了.

image-20250220215841187

这是一个443射频的无线开灯器的波形. 因为高频电路也忘干净了(本来就没学会, 可能还不如何同学学的好), 出现这种波形的原因是分析不出来了. 最后就是根据协议来猜一猜.

首先第一个高电平之后有一长段的低电平, 那么就假设前面有1个或者2个高电平. 再量一量后面的长度和比例, 和EV1527这个协议是一样的

image-20250220221406188

可以看到, 这个波形的问题是发送高电平的时候无法维持住高电平的波幅, 只有出现上升沿和下降沿的时候才会有比较高的能量. 毕竟这个小遥控器的电路非常简单, 所以出现啥波形都有可能吧. 总之就是这样分析出来, 放到单片机里验证一下就是了.

编写代码发送信号

使用arduino或者esp32之类的单片机, 配合433超外差发射模块即可实现信号发射. 注意脉冲的长度需要在代码里根据实际情况设定一下. 一个简单的示例代码如下:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {

  Serial.begin(9600);
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(5); 
  // Optional set protocol (default is 1, will work for most outlets)
  mySwitch.setProtocol(1);
  // Optional set pulse length. 设置脉冲长度, 注意这里是设置的500/2也就是250us
  mySwitch.setPulseLength(250);
  // Optional set number of transmission repetitions.
  mySwitch.setRepeatTransmit(7);

}

void loop() {
  Serial.println("hello1");
  mySwitch.send("001011101000110100010000");
  delay(1000);
}

这里可以用RCSwitch的重复功能多发几次信号, 因为只发送一次信号可能并不会有效. 在实际中也是, 按遥控器肯定不可能按下去一瞬间就抬起来, 肯定要按一定长的时间确保生效才会松手的.

另外, 有一个方板的433发射模块, 那个模块的接口线序是 DATA/VCC/GND, 别插错了. 我就是把VCCDATA插反了, 这样其实也有效果, 因为是键控调幅嘛, DATA也只是控制通不通电, 所以和VCC对调似乎影响也不大.

奇怪的地方

这里有一个奇怪的地方我也没想通(本来通信原理就没学好, 过了这么长时间更不可能知道了)

在urh里可以看到, 一个高电平的持续时间是500us, 那么按理说RCSwitch的pulselength就应该是500才对. 但是我实际运行了一下代码, 真正起效的脉冲长度应该是250us. 这里是为什么没太理解. 不过犹记得当年学信号系统的时候经常忘记"x2", 可能这里也和这个有关系吧.

image-20250126175333391

#本文链接:https://blog.chaol.top/archives/99.html
#本文采用 CC BY-NC-SA 4.0 协议进行许可
#如无特别声明,该文章均为 ciaoℒy 原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0)协议,即转载请注明文章来源。
#最后编辑时间为: 2025 年 02 月 20 日
none

create 添加新评论


account_circle
email
language
textsms



加我的QQ
加我的微博
加我的支付宝
加我的微信