怎样用Arduino破解远程射频安全锁

电子说

1.3w人已加入

描述

第1步:材料

我通常从ebay购买,在那里我可以找到非常便宜的工作部件免费或几乎免费送货。

以下是我用于此项目的主要部分:

Arduino uno - USD 5.17

(请注意,这不是最初的Arduino。如果你使用廉价的克隆Arduino就像我一样请转到Arduino网站贡献几美元。如果他们从来没有开源这些原理图我们永远不会有这么便宜的arduino)

DVB-T SDR电视调谐器接收棒RTL2832U + R820T - 7.09美元

(我买了这个时间回到了R820T的地方) RTL2832U是最便宜的选择,频率范围为24-1766 MHz。有一个新版本的R820T2芯片组据说与以前相比不易出现射频噪声。如果你能找到一个带R820T2的加密狗,那就买它而不是R820T。 )

433Mhz射频发射器/接收器模块 - USD 0.74

315Mhz射频发射器/接收器模块 - 0.99美元

以下项目用于使这个项目更便携和易于处理:

(请注意,我在家里发现了这些项目,但我会发布ebay链接以便购买它们)

Veroboard - 1美元

少数连接器母头 - USD 0.99

少量插头引脚 - USD 0.2

(可选)USB A型公端口 - USD 0.99

(可选)USB B型公端口

注意:如果可以只需从当地商店或ebay购买“USB B型A型公对公连接器”,无需另外购买USB型A型,B型公端口。由于我家里没有连接器,我不得不用可用的物品制作。

除了这些物品外,我们还需要很少的连接线和电脑。即使我已经在Windows 7,mac osx和ubuntu中完成了这个,我将解释Mac OSX-10.9.4(64位)的分步说明。如果您对操作系统有一定的了解,这些说明将与其他操作系统非常相似。如果您使用的是windows或linux/ubuntu,请随意在评论部分提出任何问题。

第2步:步骤摘要

以下是主要步骤需要遵循。

识别被动代码:

在计算机上安装RTL-433库。

(这是必要的,因为这些库将使我们能够监听加密狗可以处理的任何无线电频率)。

开始收听315MHz和433.92MHz频率并进行解码。

传输被动代码(使用Arduino):

设置Arduino硬件和草图。

使用串行监视器测试Arduino设置。

设置Arduino设置的GUI界面。

(我编写了一个java swing GUI应用程序,可以随时轻松更改参数,无需使用串行监视器或上传每个参数更改的Arduino草图)

完成原型设计:

构建简单的射频发射器屏蔽

(可选)构建USB A型到B型适配器

步骤3:识别被动代码:安装RTL-433库

射频

射频

RTL库会将基于Realtek RTL2832的DVB加密狗转换为通用数据接收器。由于RTL2832芯片组允许调整24-1766 MHz范围,因此它也可用于各种其他项目。例如监控从每个商业航班广播的adb飞机转发器数据。

我将尝试通过给出每一步尽可能完整地使这个指示完整。要安装RTL库,我们有以下几个先决条件:

此步骤的主要目标是在计算机上设置merbanan/rtl_433。通过一些谷歌搜索和小小的头脑风暴,你会发现快速而肮脏的方式来设置它。但我总是喜欢从基础开始构建以保持控制。

先决条件:

请注意,这些步骤适用于 Mac OSX 。如果您需要任何细节或陷入死胡同,请在评论部分告诉我。我已经在所有主要操作系统(Windows 7,ubuntu 14.04和mac osx 10.9.4)上测试了这个结束。

如果你在Windows上,只需使用prebuild可执行文件“rtl- 433“在这个网站上。我没有尝试过,有些谷歌搜索这将是在Windows上设置“rtl-433”的最快方法。

安装“cmake”

从CMake网站下载CMake。 (确保下载dmg版本)

成功下载.dmg文件后,只需双击即可。

要安装CMake应用程序,请将CMake拖放到“应用程序”文件夹中。

从Launchpad或Spotlight启动CMake。

从“工具”菜单中选择“如何安装命令行使用”。从弹出的对话框中,记下cmake-gui路径(例如:/Applications/CMake.app/Contents/bin/cmake-gui)。

通过执行“cmd + Space”打开终端,输入“terminal”并在终端上执行以下命令:

sudo mkdir -p /usr/local/bin

sudo /Applications/CMake.app/Contents/bin/cmake-gui --install=/usr/local/bin

验证它已通过执行以下内容正确安装到PATH:

cmake --version

安装“libtool”“libusb-1.0.0-dev”库

安装 libtool 和 libusb 在终端中执行以下命令:

brew install libtool

brew install libusb

安装“rtl-sdr”库

rtl-sdr库有详细记录的文档。步骤相当简单。请前进并正确安装。

安装RTL-433库

完成所有先决条件后,克隆rtl_433 git存储库并按照下面的步骤使用cmake构建库。在存储库主页面中,有一个全面的指南,指向每个命令以及如何使用它。

cd rtl_433/

mkdir build

cd build

cmake 。./

make

sudo make install

一旦rtl-433安装在您的系统上,请插入DVB-T USB加密狗并运行以下命令。

rtl_433

如果一切正常,rtl_433将识别USB设备并开始侦听任何传入的射频传输。我已经成功连接了控制台输出作为参考。

步骤4:识别被动代码:开始聆听315MHz和433.92MHz

射频

根据测试安全锁的射频频率,您需要收听433.92MHz或315MHz。由于所有射频关键指针都被调节为使用其中一种频率,如果您不知道按键上的确切频率,可以尝试两种频率。

对于433.92 MHz RF键

“rtl-433”默认调到433.92MHz频率。为了在此

频率下收听所有传入传输,我们需要按如下方式切换到分析仪模式。

将DVB-T调谐器加密狗插入其中一个usb计算机的端口。

打开终端并输入以下命令:

rtl_433 -a

它将开始侦听任何传入流量并在控制台上打印。按遥控键上的按钮,它将在控制台输出上注册。

对于315MHz RF键

该库的名称略有误导,因为它表示“433”意味着它只能以433MHz频率接收。这不是真的。如果连接的硬件允许,该库可以接收任何频率。

为了使用调谐器调谐到315MHz:

将DVB-T调谐器加密狗插入其中一个usb计算机的端口。

打开终端并输入以下命令:

rtl_433 -f 315000000 -a

按遥控器上的按钮,它将在控制台输出上注册。

重要提示:就像收音机一样,DVB-T调谐器只能在给定时间调谐到一个频率。您无法使用一个接收器同时调谐到两个频率。

如果一切正常,您将看到类似的控制台输出,如下所示:

Reading samples in async mode.。.

Tuned to 315000000 Hz.

*** signal_start = 90713609, signal_end = 90787588

signal_len = 73979, pulses = 125

Iteration 1. t: 185 min: 97 (80) max: 273 (45) delta 5

Iteration 2. t: 185 min: 97 (80) max: 273 (45) delta 0

Pulse coding: Short pulse length 97 - Long pulse length 273

Short distance: 81, long distance: 257, packet distance: 2720 p_limit: 185

bitbuffer:: Number of rows: 5

[00] {25} 55 24 8c 00 : 01010101 00100100 10001100 0

[01] {25} 55 24 8c 00 : 01010101 00100100 10001100 0

[02] {25} 55 24 8c 00 : 01010101 00100100 10001100 0

[03] {25} 55 24 8c 00 : 01010101 00100100 10001100 0

[04] {25} 55 24 8c 00 : 01010101 00100100 10001100 0

正如您所看到的那样,清晰的二进制模式“01010101 00100100 10001100 0”重复5次,脉冲长度大约为273.如果我们可以简单地重复这种二进制模式,接收方应将其识别为有效密钥并进行身份验证。

步骤5:传输无源代码:设置Arduino硬件和草图

射频

Arduino硬件设置

硬件设置非常简单,如附图所示。我已经包括了一个面包板,只是保持图表清洁。如果你可以将5v和地线正确连接到Arduino,则无需使用面包板。

此外,数据引脚可以使用GUI界面进行配置,稍后将对此进行说明。因此,无需坚持12和10针。您可以根据需要使用任何数字输出引脚。

Arduino sketch

为了发送二进制代码,我们需要一个名为rc_switch的Arduino第三方库由SuatÖzgür开发。

按照下面的步骤正确安装rc-switch库并上传草图。

从“sui77/rc-下载rc-switch库”切换“git repository。

将解压缩的rc-switch库目录放在”{USER_HOME}/Documents/Arduino/libraries/“中。

(有几种方法可以安装库。有关如何安装库的更多信息,请查看Arduino官方指南)

从我的git存储库下载附带的arduino sketch文件(RfProjectArduinoCode.ino)或最新草图。草图很简单,评论很好并且不言自明。

在高级别,它所做的是监视任何传入的串行消息并根据串行输入参数传输rf代码。

我添加了内联注释以使其更具可读性。如果需要更多信息,请随意在评论部分提出任何问题。

从Arduino IDE打开草图文件,验证并将其上传到Arduino。

Arduino Sketch Internals

我通过草图文件中的内联注释解释了所有主要功能。我将尝试通过重要的代码行让第一次使用Arduino的用户更清楚。

INPUT_SIZE变量定义输入字符数组的大小。

#define INPUT_SIZE 150

创建必要的变量,包括RC开关实例。

RCSwitch mySwitch = RCSwitch();

char* binaryCode;

char* pulseLength;

char* rfTransmitPin;

char* rfProtocolType;

char* repeatIterations;

一次设置初始化串行波特率并初始化内置LED输出以通知状态。这将刷新串行输入缓冲区,以确保没有垃圾串行数据传递给rc开关库。

void setup()

{

// Initialize serial:

Serial.begin(9600);

pinMode(13, OUTPUT);

// Flush serial buffer

serialFlush();

}

我相信“loop()”中的其余代码是自解释的。因为我为每个关键代码行添加了内联注释。如果您有任何问题,请在评论部分询问。

步骤6:传输被动代码:使用串行监视器测试Arduino设置

射频

射频

在继续之前,我们需要确保Arduino已正确设置并准备好正确传输代码。

为了验证遵循以下步骤:

使用DVB-T usb加密狗开始接收433.92MHz射频信号,如步骤4中所述。

使用USB电缆将Arduino连接到计算机。

导航到“工具 - 》串行监视器”,在Arduino IDE中打开串行监视器。

通过串行模组输入向Arduino发送以下行。

binaryCode:0101011010&pulseLength:321&rfTransmitPin:10&rfType:1&repeatIterations:5

这应该在DVB调谐器上正确注册二进制代码作为附加的控制台输出屏幕截图。

类似地,通过将“rfTransmitPin”改为12并使用rtl_433调谐到315MHz频率来测试315MHz发射机。请参阅附带的屏幕截图以获得更清晰的想法。

现在,通过更改串行输入参数,您可以传输从您的射频密钥获取的二进制代码并模仿密钥。

步骤7:传输无源代码:设置Arduino设置的GUI界面

射频

射频

射频

射频

射频

此步骤不是强制性的,因为我们可以通过发送格式正确的串行输入来模仿rf键,如上一步所述。但是将arduino与GUI连接将使任何具有基本计算机知识的人都能轻松使用。

我选择java/swing来开发RC SWITCH GUI主要是出于个人喜好。此外,Java应用程序在所有平台上都具有高度可移植性,这使得共享/运行可执行文件变得容易。

关于RXTX java库以及为什么需要

Java JDK目前不支持本地串行端口通信。因此,我们需要依赖可以与串口通信的外部java库。 RXTX库已经开发用于解决这个问题。

RXTX是一个开源java库,使用本机实现(通过JNI),为Java Development Toolkit(JDK)提供串行和并行通信。尽管rxtx几乎没有其他替代方案,但这是最完整的串行通信库,由广泛的社区支持进行故障排除(堆栈溢出:))。

Rxtx库包含两部分。

RXTXcomm.jar - 这使JDK/JRE能够与特定于操作系统的串行驱动程序进行通信。

特定于操作系统的串行驱动程序(例如:用于mac osx的librxtxSerial.jnilib) - 这与操作系统识别的串行端口进行通信。

参考附加的高级架构图,了解如何使用rxtx库。

控制Arduino发送器的Java GUI程序

我提供了所有java源代码在rc switch gui git repository中。如果您是开发人员,请继续使用这些源代码。

我不打算解释GUI项目的所有内部结构,因为它将使这种可指导的方式偏离正轨。请在评论部分提出任何问题。如果您计划从源代码构建GUI,请确保将“RXTXComm.jar”库正确导入到项目中。

在Mac osx上运行GUI程序(使用预构建jar) 10.9.4(64位):

在您的计算机上安装最新的Java版本。 (因为我已经在java 1.8上编译了这些jar,它在旧版本的Java中不起作用)。

下载并解压缩附加的“rc_switch_gui.zip”文件。

进入解压缩目录并执行以下命令。这应该打开主窗口。

java -jar rc-switch-gui.jar

使用GUI程序:

GUI界面不言自明。为了完整性,我将简要介绍每个选项卡的功能。

连接选项卡

顾名思义,此选项卡将允许您选择串口并连接。请注意,您需要单击下拉列表旁边的“刷新”按钮,以列出所有可用的串行端口。连接时有一个“状态”通知,指示连接成功或任何错误(例如“正在使用的端口”错误)。有关详细信息,请参阅附图。

传输标签

如果没有成功连接,用户将无法访问此选项卡。连接成功后,此选项卡将启用并准备将二进制代码发送到Arduino。还有一个进度条指示此选项卡底部的发送操作的进度。

配置选项卡

此选项卡允许用户定义与433MHz和315MHz发送器相对应的Arduino数据引脚。

步骤8:故障排除: )

请注意,在执行上述步骤时,您可能会遇到一些问题/错误。我已经记录了我在制作这个教学时遇到的所有问题。希望它能帮助您解决所面临的任何问题。

Mac OSX上的常见错误/异常

java.lang .UnsatisfiedLink错误

如果您遇到此错误,那是因为串行驱动程序库和主机中的架构不匹配。

java.lang.UnsatisfiedLinkError: librxtxSerial.jnilib: no suitable image found.

Did find: librxtxSerial.jnilib: no matching architecture in universal wrapper thrown while loading gnu.io.RXTXCommDriver

在官方rxtx中他们为网站提供了针对32位架构编译的Mac OSX库。他们没有提供库以支持64位系统。

在附加的“rc_switch_gui.zip”中它包含64位编译库(因为我在64位系统上运行)。如果您需要32位Mac OSX库,您只需从网站上的官方rxtx库中替换它。

端口已在使用错误

OS X在串行端口上具有排除(锁定)机制。 MacBooks从未有过串口,但USB端口可以模拟它们。当Arduino连接时,它在端口列表中显示为“/dev/tty.usbmodemXX”,其中“XX”是一些数字。当端口已经被使用时抛出异常,这是一个标准的I/O异常,这意味着我们无法获得访问权限。当前所有者未定义,因为没有当前所有者。我们只是没有对目录的必要访问权来取得所有权。

为了修复这个打开的终端并执行以下命令:

sudo mkdir /var/lock sudo chmod 777 /var/lock

这将创建所需的目录并使其可访问。鉴于其他东西没有真正使用它,串口将不再繁忙! ;)

Ubuntu 14.04 LTS上的常见问题

我的初步计划是仅通过此教程覆盖Mac OS。但是当我试图在Ubuntu中运行jar时,我遇到了一个最烦人的问题,即使没有错误/异常,rxtx库也无法识别某些串口。

经过数小时的研究发现在Ubuntu 14.04上,Arduino被认为是/dev/ttyACMxx。 RXTX库只搜索/dev/ttyXXXX.

因此需要将symlink设置为可用端口,如下所示。

sudo ln -s /dev/ttyACM0 /dev/ttyUSB0

确保替换“/dev/ttyACM0 “用你的Arduino的端口标识符。这应该可以解决问题。

另一个问题是用户没有足够的权限来访问串行端口。因此,请确保以root用户身份运行GUI应用程序(如果可能)。如果您需要使用当前用户运行应用程序,只需将当前用户添加到“dialout”用户组并重新启动计算机。

sudo usermod -a -G dialout username

确保将“username”替换为您的用户。

步骤9:完成对原型的接触

射频

射频

射频

射频

为了完成这个项目,我们需要将所有东西妥善包装在一个整齐的包装中。当然,我们不能处理面包板,而电线悬挂在停车场或车库的微型发射器。 :)

这一步重点是使这个项目易于携带和易于处理。

这一步可以分为两部分:

射频发射器Arduino连接器护罩

(而不是使用面包板,我需要更便携的东西,并且能够轻松地连接/分离Arduino。)

USB A型/B型连接器

(男性对男性)

(使用USB线不方便。为了使用它作为可插拔加密狗,我需要一个没有电缆部分的连接器。正如我在“材料”部分(步骤1)中提到的那样,可以购买这些连接器。)

射频发射器Arduino连接器护罩

这是一个简单的设置,仅使用arduino的4个引脚。我附上了Veroboard图。焊接正确,如图所示,并确保断开所有未使用的插头引脚作为预防措施。我也使用过连接器来连接/拆卸变送器。如果您不希望在其他项目中重复使用变送器,只需将其直接焊接到电路板上。

确保在焊接后验证每个引脚连接。确保对面的Arduino引脚也没有通过Veroboard连接。

我的最终适配器看起来像这样。我相信有更好的方法来安排它。我刚刚从我可以使用的内容中做到了这一点:)

USB A型到B型连接器

如果您可以购买预制适配器,因为它便宜且构造良好。但是由于它需要很长时间才能到达(我居住的地方),因此我决定建立自己的适配器,因为我在家中获得了所有必要的部件。

焊接USB连接也非常简单。只有4条线连接,互联网上也有清晰的引脚图。我使用了这个引脚图,通过编号清楚地识别引脚。

最终结果如下所示。它并不漂亮,但它可以按预期完成工作。

重要:如果您决定构建自己的适配器,请确保在没有短路线的情况下正确执行。在连接到PC之前,请仔细检查每个连接和焊接。否则,在最坏的情况下,您的PC主板将支付价格。

如果您不想冒任何风险,最好的办法是购买适配器,而不是自行构建。

步骤10:结论

可以通过各种方法改进该黑客攻击。例如,如果这可以用arduino micro或nano实现,那么就像笔式驱动器一样容易携带。这样做也很简单。除了这些步骤之外,还需要做的就是将RF发射器正确安装到arduino。

此外,由于RF传输可以通过串行输入直接控制,因此各种其他项目有很多可能性。好。

这个教程的主要目标是让人们意识到攻击无源RF远程系统并获得访问权限是多么容易。无源RF编码系统现在已经过时,现在是时候停止使用它们作为安全/进入系统了。对于具有电子和编程知识的人来说,这是相当容易的黑客攻击。

希望这有助于某人评估他们自己的射频安全系统,并采取必要的措施来防止任何意外。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分