电子说
第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编码系统现在已经过时,现在是时候停止使用它们作为安全/进入系统了。对于具有电子和编程知识的人来说,这是相当容易的黑客攻击。
希望这有助于某人评估他们自己的射频安全系统,并采取必要的措施来防止任何意外。
全部0条评论
快来发表一下你的评论吧 !