H4ck33D – hacking a 433MHz Remote Control [翻译]【转】

原文在这:http://mightydevices.com/?p=300

许多人生活在一种被称作“封闭式小区”的环境中,这种地方往往通过建立高高的围墙或者篱笆给住在里面的居民们产生一种与世隔绝和相对安全的感觉。要想进入这些地方,通常需要通过一些电子控制的大门才行。我没有一辆汽车,也没有一个遥控可以用来控制一扇能通向我房子的大门虽然对于还不能任意掌握这些道路的家伙来说它看起来没有太大的问题,但是我的朋友们(经常开车)想顺便来访,他/她只能把车停在外面,这让人觉得很不方便。你可以想象,也许在这种情况下最好的解决办法是一些人来管理这个地方来充当一个“廉价”的遥控器,但有什么意思呢?所以我决定黑进这个系统

 

第一步:收集你需要的工具

现在市场上这种系统几乎全部都使用的射频通信技术。我从来没见过有人使用红外线或者其他的通信介质来开门。这些系统使用了ISM频段,在欧洲,通常是433MHz,868MHz,2.4GHz。而433MHz是最流行的一种通信频率。想要监听正在进行的通信你需要一个可以调谐到433Mhz频段的接收器。SDR是接收器的不二之选。我使用的是最流行的一种(RTL-SDR),成本非常低,如下图所示(已经拆掉塑料外壳,WOW!)

现在你需要一个支持这个硬件的软件,SDR#(读作SDR Sharp,使用C#语言开发)。用户界面相当简洁明了。在这你可以看到我图片上面的RTL-SDR(电视棒PS:博主注)在105Mhz附近有两个FM电台。最重要的是,你可以使用这个神奇的软件随意调整或者以WAV格式记录你感兴趣的频率录音。

接收到如此多的信号(其实博主也不知道这句该如何翻译)。现在我们需要一些东西来分析接收到的信号。我使用的是Audacity这款软件,它对SDR#生成得WAV文件比较友好。

在捕获接收到的信号之后我们需要一种无线电发射器,它可以像原来的遥控一样。为了解决这个问题,我得自己做一个(从头开始)。

 

第二步:捕获信号

显然,我们需要知道找什么。正如我之前提到的跳跃的433MHz(433.82mhz是精确的,因为它是最常见的SAW谐振器的频率,通常用在小遥控)似乎是个不错的主意。在我家附近有相当多设备运行在这个频段,家用天气气象站,汽车报警器和一些网络传感器的活动都可以观察到。一个简单但却非常重要的问题是:如何才能从所有的无线电广播中区分出有用的信号呢?嗯,答案并不是那么简单。不过你可以根据以下特性来区分正确的信号:

>>>跟开门有关系的信号----这个应该不用解释吧

>>>信号强度----你离门越近信号越强。需要记住的是,信号不一定是从门发出来的,但也是远程控制。当车接近门的时候来使用。很多遥控器都可以产生比较大的射频功率,这样就能保证打开远处的大门。非常好,这样你就不必要拿着你的笔记本和黑客工具在你要黑掉的设备附近晃悠而引起别人(保安)不必要的注意。

这是SDR#在闸门开起来的时候捕获的信号截图。(想知道什么是WOW!信号?科普链接:http://en.wikipedia.org/wiki/Wow!_signal)

第三步:分析

我们可以从上图中看到不少东西。首先,我们可以看到发射器发射了一个周期性的帧,并且所有的帧的长度都是相同的。我们可以看到频率的偏移非常小。由此得出一个结论,发射器没有使用PLL(锁相回路或锁相环,用来统一整合时脉讯号,使内存能正确的存取资料)也没有使用其他形式的hand effect(PS:不知道是啥)(发射器通过hand’s proximity调谐)来进行修正。这表明我们正在处理的是廉价而且简单的电路,毫无疑问,这正是我们所希望的!

在通信过程中我使用了SDR#记录了这些基带(baseband)。然后,我只是简单的在Audacity软件中打开了之前记录的文件,这些我捕获的(除去所有的无线电静默等

Good!快看,漂亮。信号如此强烈,我甚至不需要做任何处理就可以看到所有的字节,用肉眼就可以看到1's和0's。我们可以清晰的看到需要处理的OOK(on-off keying:开关键控调制程序)调制方式。毫无疑问,这是所有调制方式中最简单的。

 

每次发送的帧都是相同的----由此得出一个结论,我们正在处理的是一个单向通信。你可以想到这是一个多么渣渣的系统(sleazy system),这是个好消息。我们不需要了解它是什么编码。我们可以简单的模拟发射器的行为,门禁系统甚至不会注意到有人在捣乱。

这个波形的第一部分,也就是所谓的“序言”,采用了交替的1和0组成。它在无线电通信中通常用来使发射器和接收器的时钟同步。可以看到上图中的24位(12个0和12个1)。之后会有一段静默(等待),对我来说这玩意儿至今是一个谜。紧跟着静默的是一个特定的字节位。这有什么特殊的呢?我们一起来看下细节:

在这我们正在处理两种标记,就像摩尔斯电码里面的短(dit)与长(dash)。细心地观察者会注意到发射短的时间和发送长的时间长度是一样的(如下图中红色粗线之间的间隔)

将每一个标记的间隔分成三等分,以这种方式发送短标记只占用了区间的第一部分作为载体,发送长标记需要占用两个部分作为载体。这样做是为了在发送一个长的0和1序列时防止固定载波的存在(或缺失)。这种做法能够让接收器在出现比特率损耗之后能够重新同步(建立标记需要三个字节位而不是一个)。

 

让我们来做一个假设,短标记代表二进制0,长标记代表二进制1。虽然这种假设可能是错误的,但是我们可以不用管最后到底会不会出现问题,我这里并不打算逆向每个帧的每一位。没必要那么做。

你应该记下一些重要的信号参数:

>>>比特率----单个信号位所持续的时间----380us

>>>”序言“长度----24字节(1010101….)

>>>无线电静默长度----9字节(有趣的数字,我知道,接下来的会有更多有趣的数字...)

>>>比特序列----短标记和长标记的排序(序列)

>>>两个帧发射的间隔----105ms

有了这些能够重现接收信号的所有信息,我们终于可以hit(简直不知道该如何翻译)无线电波了。

第四步:造一个发射器

在我们处理OOK调制的时候,我已经想办法设计并构建了一个简单带调制输入的433.82Mhz发射器。看下面的示意图:

图中展示的电路可以分成两个部分:一个是模拟信号的Colpitts振荡器(即打开/关闭振荡)建立在Q1和稳定的SAW谐振器。另外一个是基于Q2简单的功率放大器。整个电路使用5V直流供电。当MOD引脚连接到VCC和GND的时候观察SDR#瀑布图。这是把所有的东西都焊接到一小块PCB板上的样子:

通过DISCOVERY板上面的STM32L152来进行调制。这个图片展示了一个发射器连接到DISCOVERY板上面:

第五步:用你的方式黑进带门禁的小区

我已经写好了简单的代码,将周期性的发送我之前收集到的那些帧。我目前为三个大门使用的是三种不同的载荷(payload),一切看起来都正常工作。这些代码工作流程可以概括为:

>>>在PA12引脚上产生比特流---- this is done in Timer6 interrupt to keep the timing tight!(这句好像是保证Timer6的中断,实在是不知如何翻译)

>>>编码帧----将标记转换成短和长(的混合序列)准备”序言“

>>>准备每150ms一帧

生成的二进制文件大约占用3KB的空间。不用说,它工作非常出色。

结论

入侵门禁闸门系统大约花了我3-4个小时时间。我所使用的工具/配件,成本低于20美元,其中有许多都是免费的(软件)。事实上这说明社区门禁系统并不是相对安全的。这使用的是过时的系统,因此很不安全。值得注意的是,通常我们使用的车库开启器也是使用的相同的技术,而更糟糕的是----汽车报警器也用了。我甚至不想去尝试预测这些会导致什么后果!

源码

>>>h4ck33d –这个项目的完整源码.

--------------------------------------------------------------------------------------------------------------------------------------------------------

后记:

文章的作者是个搞硬件的,博主也非常敬佩。由于博主的英文水平不高(唉,四级都没过,简直 so no face),所以在翻译的时候难免有些地方翻译的不妥。博主翻译的时候并不是逐字逐句翻译,有地方还是根据自己的理解来的。如果小伙伴们有啥好的意见可以提出来我好修正。

针对这种hack思路,我大宋朝其实没有必要自己去画PCB,作者原本是做PCB绘制的(见原作者博客的介绍),所以自己做了个板子。我们宋朝地大物博,各种模块简直就是物美价廉,RTL-SDR可以选择电视棒,调制装置可以用arduino来做。当然,如果你手头上有USRP或者hackrf one,那再好不过了,直接用他们那想必是极好的。好了,谢谢盆友们的围观。

本文链接:http://www.92ez.com/?action=show&id=41
提示:技术文章有一定的时效性,请先确认是否适用你当前的系统环境。

 

posted @ 2017-03-27 13:33  听键盘奏乐  阅读(561)  评论(0编辑  收藏  举报