電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>ChupaCarBrah:使用BeagleBone和Python進(jìn)行汽車黑客攻擊

ChupaCarBrah:使用BeagleBone和Python進(jìn)行汽車黑客攻擊

2022-12-16 | zip | 1.64 MB | 次下載 | 免費(fèi)

資料介紹

描述

在這個(gè)項(xiàng)目中,我使用 Beaglebone Blue 通過 OBDII 端口將其連接到車輛上的 CAN 總線。我展示了如何使用 can-utils 和 python-can 來發(fā)送和接收 CAN 消息。我還介紹了如何將 GPS 模塊和蜂窩調(diào)制解調(diào)器連接到 Beaglebone,以便您可以遠(yuǎn)程獲取數(shù)據(jù)并將數(shù)據(jù)發(fā)送到移動(dòng)的汽車。我使用 Python 腳本收集 GPS 坐標(biāo)并解碼 CAN 消息(車速、發(fā)動(dòng)機(jī)、RPM、溫度等),然后將所有內(nèi)容發(fā)送到在 AWS 上運(yùn)行的簡單 Flask 服務(wù)器。

?
?
?
pYYBAGOYHx2Af0YFAAk6fAapcPI372.png
?
1 / 2 ? ChupaCarBrah 使用 OBDII 連接器
?

我們今天正在構(gòu)建的間諜設(shè)備稱為 ChupaCarBrah。

?

部分

這些是用于構(gòu)建 ChupaCarBrah 的部件。

pYYBAGOYH3SAQJ3NAA1ihjX1YHI476.png
ChupaCarBrah 零件
?

我使用塑料沖洗裝置蓋板連接 Beaglebone,并使用橡皮筋固定其他部件。我不得不在蓋板的側(cè)面鉆兩個(gè)額外的孔以匹配 BeagleBone 孔。我建議使用彩色連接線。這里使用的顏色標(biāo)準(zhǔn)是:

  • 黑色:接地
  • 紅色:VCC
  • 黃色:CAN 高
  • 綠色:CAN 低

BeagleBone 引腳和 CAN 連接器如下所示。需要一個(gè) JST/SH 連接器將連接線連接到 BeagleBone CAN 插槽。

?
?
?
pYYBAGOYH46Ab87DAAKUTy0YpE4842.jpg
?
1 / 2 ? BeagleBone 藍(lán)色引腳
?

組裝

將 JST/SH 連接器連接到 Beaglebone Blue 上的 CAN 插槽,如下所示

?
?
?
pYYBAGOYH6yABNrjAAuFUY46rqI158.png
?
1 / 2 ?將 JST 連接到 Beaglebone CAN 插槽
?

將您的連接線連接到母連接器。在我們的例子中,連接器具有以下標(biāo)準(zhǔn): 黑色:GND;紅色:不會(huì)使用;黃色:CAN Hi;白色:CAN lo。你的可能不一樣。

  • GND:JST/SH 黑色 - 連接線黑色
  • CAN Hi:JST/SH 黃色 - 連接線黃色
  • CAN Lo:JST/SH 白色 - 連接線綠色
?
?
?
pYYBAGOYH8OAKBtAAA3HDQ95z10922.png
?
1 / 2 ?將連接線連接到 JST/SH 連接器
?

將黑色連接線的末端連接到 DC Barrel Jack 適配器上的負(fù)極“-”插槽,但先不要擰緊。獲取另一根黑色連接線并插入同一個(gè)“-”插槽。將兩根黑線擰在一起。

pYYBAGOYIAyAFguhAA2jG6lnPfc654.png
兩根黑色連接線連接到 DC Barrel Jack 上的“-”
?

將紅色連接線連接到 DC Barrel Jack 適配器上的正極“+”插槽。

?
?
?
pYYBAGOYxzuAIggIABCWkP3NE6g310.png
?
1 / 2 ?一根紅色連接線連接到 DC Barrel Jack 上的“+”
?

DC Barrel Jack Adapter 插入 Beaglebone 12V 輸入插孔。OBDII 將提供為 BeagleBone 供電所需的 12V。

pYYBAGOYx1qAIGueAAxH7h3EfQI027.png
連接到 BeagleBone 的 DC Barrel Jack 適配器
?

將連接線連接到母 OBDII 連接器。您可能需要查看車輛手冊(cè),但通常 OBDII 的標(biāo)準(zhǔn)引腳是:

  • 引腳 5:信號(hào) GND
  • 引腳 6:CAN 嗨
  • Pin14:CAN Lo
  • 引腳 16:12V
poYBAGOYx12ARkecAACC8nxK_x4948.png
OBDII 引出線
?

根據(jù)我們的連接線顏色代碼約定,您需要將黑色線連接到 OBDII pin5;黃線到pin6;綠線接pin14,紅線接pin 16。

?
?
?
poYBAGOYx3aAG30RAAgAik5vYUg492.png
?
1 / 2 ?連接線到母 OBDII 連接器
?

此時(shí)您已經(jīng)有了一個(gè)可以通過 OBDII 與您的汽車 CAN 總線交互的功能設(shè)備。如果這就是您要查找的全部內(nèi)容,請(qǐng)?zhí)痢皫в?can-utils 的 CAN 總線”部分。

要構(gòu)建完整的 ChupaCarBrah 設(shè)備,您仍然需要添加 GPS 模塊、蜂窩調(diào)制解調(diào)器和電池。電池是可選的,但在您的汽車電池沒電或 OBDII 電源斷開的情況下非常重要(即使電池完全沒電,您也可以找到您的車輛)。

將 GPS 模塊連接到 BeagleBone 上的 UART GPS 插槽。

?
?
?
poYBAGOYx6CARdC1AA4sAGhEjtg093.png
?
1 / 2 ? BeagleBone 上的 UART GPS 插槽
?

將您的 USB 蜂窩調(diào)制解調(diào)器連接到 BeagleBone 上的 USB 端口。在將蜂窩調(diào)制解調(diào)器連接到 BeagleBone 之前,請(qǐng)確保您已將有效的 SIM 卡插入到蜂窩調(diào)制解調(diào)器。

poYBAGOYx9WAL2RSAA-vbU49Cs4750.png
帶 SIM 卡的 USB 蜂窩調(diào)制解調(diào)器
?

將 BeagleBone 連接到塑料板或您選擇的任何其他絕緣材料上。

?
?
?
poYBAGOYx_KADvp8AAko5pUaRTI231.png
?
1 / 2 ?帶螺絲孔的塑料板
?

確保 GPS 模塊和電池正確放置在底部。

?
?
?
pYYBAGOYyAWAVCk8AAlAb4zP2sE334.png
?
1 / 2 ?底部受保護(hù)的 GPS 模塊
?

將 OBDII 電纜放在電池上并使用橡皮筋固定所有東西。

?
?
?
pYYBAGOYyCWAAQgRAA3XvUQaDYA161.png
?
1 / 2 ?電池底部的 OBDII 電纜
?

確保連接線固定在 OBDII 連接器上。我也用了更多的橡皮筋。

pYYBAGOab0GADNDWAA2naIEDWYE426.png
用于固定連接到 OBDII 連接器的連接器的橡皮筋
?

連接電池,您的 ChupaCarBrah 將啟動(dòng)。

?
?
?
pYYBAGOab0eAQTa4AA2smADLr2I605.png
?
1 / 2 ?將電池連接到 BeagleBone
?

現(xiàn)在您已經(jīng)準(zhǔn)備好硬件,讓我們?cè)O(shè)置所有必要的軟件,以便我們可以開始使用 CAN 消息。

帶有 can-utils 的 CAN 總線

打開您的 BeagleBone 并通過 WiFi 連接到它。我建議僅在長距離上使用蜂窩 LTE 網(wǎng)絡(luò),以便為您的數(shù)據(jù)計(jì)劃節(jié)省一些錢。確保你已經(jīng)安裝并更新了 can-utils/socketCAN。運(yùn)行以下命令:

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install can-utils

安裝/更新 can-utils 后,檢查 can0 接口是否可用

sudo ifconfig can0

root@beaglebone:~# sudo ifconfig can0
can0: flags=128 mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 43

如果您在第二行看到帶有 的類似輸出,則表示您的 can0 接口可用且已禁用。在將 ChupaCarbrah 連接到汽車之前,您希望將其關(guān)閉。如果您需要禁用它,請(qǐng)運(yùn)行:

sudo ifconfig can0 down

然后再次檢查狀態(tài)

sudo ifconfig can0

在確認(rèn)接口 can0 可用和禁用后,將 ChupaCarBrah 連接到您的汽車 OBDII 端口(又名 DLC - 數(shù)據(jù)鏈路連接器)。有關(guān)確切位置,請(qǐng)參閱您的汽車手冊(cè),但通常位于靠近方向盤的儀表板下方。

?
?
?
poYBAGOab02AKSyKAA2YDqbKqlY615.png
?
1 / 2 ?將 ChupaCarBrah 連接到 OBDII 端口
?

完成整個(gè)設(shè)置后,您可能希望將其隱藏在儀表板中。

?

將 ChupaCarBrah 物理連接到您的汽車后,打開點(diǎn)火鑰匙。您可能想啟動(dòng)引擎以防止耗盡汽車的電池(不要犯我犯的同樣錯(cuò)誤)。設(shè)置波特率,在我們的例子中是 500kbps,然后打開 can0 接口:

sudo ip link set can0 up type can bitrate 500000

sudo ifconfig can0 up

sudo ifconfig can0

root@beaglebone:~# sudo ifconfig can0
can0: flags=193 mtu 16,running,noarp>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 43

如您所見,現(xiàn)在輸出包含“”,這意味著您已準(zhǔn)備好發(fā)送一些 CAN 消息。,>打開另一個(gè)終端(ssh 會(huì)話)并運(yùn)行:

sudo candump can0

根據(jù)您的車輛,您可能會(huì)看到很多消息被捕獲,類似于以下內(nèi)容:

can0 418  [8] 50 FF 60 00 00 20 00 00
can0 412  [6] 1E 00 7A 00 8E 00
can0 2F1  [8] 00 00 79 00 00 00 00 00
can0 300  [8] 00 1B 80 89 9F FF 80 0A
can0 248  [8] 00 08 00 09 00 00 41 01
can0 236  [8] 0F FF 10 00 F0 00 00 39
can0 328  [8] 00 00 80 00 D8 80 FF FF
can0 330  [8] 0C FC FC FF FF FF 3F 89
can0 210  [8] 00 00 00 00 00 00 00 00
can0 308  [8] 40 02 B0 40 01 1F FF 00
can0 309  [7] 1F FF FF FF 0F FF 00
can0 312  [8] 67 EF 07 EF 09 BF 07 92
can0 356  [7] 3F FF 3F FF 0B B8 00
can0 7BC  [8] 40 00 00 00 00 00 00 00
can0 218  [8] 8E 38 DD 42 00 80 00 00
can0 338  [8] FF FF 00 FF FF 00 FF FF
can0 315  [7] 28 00 00 00 00 8D 00
can0 200  [8] 00 03 C0 00 C0 00 C0 00

但是,對(duì)于某些車輛,包括我的車輛,ODBII CAN 總線默認(rèn)是安靜的,并且只會(huì)對(duì)發(fā)送到總線的消息做出反應(yīng)。如果您也是這種情況,您可以通過使用“cansend”命令發(fā)送檢索車輛 VIN 號(hào)的消息來確認(rèn) CAN 是否正常工作。讓“candump”在第二個(gè)終端上運(yùn)行并返回到第一個(gè)終端。然后運(yùn)行:

sudo cansend can0 7DF#0209020000000000

在運(yùn)行“candump”的終端上,您應(yīng)該能夠看到與此類似的請(qǐng)求和響應(yīng):

root@beaglebone:~# candump can0
can0 7DF  [8] 02 09 02 00 00 00 00 00
can0 7E8  [8] 10 14 49 02 01 32 43 34
can0 484  [8] 03 7F 09 11 00 00 00 00

第二行的響應(yīng)“7E8”將最后 3 個(gè)字節(jié)設(shè)置為 32 43 34。如果我們將其從十六進(jìn)制解碼為 ASCII,我們會(huì)得到“2C4”,這實(shí)際上是我的車輛 VIN 的前 3 個(gè)數(shù)字。

您可以使用此在線 VIN 解碼器來確認(rèn)數(shù)據(jù)是否準(zhǔn)確:https ://vpic.nhtsa.dot.gov/decoder/Decoder

為獲取 VIN 號(hào)碼而發(fā)送的消息是“7DF#0209020000000000”。7DF 是 CAN 仲裁 ID(您想使用像這樣的大數(shù)字進(jìn)行測(cè)試,因?yàn)檩^高的數(shù)字具有較低的優(yōu)先級(jí))。“0209020000000000”是數(shù)據(jù)字段:

  • “02”:數(shù)據(jù)長度
  • “09”:服務(wù) ID 9
  • “02”:讀取 VIN 命令
  • “0000000000”被忽略

第一個(gè)“02”字節(jié)表示只有數(shù)據(jù)字段上接下來的兩個(gè)字節(jié)是命令的一部分。剩余的“00”字節(jié)全部被忽略;

如果您想嘗試手動(dòng)發(fā)送其他命令,請(qǐng)參考:https ://en.wikipedia.org/wiki/OBD-II_PIDs

現(xiàn)在您確認(rèn) can-utils 工作正常,讓我們使用 Python 發(fā)送更多命令。首先,確保您安裝了 python-can pip 模塊:

sudo python3 -m pip install python-can

然后,運(yùn)行get_vin.py以檢索您汽車的 VIN。這是get_vin.py的 Python 代碼

import can

bus = can.interface.Bus(bustype='socketcan', channel='can0', bitrate=500000)

service_int = 9
pid_int = 2
msg = can.Message(arbitration_id=0x7DF, data=[2, service_int, pid_int, 0, 0, 0, 0, 0], is_extended_id=False)
try:
    bus.send(msg)
    response = bus.recv(timeout=2)
    print(response)
except can.CanError:
    print("CAN error")
finally:
    bus.shutdown()

sudo python3 get_vin.py

隨意更改“ service_int ”和“ pid_int ”的值并測(cè)試OBDII PID 文檔中的其他命令。

檢索 GPS 數(shù)據(jù)

要測(cè)試您的 GPS 模塊,只需運(yùn)行:

tio /dev/ttyO2 -b 4800

你應(yīng)該得到一個(gè)類似這樣的數(shù)據(jù)流:

root@beaglebone:~# tio /dev/ttyO2 -b 4800
[tio 17:04:53] tio v1.32
[tio 17:04:53] Press ctrl-t q to quit
[tio 17:04:53] Connected
$GPGGA,170454.000,3500.87097,N,10641.14163,W,1,08,1.1,204.3,M,-34.0,M,,0000*69
$GPGSA,A,3,30,07,11,28,01,08,17,13,,,,,2.2,1.1,2.0*33
$GPRMC,170454.000,A,3500.87097,N,10641.14163,W,0.00,171.40,100520,,,A*79
$GPGGA,170455.000,3500.87097,N,10641.14163,W,1,08,1.1,204.3,M,-34.0,M,,0000*68
$GPGSA,A,3,30,07,11,28,01,08,17,13,,,,,2.2,1.1,2.0*33
$GPGSV,3,1,12,30,74,271,37,07,62,163,35,11,51,074,37,28,46,294,18*74
$GPGSV,3,2,12,01,41,120,31,08,30,049,31,17,26,226,27,13,23,302,28*73
$GPGSV,3,3,12,15,04,323,14,23,16,208,,19,03,224,,09,00,189,*77
$GPRMC,170455.000,A,3500.87097,N,10641.14163,W,0.00,171.40,100520,,,A*78
$GPGGA,170456.000,3500.87097,N,10641.14163,W,1,08,1.1,204.3,M,-34.0,M,,0000*6B
$GPGSA,A,3,30,07,11,28,01,08,17,13,,,,,2.2,1.1,2.0*33
$GPRMC,170456.000,A,3500.87097,N,10641.14163,W,0.00,171.40,100520,,,A*7B
[tio 17:04:56] Disconnected

按“ctrl-t q”退出。您的位置將在句子“GPRMC”上可用。例如,復(fù)制句子“ $GPRMC, 170454.000, A, 3500.87097, N, 10641.14163, W, 0.00, 171.40, 100520,,, A*79 ”并使用此在線解碼器對(duì)其進(jìn)行解碼:https ://rl.se/ gprmc

?
?
?
pYYBAGOab1CAK2m0AAL4eDuIhaU275.png
?
1 / 3 ?地圖上繪制的 GPS 坐標(biāo)
?

放大地圖,看看 GPS 數(shù)據(jù)有多準(zhǔn)確。

現(xiàn)在,讓我們使用 Python 做同樣的事情。確保您已安裝 pyserial 模塊:

sudo python3 -m pip install pyserial

然后,運(yùn)行get_gps_data.py以檢索您汽車的位置。這是get_gps_data.py 的 Python 代碼:

import time
import serial

gps_data = ""
utf_data = ""
ser = serial.Serial('/dev/ttyO2', 4800)
counter = 0
while utf_data.find("GPRMC") == -1:
    counter += 1
    try:
        ser_data = ser.readline()
        utf_data = ser_data.decode()
    except:
        utf_data = ""
    time.sleep(0.5)
    if counter > 50:
        break
ser.close()
if utf_data.find("GPRMC") != -1:
    utf_data = utf_data.replace('\r', '')
    utf_data = utf_data.replace('\n', '')
    gps_data = utf_data

print(gps_data)

sudo python3 get_gps_data.py

root@beaglebone:~# sudo python3 get_gps_data.py
$GPRMC,173439.000,A,3500.87097,N,10641.14163,W,0.00,348.52,100520,,,A*74

下一步是創(chuàng)建蜂窩 LTE 數(shù)據(jù)鏈路,這樣即使汽車不在我們的 WiFi 網(wǎng)絡(luò)范圍內(nèi),您也可以訪問 GPS 和 CAN 數(shù)據(jù)。

將 ChupaCarBrah 連接到蜂窩網(wǎng)絡(luò)

在本教程中,我使用 USB Hologram.io蜂窩調(diào)制解調(diào)器。隨意使用其他選項(xiàng)。我將使用 PPP 連接,因此 Python 客戶端可以將數(shù)據(jù)發(fā)送到在 AWS 上運(yùn)行的服務(wù)器應(yīng)用程序。確保已安裝 ppp,然后安裝 hologram-python:

sudo apt-get install ppp

sudo python3 -m pip install hologram-python

您還需要訂閱數(shù)據(jù)計(jì)劃并激活您的 SIM 卡。請(qǐng)參閱官方全息圖文檔以準(zhǔn)備好您的卡。

激活您的卡后,確保您的藍(lán)色 LED 指示燈亮起,并且調(diào)制解調(diào)器上的紅色 LED 指示燈閃爍。

pYYBAGOab1aAPZhJAA0Paqic0Hs180.png
蜂窩調(diào)制解調(diào)器:藍(lán)色和紅色 LED 亮起
?

然后,要連接和斷開與蜂窩網(wǎng)絡(luò)的連接,請(qǐng)運(yùn)行:

sudo hologram network connect

sudo hologram network disconnect

為了測(cè)試 Internet 連接,您可以使用單個(gè) ICMP 請(qǐng)求 ping Google:

ping -c 1 www.google.com

如果您收到回復(fù),則表示 ChupaCarBrah 已連接到蜂窩網(wǎng)絡(luò),并且它應(yīng)該能夠在您在 LTE 覆蓋范圍內(nèi)駕駛的任何地方(幾乎在美國的任何地方)泄露汽車數(shù)據(jù)。

現(xiàn)在,讓我們看看如何使用 Python 連接和斷開 Hologram 蜂窩網(wǎng)絡(luò)。運(yùn)行cellular_test.py腳本來檢查您的 LTE 數(shù)據(jù)與互聯(lián)網(wǎng)的連接。這是示例腳本cellular_test.py 的 Python 代碼:

import psutil
import time
import subprocess
from Hologram.CustomCloud import CustomCloud


def hologram_network_connect():
    hologram_network_disconnect()
    time.sleep(2)
    cloud = CustomCloud(None, network='cellular')
    cloud.network.disable_at_sockets_mode()
    res = cloud.network.connect()
    message = ""
    if res:
        message = "PPP session started"
    else:
        message = "Failed to start PPP"

    print(message)


def hologram_network_disconnect():
    print('Checking for existing PPP sessions')
    for proc in psutil.process_iter():

        try:
            pinfo = proc.as_dict(attrs=['pid', 'name'])
        except:
            print("Failed to check for existing PPP sessions")

        if 'pppd' in pinfo['name']:
            print('Found existing PPP session on pid: %s' % pinfo['pid'])
            print('Killing pid %s now' % pinfo['pid'])
            process = psutil.Process(pinfo['pid'])
            process.terminate()
            process.wait()


hologram_network_connect()
time.sleep(2)

ping_response = subprocess.Popen(["/bin/ping", "-c1", "-w100", "www.google.com"], stdout=subprocess.PIPE).stdout.read()
print(ping_response.decode())

time.sleep(2)
hologram_network_disconnect()

sudo python3 cellular_test.py

root@beaglebone:~# sudo python3 cellular_test.py
Checking for existing PPP sessions
PPP session started
PING www.google.com (216.58.201.228) 56(84) bytes of data.
64 bytes from par10s33-in-f4.1e100.net (216.58.201.228): icmp_seq=1 ttl=49 time=420 ms
--- www.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 420.049/420.049/420.049/0.000 ms
Checking for existing PPP sessions
Found existing PPP session on pid: 1559
Killing pid 1559 now

現(xiàn)在您知道如何使用 Python 發(fā)送和接收 CAN 消息了;獲取 GPS 位置;并連接到蜂窩網(wǎng)絡(luò);讓我們把它們放在一起,創(chuàng)建一個(gè)簡單的客戶端和服務(wù)器應(yīng)用程序來泄露所有數(shù)據(jù)。

ChupaCarBrah Python 應(yīng)用程序

我給你帶來了兩個(gè)非常簡單的 Python 腳本,它們可以作為一個(gè)框架來構(gòu)建更復(fù)雜的汽車黑客應(yīng)用程序。客戶端腳本基本上是我迄今為止介紹的所有示例 Python 腳本的組合。它將在 BeagleBone Blue 上運(yùn)行。服務(wù)器腳本是一個(gè)簡單的 Flask 應(yīng)用程序,它將在 AWS(Elastic Beanstalk)上運(yùn)行,并將使用 JSON 格式存儲(chǔ)和顯示所有泄露的數(shù)據(jù)。

客戶端腳本 - chupacarbrah.py

chupacarbrah.py客戶端腳本可以在這里找到使用以下 git 命令將其克隆到您的 BeagleBone:

git clone https://github.com/blupants/chupacarbrah.git

cd chupacarbrah

客戶端腳本從由變量“ obd2_csv_file ”定義的 csv 文件中讀取要執(zhí)行的 OBDII PID 命令列表。然后它解析命令以創(chuàng)建 CAN 消息。csv 文件格式包括一個(gè)“啟用”列,允許您啟用(設(shè)置為 1)或禁用(設(shè)置為零)您要執(zhí)行的特定 OBDII PID。默認(rèn)情況下,腳本使用simple.csv文件和以下命令子集:

  • 發(fā)動(dòng)機(jī)冷卻液溫度
  • 發(fā)動(dòng)機(jī)轉(zhuǎn)速
  • 車速
  • 進(jìn)氣溫度

文件obd2_std_PIDs_enabled.csv包含要啟用/禁用的所有可用 OBDII PID 命令。請(qǐng)確保您了解這些命令的作用,并在啟用額外命令之前知道您在做什么。

chupacarbrah.py 客戶端腳本將使用 csv 文件中的 OBDII PID 公式解碼所有響應(yīng),并將數(shù)據(jù)與 GPS 坐標(biāo)一起發(fā)布到 AWS 上的 Flask 應(yīng)用程序。確保在變量“ server_url ”上定義服務(wù)器 URL 。我們將很快介紹如何將服務(wù)器腳本部署到 AWS 以及如何獲取服務(wù)器 URL。

正確配置客戶端應(yīng)用程序后,您可以運(yùn)行它:

sudo python3 chupacarbrah.py

它將顯示從 CAN 響應(yīng)消息中解碼的當(dāng)前數(shù)據(jù),并每 1 分鐘將所有內(nèi)容發(fā)送到服務(wù)器。

poYBAGOab2GAdX1pAAME1KKpLlY437.png
ChupaCarBrah 監(jiān)控移動(dòng)的車輛
?

要停止客戶端并正常退出,請(qǐng)運(yùn)行:

sudo touch /tmp/stop

現(xiàn)在,讓我們?cè)O(shè)置服務(wù)器腳本來接收泄露的數(shù)據(jù)。

服務(wù)器腳本 - chupacarbrah_server.py

chupacarbrah_server.py腳本可以在這里找到。它將公開兩個(gè)端點(diǎn),以便您可以發(fā)送和獲取泄露的數(shù)據(jù):

發(fā)布 /api/v1/汽車

獲取 /api/v1/狀態(tài)

客戶端腳本將使用“POST /api/v1/cars”端點(diǎn)提交所有數(shù)據(jù)。然后,您可以在家中舒適地使用“GET /api/v1/status”從 Web 瀏覽器監(jiān)控 JSON 數(shù)據(jù)。

讓我們?cè)O(shè)置一個(gè)簡單的本地 Flask 應(yīng)用程序并在這兩個(gè)端點(diǎn)上運(yùn)行一些快速測(cè)試。在本教程的后面,我將展示如何將這個(gè)相同的本地應(yīng)用程序部署到 AWS。

在您的本地 PC 上,而不是 BeagleBone,創(chuàng)建一個(gè)項(xiàng)目目錄:

~$ mkdir eb-flask

~$ cd eb-flask

創(chuàng)建并激活一個(gè)名為“virt”的虛擬環(huán)境:

~/eb-flask$ virtualenv virt

~$ source virt/bin/activate

(virt) ~/eb-flask$

使用 pip install 安裝燒瓶:

(virt)~/eb-flask$ pip install flask==1.0.2

使用 pip freeze 查看已安裝的庫:

(virt) sacchetin@Sacchetins-MacBook-Air eb-flask % pip freeze
aniso8601==8.0.0
click==7.1.2
Flask==1.0.2
Flask-RESTful==0.3.8
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
pytz==2020.1
six==1.14.0
Werkzeug==1.0.1
(virt) sacchetin@Sacchetins-MacBook-Air eb-flask %

將 pip freeze 的輸出保存到名為 requirements.txt 的文件中。

(virt)~/eb-flask$ pip freeze > requirements.txt

將chupacarbrah_server.py下載到您的eb-flask文件夾并將其重命名為application.py:

curl "https://raw.githubusercontent.com/blupants/chupacarbrah_server/master/chupacarbrah_server.py" -o application.py

在本地運(yùn)行應(yīng)用程序進(jìn)行測(cè)試:

(virt) sacchetin@Sacchetins-MacBook-Air eb-flask % python3 application.py
* Serving Flask app "application" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

發(fā)送一些虛擬數(shù)據(jù)以確保一切正常。打開一個(gè)新終端并使用 curl 發(fā)送一些數(shù)據(jù):

curl --header "Content-Type: application/json" \
--request POST \
--data '{"car_uuid":"51f317ec266e4adb956212201f87ba52", "VIN": "2C4", "maker": "Generic", "log":{"timestamp":"20200501120000","GPS":"00"}}' \
"http://localhost:5000/api/v1/cars"

本地服務(wù)器將回復(fù) car_uuid,在本例中為:“51f317ec266e4adb956212201f87ba52”。打開瀏覽器,最好是 Firefox,因?yàn)樗馕?JSON,然后訪問http://localhost:5000/api/v1/status

pYYBAGOab2OAJFUuAAChMm-Mieo035.png
從本地 Flask 服務(wù)器中竊取的虛擬數(shù)據(jù)
?

如果您能夠看到剛剛使用 curl 發(fā)布的虛擬數(shù)據(jù),則意味著您的 Flask 應(yīng)用程序已準(zhǔn)備好部署到 AWS。

將 ChupaCarBrah 服務(wù)器應(yīng)用程序部署到 AWS

首先,您需要在 AWS 上創(chuàng)建一個(gè)帳戶并在您的計(jì)算機(jī)上安裝 AWS 客戶端。請(qǐng)?jiān)诖颂?/font>創(chuàng)建您的 AWS 賬戶。部署應(yīng)用程序所描述的步驟基于此處的官方AWS 文檔

確保您能夠登錄 AWS 控制臺(tái)。然后,安裝 AWS 客戶端:

python3 -m pip install awscli

python3 -m pip install awsebcli

使用 eb init 命令初始化您的 EB CLI 存儲(chǔ)庫:

~/eb-flask$ eb init -p python-3.6 flask-chupacarbrah --region us-east-2

可選,但強(qiáng)烈建議:再次運(yùn)行 eb init 以配置默認(rèn)密鑰對(duì),以便您可以使用 SSH 連接到運(yùn)行您的應(yīng)用程序的 EC2 實(shí)例:

~/eb-flask$ eb init

Do you want to set up SSH for your instances? (y/n): ySelect a keypair. 1) my-keypair 2) [ Create new KeyPair ]

創(chuàng)建一個(gè)環(huán)境并使用 eb create 將您的應(yīng)用程序部署到其中:

~/eb-flask$ eb create chupacarbrah-env

環(huán)境創(chuàng)建大約需要 5 分鐘。環(huán)境創(chuàng)建過程完成后,使用 eb open 打開您的網(wǎng)站:

~/eb-flask$ eb open

它將打開一個(gè)網(wǎng)絡(luò)瀏覽器并自動(dòng)加載新服務(wù)的 URL。復(fù)制 URL,返回到您的 BeagleBone,編輯客戶端腳本 chupacarbrah.py 并將變量“ server_url ”更改為您的 AWS 應(yīng)用程序的實(shí)際 URL。使用我的部署示例,“ server_url ”的值應(yīng)設(shè)置為:

global server_url
server_url = "http://chupacarbrah-env.eba-bdahj3wp.us-east-2.elasticbeanstalk.com/"

您的 URL 會(huì)有所不同,但格式應(yīng)該相似。在 BeagleBone 上重新啟動(dòng) chupacarbrah.py,從現(xiàn)在開始,它將開始向 AWS 發(fā)送數(shù)據(jù)。

您也可以將一些虛擬數(shù)據(jù)發(fā)送到您的 AWS 應(yīng)用程序以進(jìn)行測(cè)試。通過將 localhost:5000 替換為您設(shè)置變量“ server_url ”的相同值來重復(fù)“POST /api/v1/cars” curl 請(qǐng)求。例如:

curl --header "Content-Type: application/json" \
--request POST \
--data '{"car_uuid":"51f317ec266e4adb956212201f87ba52", "VIN": "2C4", "maker": "Generic", "log":{"timestamp":"20200501120000","GPS":"00"}}' \
"http://chupacarbrah-env.eba-bdahj3wp.us-east-2.elasticbeanstalk.com/api/v1/cars"

打開 Firefox 瀏覽器并再次訪問http://chupacarbrah-env.eba-bdahj3wp.us-east-2.elasticbeanstalk.com/ 您應(yīng)該會(huì)看到您發(fā)送的所有虛擬數(shù)據(jù)以及從 ChupaCarBrah 設(shè)備中提取的所有數(shù)據(jù)。

用你的新 ChupaCarBrah 設(shè)備破解汽車

我目前正在撰寫一系列關(guān)于汽車黑客攻擊的網(wǎng)絡(luò)安全文章。請(qǐng)繼續(xù)關(guān)注我的Medium 頁面,了解更多關(guān)于您今天剛剛構(gòu)建的 ChupaCarBrah 設(shè)備可以做的所有事情。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)