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

软件无线电

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 loopbyte 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 countercounter=0;Serial.println("initializing...");// initialize the RF Chipcc1101.init();cc1101.setSyncWord(&syncWord, false);cc1101.setCarrierFreq(CFREQ_315);cc1101.disableAddressCheck();//cc1101.setTxPowerAmp(PA_LowPower);//Serial.print("CC1101_PARTNUM "); //cc1101=0Serial.println(cc1101.readReg(CC1101_PARTNUM, CC1101_STATUS_REGISTER));//Serial.print("CC1101_VERSION "); //cc1101=4Serial.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连接到其中心设备,并将其二进制调制波形发送出去。

如果能搭建一个类似发送包的网络就更好了,给每一个设备一个名字,这样一来你就知道那个设备对应的是哪辆车了。

收集数据:车辆名称,颜色,位置和重放攻击数据。

将其放置在任何车辆上,中央设备可以在几分钟内完成。

使用RTL-SDR,从打开一个车门到批量打开车门的更多相关文章

  1. 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri

    [源码下载] 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri 作者:webabcd 介绍背水一战 Windows 10 之 关联启动 ...

  2. 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议

    [源码下载] 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议 作者:webabcd 介绍与众不同 windows ...

  3. 重新想象 Windows 8 Store Apps (33) - 关联启动: 使用外部程序打开一个文件或uri, 关联指定的文件类型或协议

    原文:重新想象 Windows 8 Store Apps (33) - 关联启动: 使用外部程序打开一个文件或uri, 关联指定的文件类型或协议 [源码下载] 重新想象 Windows 8 Store ...

  4. WPF实现只打开一个窗口,并且重复打开时已经打开的窗口置顶

    内容来自:https://codereview.stackexchange.com/questions/20871/single-instance-wpf-application 第一步:添加Syst ...

  5. eclipse search只能打开一个文件

    通过search找到的文件只能打开一个.以前search打开的那个文件就自动关闭了,找不到了.解决办法: window-preferences-general-search找到第一行的一个选项  re ...

  6. 傲游浏览器4,傲游浏览器5如何一键批量打开url链接。

    傲游浏览器批量打开网址的插件没用了.有很多网友发了方法也无法实现.实际上,是可以实现傲游浏览器4,傲游浏览器5一键批量打开url链接的.我来告诉大家如何来实现.最新的M5都能使用.在收藏夹添加一个收藏 ...

  7. 判断页面是在pc端打开还是在移动端打开

    在项目开发中会遇到在不同的设备中打开页面是不同的,比如: 我在手机中打开一个网站和pc打开一个网站,页面是不同的 具体实施如下 //判断打开网站的终端 var ua = window.navigato ...

  8. Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法

    VirtualBox新建虚拟机时报错,不能为虚拟机打开一个新任务的原因 解决办法如下 1.保证bios里的virtualization technology的选项开启,不同电脑BIOS设置可能会不一样 ...

  9. 使用javascript打开一个新页而不被浏览器屏蔽

    使用javascript打开一个新页面可以有几种方式,但各有利弊,以下做下分析 1.window.open(url) 这是新手最常用的方法,好处是简单易用,坏处,很简单,会被很多浏览器拦截而导致功能失 ...

随机推荐

  1. solr 单机模式搭建

    系统环境:centos 7 安装前准备 安装JDK环境 下载tomcat.solr安装包:solr下载地址:http://archive.apache.org/dist/lucene/solr/ 安装 ...

  2. FTP实验报告

    FTP实验报告 制作人:全心全意 准备工作: linux1:192.168.100.4 关闭防火墙.selinux机制 配置yum源 匿名访问 1.安装vsftpd服务和客户端 [root@local ...

  3. Springboot(二)-application.yml默认的配置项以及读取自定义配置

    写在前面 ===== spring-boot 版本:2.0.0.RELEASE ===== 读取自定义配置 1.配置文件:sys.properties supply.place=云南 supply.c ...

  4. OpenGLES2.0着色器语言glsl

    OpenGLES2.0中是强制使用可编程的渲染管线的,使用的是glsl着色器语言,因为着色器语言是使用的GPU,即图形处理单元,而不是CPU,这样可以使CPU从繁重的几何计算和像素的处理中解脱出来了. ...

  5. JS(原型和原型链)

    (学习自慕课网<前端JavaScript 面试技巧> JS(原型和原型链) 题目1.如何准确判断一个变量是数组类型 使用 instanceof 方法 题目2.写一个原型链继承的例子 实例: ...

  6. jq:mouseover和mouseout多次触发解决办法

    区别: mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mou ...

  7. python基础-面向对象(装饰器)

    属性:   @property   @method_name.setter   @method_name.deleter   三个标签都是放在方法的上面来使用,且方法名要和后续使用的   变量名字相一 ...

  8. pytorch中torch.unsqueeze()函数与np.expand_dims()

    numpy.expand_dims(a, axis) Expand the shape of an array. Insert a new axis that will appear at the a ...

  9. sql server中的数据类型转换函数

    1.cast(字段名 as varchar(40)) 2.convert(varchar(50),字段名)  日期转换: CONVERT(varchar(20), GETDATE(),120)

  10. BZOJ [HNOI2015]亚瑟王 ——期望DP

    发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...