สารบัญ:

แฮ็คประตูโรงรถของคุณ: 5 ขั้นตอน
แฮ็คประตูโรงรถของคุณ: 5 ขั้นตอน

วีดีโอ: แฮ็คประตูโรงรถของคุณ: 5 ขั้นตอน

วีดีโอ: แฮ็คประตูโรงรถของคุณ: 5 ขั้นตอน
วีดีโอ: ถอดสเปค+ต้นทุน โรงรถบ้านลูกค้า ให้ดู l Live 08 ส.ค. 2022 2024, พฤศจิกายน
Anonim
แฮ็คประตูโรงรถของคุณ
แฮ็คประตูโรงรถของคุณ
แฮ็คประตูโรงรถของคุณ
แฮ็คประตูโรงรถของคุณ
แฮ็คประตูโรงรถของคุณ
แฮ็คประตูโรงรถของคุณ

ใครบ้างที่ไม่เคยฝันที่จะกลับบ้านเพียงแค่ใช้แอพโทรศัพท์ หรือสามารถฟังและคัดลอก data tram ได้? ฉันมีความสุขที่ได้แบ่งปันกับคุณในสิ่งที่ฉันได้รับรู้ และวิธีที่ฉันดำเนินการต่อไป ฉันเริ่มโครงการนี้หลังจากครั้งที่สองที่ฉันลืมกุญแจ…

แน่นอน การเข้ารหัส ประเภทของมอดูเลต ความถี่ของผู้ให้บริการ ข้อมูลการเชื่อมต่อบลูทูธ และข้อมูลที่ฉันจะแสดงในตัวอย่างไม่ใช่ต้นฉบับ ฉันไม่ต้องการให้มีผู้เข้าชม;-)

แอปพลิเคชั่นนี้ใช้กับวัตถุใด ๆ ที่สามารถรับข้อมูลดิจิทัลโดยคลื่นแม่เหล็กไฟฟ้า (ประตูโรงรถ รถยนต์ บานประตูหน้าต่างบางบาน…) ระบบทั้งหมดประกอบด้วยอ็อบเจ็กต์ที่เชื่อมต่อด้วยบลูทูธกับโทรศัพท์ วัตถุนี้สามารถส่งเฟรมเดียวกันกับรีโมตที่เกี่ยวข้องกับสิ่งที่เราต้องการแฮ็ก ฉันวางวัตถุนี้ไว้ในโรงรถของฉัน และฉันสามารถเชื่อมต่อกับมันจากภายนอกได้

ขั้นตอนที่ 1: อุปกรณ์

อุปกรณ์
อุปกรณ์
อุปกรณ์
อุปกรณ์

ภาษาที่ใช้: C++, MATLAB, typescript, C, html

ความรู้พื้นฐานด้านดิจิตอลอิเล็กทรอนิกส์และโทรคมนาคม/การประมวลผลสัญญาณ

ค่าใช้จ่าย: น้อยกว่า $ 35

ข้อกำหนดด้านฮาร์ดแวร์:

- NooELEC NESDR: สำหรับเก็บข้อมูล โมดูลราคาถูกมากนี้ทำการ demodulation แบบดิจิทัล ดังนั้นจึงพกพาสะดวก รุ่นนี้เข้ากันได้กับ MATLAB (18.95 เหรียญ)

www.nooelect.com/store/sdr/sdr-receivers/nes…

- Wemos Lolin32 lite: esp32 นี้เป็นไมโครคอนโทรลเลอร์ราคาถูก พร้อม Wifi และ Bluetooth เราจะไม่ใช้ Wifi ในแอปพลิเคชันนี้ แต่เป็นไปได้มากทีเดียว ($4.74)

wiki.wemos.cc/products:lolin32:lolin32_lit…

- CDSENET cc1101: เครื่องส่งวิทยุนี้ให้ความยืดหยุ่นสูงสุดแก่เรา ตั้งแต่ความถี่พาหะที่เลือกไปจนถึงประเภทของการมอดูเลต ($2.63)

www.aliexpress.com/item/2PC-Lot-E07-868MS1…

- สายไฟ ส่วนหัว อุปกรณ์เชื่อม แบตเตอรี่ lipo 3.7V สำหรับอิสระ ออสซิลโลสโคป และ/หรือตัววิเคราะห์ลอจิกสำหรับการดีบัก และบังเอิญ สมาร์ทโฟน…

ข้อกำหนดของซอฟต์แวร์:

- MATLAB/Simulink: สำหรับเก็บข้อมูล สามารถใช้ซอฟต์แวร์ทางเลือกอื่นๆ ได้ฟรี เช่น Audacity สำหรับการแสดงข้อมูลเป็นภาพ (ใบอนุญาต)

fr.mathworks.com/products.html?s_tid=gn_ps

- esp-idf toolchain: ใช้สำหรับตั้งโปรแกรม esp32 สามารถใช้ Arduino ide ได้ แต่ไม่อนุญาตให้มีอิสระมากเท่ากับที่เราจะใช้ (ฟรี)

esp-idf.readthedocs.io/en/latest/get-starte…

- TI SmartRF Studio: สิ่งนี้จะช่วยให้เรากำหนดค่าการลงทะเบียน cc1101 ตามข้อกำหนดของเรา (ฟรี)

www.ti.com/tool/SMARTRFTM-STUDIO

- Ionic: สำหรับสร้างแอพ คุณสามารถเลือกสร้างแอปแบบเนทีฟได้ แต่ Ionic ช่วยให้เราเรียกใช้แอปของเราได้ทั้งบนอุปกรณ์ Android และ IOS ด้วยรหัสเดียว ไม่ต้องการประสิทธิภาพในกรณีของเรา (ฟรี)

ionicframework.com/

- ไอเดียที่คุณชื่นชอบ…

ขั้นตอนที่ 2: การสอดแนมรีโมทคอนโทรล

การสอดแนมรีโมทคอนโทรล
การสอดแนมรีโมทคอนโทรล
การสอดแนมรีโมทคอนโทรล
การสอดแนมรีโมทคอนโทรล
การสอดแนมรีโมทคอนโทรล
การสอดแนมรีโมทคอนโทรล

เราจะเริ่มด้วยการสังเกตข้อมูลที่คำสั่งของรีโมทคอนโทรลสร้างขึ้น ในการทำเช่นนี้ เราจะใช้ดองเกิล rtl-sdr และเสาอากาศ:

fr.mathworks.com/hardware-support/rtl-sdr….

เมื่อไปที่ลิงก์นี้ คุณจะพบแพ็คเกจ MATLAB รวมถึงหนังสือฟรีที่อธิบายราคาทั้งหมดพร้อมคำอธิบาย เพื่อสรุปสิ่งที่เรากังวล ข้อมูลการส่งผ่านจะอยู่ในรูปแบบของสัญญาณ IQ: ข้อมูลในเฟส "I" รวมกับข้อมูลพื้นที่สี่เหลี่ยมจัตุรัส "Q" วิธีนี้อำนวยความสะดวกด้านโทรคมนาคม เราจะสนใจรับสัญญาณในเฟสเท่านั้น ตอนนี้เราจะรวบรวมข้อมูลทางกายภาพและดิจิทัลบนรีโมตคอนโทรล หากคุณพบเอกสารเกี่ยวกับรีโมตคอนโทรล ก็จะง่ายขึ้น ฉันไม่พบใด ๆ เพื่อให้สามารถสังเกตสัญญาณได้ชั่วคราว เราต้องรู้ว่าตัวพาความถี่ของสัญญาณที่ปล่อยออกมาคืออะไร เราจะใช้ตัวอย่างที่มาพร้อมกับเอกสารประกอบแพ็คเกจ "การวิเคราะห์สเปกตรัมด้วยวิทยุ RTL-SDR" เพื่อให้ทราบว่าความถี่ใดที่เราสังเกตเห็นกำลังสูงสุดเมื่อเราส่งคำสั่ง ในกรณีของฉันคือ 868.22 MHz ความถี่ "มาตรฐาน" สำหรับแอปพลิเคชันประเภทนี้อยู่ที่ประมาณ 868 MHz

ด้วยข้อบ่งชี้เหล่านี้ เราจะสามารถเขียนโค้ด MATLAB เพื่อกู้คืนข้อมูลได้ ภาพนี้แนบมาในรูปและแสดงความคิดเห็น ผลลัพธ์ช่วยให้เราค้นหาประเภทของการมอดูเลต: โดยการดึงข้อมูลดิบ แสดงผลหลังจากกู้คืนส่วนจริงของสัญญาณ เราสามารถอนุมานได้ว่ามันเป็น ASK / OOK การมอดูเลต อันที่จริง เราสังเกตว่าความถี่ไม่แปรเปลี่ยน อย่างไรก็ตาม สัญญาณมีแอมพลิจูดเพียงสองแอมพลิจูด: โมฆะและค่าคงที่ รหัสที่เหลือช่วยให้เรากู้คืนซองจดหมายของสัญญาณที่ได้รับ ทำให้อ่านรถรางได้ง่ายขึ้น เมื่อแสดงแล้ว เราสามารถกำหนดการปรับเบสแบนด์ได้: นี่คือการเข้ารหัสแบบแมนเชสเตอร์ (ดูรูปที่แนบมา) นอกจากนี้เรายังสามารถสรุปอัตราบอด (สัญลักษณ์ต่อวินาที) ข้อมูลทั้งหมดนี้ถูกรวบรวม เราสามารถรู้กรอบข้อมูล ในกรณีของฉัน ไบต์ที่พบคือ 249, 39, 75, 178, 45, 200 และซ้ำหลายครั้ง เพื่อให้แน่ใจว่าได้รับคำสั่งอย่างดี โชคดีที่โค้ดไม่หมุน กรอบข้อมูลจะเหมือนเดิมเสมอ

ขั้นตอนที่ 3: ส่งกรอบข้อมูลเดียวกัน

ส่งกรอบข้อมูลเดียวกัน
ส่งกรอบข้อมูลเดียวกัน
ส่งกรอบข้อมูลเดียวกัน
ส่งกรอบข้อมูลเดียวกัน
ส่งกรอบข้อมูลเดียวกัน
ส่งกรอบข้อมูลเดียวกัน

Texas Instruments cc1101 มีความยืดหยุ่นมากจนคุณยังคงบรรลุเป้าหมาย แม้ว่าการตั้งค่าที่คุณพบในขั้นตอนก่อนหน้านี้จะแตกต่างไปจากของฉันอย่างสิ้นเชิง แน่นอนคุณจะเห็นในเอกสารหน้า 2 (https://www.ti.com/lit/ds/symlink/cc1101.pdf) ที่อนุญาตให้ทำการมอดูเลต NRZ, แมนเชสเตอร์, FSK, ASK / OOK เพื่อเข้าถึง ความถี่ประมาณ 433 MHz หรือ 868 MHz และอื่นๆ อีกมากมาย ฉันแนะนำให้คุณอ่านเอกสารประกอบเพื่อทำความคุ้นเคยกับโมดูลนี้

ในลิงก์นี้ คุณจะพบตัวอย่างงานของ Loboris เกี่ยวกับการสร้างฟังก์ชันโดยใช้โมดูลนี้:

github.com/loboris/ESP32_CC1101/tree/maste…

เราจะเขียนโค้ดสำหรับ esp32 ด้วย esp-idf toolchain (ดูลิงก์ของขั้นตอนแรก) คุณสามารถเพิ่มไฟล์ของลิงก์ในไดเร็กทอรีย่อยคอมโพเนนต์ของโปรเจ็กต์ของคุณ ในการกำหนดค่า cc1101 ของเราอย่างถูกต้อง เราจะต้องแก้ไขการลงทะเบียน Texas Instruments มีซอฟต์แวร์ที่ให้คุณค่าของการลงทะเบียนตามการกำหนดค่าของเรา: SmartRF Studio

เกี่ยวกับฉัน ฉันระบุซอฟต์แวร์ที่ฉันต้องการเข้ารหัสแมนเชสเตอร์ ความถี่พาหะของฉันคือ 868.22 MHz ประเภทของการปรับของฉันคือ ASK / OOK … ฉันให้คุณป้อนพารามิเตอร์ของคุณ ในกรณีที่ไม่มีการเข้ารหัสเบสแบนด์ของคุณ คุณสามารถพิจารณาการเข้ารหัส NRZ โดยเพิ่มอัตราบอดอย่างเหมาะสม และปรับข้อมูล

เมื่อคุณกำหนดค่าของคุณแล้ว คุณมีทางเลือกมากมายเกี่ยวกับการใช้โมดูล: คุณสามารถใช้ฟังก์ชันที่ฉันเชื่อมโยงกับคุณ หรือสิ่งที่ฉันทำ ใช้แรงบันดาลใจจากโค้ดนี้เท่านั้น เพื่อกำหนดค่าทุกอย่างใน แบบโหดๆ (ดูรูปที่แนบมา) และใช้เฉพาะสิ่งที่เราต้องการเท่านั้น

เนื่องจากชิป cc1101 สื่อสารโดย SPI คุณจะพบในลิงก์ของโค้ดตัวอย่าง ไฟล์ส่วนหัว "spi_master_lobo.h" ซึ่งมีฟังก์ชันสำหรับการใช้ SPI ที่ง่ายกว่าถ้าคุณต้องใช้กับ toolchain เท่านั้น ฉันเข้าร่วมกับคุณในรูปแบบของการสื่อสาร CC1101 ใน SPI ภาพที่ถ่ายจากหน้า 30 ของแผ่นข้อมูล CC1101 สายสี่เส้นที่นำเสนอคือ: CS (Chip Select หรือ SS: Slave Select หรือที่นี่ CSn), CLK (หรือ SCLK, นาฬิกาที่จัดเตรียมโดยมาสเตอร์), MISO (หรือ SO, Master In Slave Out) และ MOSI (หรือ SI, Master Out Slave In) ในกรณีของเรา มาสเตอร์คือ ESP32 และสเลฟคือ CC1101 การสื่อสารเริ่มต้นเมื่อพิน CS ต่ำ โดยทั่วไป

อย่าลืมเปิดใช้งานในตัวเลือกคอมไพเลอร์ของเมนูกำหนดค่าข้อยกเว้น C ++ สำหรับการคอมไพล์

ขั้นตอนที่ 4: เชื่อมต่อกับระบบ

เชื่อมต่อกับระบบ
เชื่อมต่อกับระบบ
เชื่อมต่อกับระบบ
เชื่อมต่อกับระบบ
เชื่อมต่อกับระบบ
เชื่อมต่อกับระบบ

หากรหัสของคุณใช้งานได้ แสดงว่าคุณได้ทำสิ่งจำเป็นแล้ว ในส่วนนี้เราจะเน้นไปที่การสร้างแอพโทรศัพท์ที่เชื่อมต่อกับระบบ ทางออกที่น่าสนใจที่สุดคือการเชื่อมต่อด้วยบลูทูธ เพราะอนุญาตให้ใช้โปรโตคอลที่ใช้พลังงานต่ำ: Bluetooth Low Energy (BLE) โปรไฟล์ลำดับชั้นจะแสดงในรูปวาดที่แนบมา: เราจะอ่านและเขียนคำสั่งในลักษณะของบริการ และแน่นอนว่า esp32 และสมาร์ทโฟนของเรามีบลูทูธติดตั้งอยู่

ขั้นตอนนี้แบ่งออกเป็นสองส่วน: ส่วน esp32 และส่วนแอป ภาพที่แนบมาแสดงและอธิบายส่วนหลักของรหัส

คุณสามารถสร้าง UUID ของคุณได้โดยไปที่ลิงก์นี้:

www.uuidgenerator.net/

นี่คือตัวระบุที่จะให้การเข้าถึงบริการและคุณสมบัติของโปรไฟล์ BLE ของเรา

เกี่ยวกับโค้ด esp32 BLE Kolban ได้ทำงานที่ยอดเยี่ยมในการทำให้ฟังก์ชัน C++ ระดับสูงเหล่านี้เข้ากันได้:

github.com/nkolban/esp32-snippets/tree/mas…

คุณสามารถใส่ไฟล์เหล่านี้ในไดเร็กทอรีย่อยส่วนประกอบ มิฉะนั้น คุณจะต้องใช้เวลามากขึ้นเพื่อทำความเข้าใจวิธีใช้ BLE กับ esp-idf toolchain

โดยสรุปสิ่งที่คุณจะเห็นในโค้ด เราสร้างเซิร์ฟเวอร์ บริการ และคุณลักษณะด้วย UUID ที่เกี่ยวข้อง และเราเพิ่มคลาสการโทรกลับที่กำหนดไว้ใหม่ด้วยวิธีการเขียนที่เกี่ยวข้อง: เมื่อเราได้รับ "O" เราส่งคำสั่งเขียนไปที่ cc1101

แน่นอน อย่าลืมเปิดใช้งาน Bluetooth ในการกำหนดค่าคอมโพเนนต์ของ Menuconfig

ในส่วนของแอพ เราจะใช้ Framework Ionic คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในลิงค์ที่แสดงในขั้นตอนแรก และสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้ BLE กับ Ionic:

ionicframework.com/docs/native/ble/

และตัวอย่างที่เขียนโดย don:

github.com/don/ionic-ble-examples/tree/mas…

คุณสามารถแก้ไขตัวอย่างเช่น "เชื่อมต่อ" เราสแกนอุปกรณ์ในหน้าแรกและไปถึงหน้าที่สองหากเราเลือกอุปกรณ์ของเรา จากนั้นเราจะเข้าถึงอินเทอร์เฟซที่คุณสามารถเพิ่มปุ่มด้วยวิธีที่แสดงในรูปภาพ โดยจะส่งคำสั่ง "O" พร้อม UUID ที่เหมาะสม คุณยังสามารถเพิ่มวิธีการ "เปิดใช้งาน" ในตัวสร้างหน้าแรก โดยขอให้เปิดใช้งานบลูทูธเมื่อเริ่มต้นแอปพลิเคชัน

ฉันขอแนะนำอย่างยิ่งให้คุณสำรวจเว็บไซต์ Ionic และค้นหาส่วนประกอบทั้งหมด (ปุ่ม การแจ้งเตือน ช่องทำเครื่องหมาย…) เพื่อปรับปรุงแอปพลิเคชันของคุณ:

ionicframework.com/docs/components/#overvi…

ขั้นตอนที่ 5: เพิ่มประสิทธิภาพการใช้พลังงาน

เพิ่มประสิทธิภาพการใช้พลังงาน
เพิ่มประสิทธิภาพการใช้พลังงาน
เพิ่มประสิทธิภาพการใช้พลังงาน
เพิ่มประสิทธิภาพการใช้พลังงาน

เราเริ่มทำงานโดยใช้ปริมาณการใช้น้อย เรามาแก้ไขกัน

esp-idf toolchain ช่วยให้เราใช้การกำหนดค่า GUI, menuconfig: พารามิเตอร์จำนวนมากสามารถลดการใช้ esp32 ได้ ก่อนอื่น เนื่องจากเราไม่ต้องการ Wifi เราจึงสามารถปิดใช้งานได้ในการกำหนดค่าคอมโพเนนต์ ในโฟลเดอร์เดียวกัน ใน FreeRTOS คุณสามารถเลือก "เรียกใช้ FreeRTOS เฉพาะบนคอร์แรกเท่านั้น จากนั้นในเฉพาะ ESP คุณสามารถลดความถี่ของ CPU ลงเหลือ 80 MHz ฟังก์ชันทั้งหมดยังคงทำงานที่ความเร็วสัญญาณนาฬิกานี้ สุดท้าย คุณสามารถ ทำเครื่องหมายที่ "เปิดใช้งานตัวประมวลผลร่วมพลังงานต่ำพิเศษ (ULP) การกำหนดค่านี้ทำให้การใช้กระแสไฟเพิ่มขึ้นจากประมาณร้อย mA เป็นประมาณ 30 mA นี่ก็ยังมากเกินไป…

ESP32 สามารถจัดการกับการนอนหลับลึก มีเพียงแกนพลังงานต่ำเท่านั้นที่เปิดอยู่และรอการปลุก

ดูลิงค์ด้านล่างสำหรับรายละเอียดเพิ่มเติม:

esp-idf.readthedocs.io/en/latest/api-refere…

น่าเสียดาย ในเวอร์ชันล่าสุดของ esp-idf toolchain (3.0) การปลุกระบบเดียวที่มีให้คือโดยตัวจับเวลาและการหยุดชะงักของ GPIO โชคดีที่ Espressif สัญญาว่าเราจะปลุก BLE ในเวอร์ชันถัดไป (3.1)

คุณยังสามารถกำหนดให้ CC1101 อยู่ในโหมดสลีป โดยส่งคำสั่งที่เหมาะสมในการปิดอุปกรณ์ไปยัง SPI (ดูเอกสารข้อมูล cc1101 คำสั่ง SPWD หน้า 51) สำหรับการกำหนดให้อุปกรณ์อยู่ในโหมดสลีปหรือปลุกเครื่อง คุณอาจใส่พินการเลือกชิปของพิน SPI ให้ต่ำและสูง (ข้อมูลเพิ่มเติมในแผ่นข้อมูล)

การกำหนดค่าล่าสุดเหล่านี้ควรจะสามารถทำให้ปริมาณการใช้ของระบบต่ำกว่ามิลลิแอมแปร์…

สุดท้าย เพื่อให้ระบบใช้งานได้นานที่สุดโดยไม่ต้องชาร์จใหม่ หรือแม้แต่ทำงานเป็นเดือนอิสระ ให้เลือกแบตเตอรี่ 3.7V ที่มีมิลลิแอมแปร์ต่อชั่วโมงมากที่สุด โดยการวัดการใช้พลังงานของระบบของคุณ ด้วยจอแสดงผลของเครื่องกำเนิดไฟฟ้าหรือแอมมิเตอร์ที่เชื่อมต่อแบบอนุกรมก่อนขั้ว + ของระบบของคุณ คุณสามารถประมาณเวลาที่ระบบของคุณจะคงอยู่ได้!

แนะนำ: