- Dalam proses rekayasa balik untuk menghubungkan lampu LED Bluetooth LE murah ke Home Assistant, pengontrol menjadi tidak berfungsi saat menguji nilai efek tersembunyi pada string LED addressable 10M
- Dengan Bluetooth HCI snoop di Android dan Wireshark/tshark, paket BLE yang ditulis aplikasi ke lampu ditangkap, lalu byte kontrol dilacak dari permintaan tulis
btatt.opcode.method==0x12 - Paket dari aplikasi iDeal LED tidak tampak seperti nilai on/off sederhana, sehingga setelah mendekompilasi APK dan menelusuri tulisan analisis yang sudah ada, paket tersebut didekripsi menggunakan kunci AES tetap di dalam
libAES.so - Paket on/off yang sudah didekripsi diringkas sebagai header tetap dan perbedaan
1/0pada byte ke-5, lalu pola byte untuk fungsi warna, kecerahan, dan efek dicatat dengan menjalankannya berulang kali - Saat nilai 8-bit dikirim melebihi rentang 5-bit
0x1Fyang digunakan aplikasi untuk RGB, warna yang lebih terang menjadi mungkin, tetapi ketika nomor efek 12 dikirim, lampu mati dan iklan Bluetooth juga menghilang
Titik awal menghubungkan lampu BLE murah ke otomasi rumah
- Dengan asumsi bahwa perangkat yang berkomunikasi lewat Bluetooth LE dan memiliki aplikasi khusus bisa diintegrasikan ke sistem otomasi rumah, beberapa strip LED murah direkayasa balik
- Sebelumnya, strip LED 5M non-addressable dengan kontrol Bluetooth LE seharga £2.38 berhasil dihubungkan ke Home Assistant hanya dalam beberapa jam, dan kode terkait dipublikasikan di bj_led
- Pekerjaan rekayasa balik BLE untuk pengontrol LEDnetWF juga tersedia di lednetwf_ble
- Target kali ini adalah string LED addressable 10M yang ada di atas meja dan dikendalikan dengan aplikasi “iDeal LED”
- Aplikasinya punya banyak fitur dan bekerja cukup baik
- LED-nya kemungkinan WS2812 atau produk serupa
- Produk ini adalah lampu yang dibeli dari AliExpress
Menangkap byte BLE yang dikirim aplikasi
- Untuk mengendalikan perangkat dengan perangkat lunak sendiri, pertama-tama perlu melihat rangkaian byte yang dikirim aplikasi ke perangkat lewat Bluetooth
- Protokol lampu pada umumnya bisa terdiri dari header, byte perintah seperti on/off atau perubahan warna, dan footer yang mungkin berupa checksum
- Di Android, penangkapannya dilakukan dengan urutan berikut
- Mengaktifkan mode pengembang
- Memasang aplikasi lampu
- Mengaktifkan
Bluetooth HCI snoopdi pengaturan pengembang - Menjalankan aksi seperti menyalakan dan mematikan lampu di aplikasi
- Menyalin log ke komputer dengan
adb pull sdcard/btsnoop_hci.log .
- Saat log dibuka di Wireshark, byte yang dikirim ke lampu bisa dilihat
- Contoh filternya adalah
bluetooth.dst == ff:ff:ff:ff:ff:ff && btatt.opcode.method==0x12 - Alamat MAC harus diganti dengan MAC lampu yang sebenarnya
btatt.opcode.method==0x12berarti ada operasi tulis dari perangkat Android ke lampu
- Contoh filternya adalah
- Dengan tshark, nilai paket bisa langsung diambil dari terminal
tshark -r <filename> -T fields -e btatt.valueakan menampilkan payload yang ditulis ke pengontrol LED
Protokol iDeal LED yang tidak cukup hanya dengan replay sederhana
- Beberapa lampu menunjukkan pola yang hampir bisa dibaca langsung pada aksi on/off
- Contohnya berupa pengulangan
69 96 02 01 01dan69 96 02 01 00 - Byte terakhir berubah antara
1dan0untuk menandakan nyala dan mati
- Contohnya berupa pengulangan
- Lampu iDeal LED kali ini memiliki rangkaian byte yang jauh lebih panjang dan berulang, dan meskipun dua jenis paket untuk on/off bisa dibedakan, nilainya tampak seperti noise
- Jika tujuannya hanya menyalakan dan mematikan, replay dengan mengirim ulang rangkaian byte yang ditangkap apa adanya mungkin sudah cukup
gatttoolbisa digunakan untuk terhubung ke perangkat BLE dan mengirim byte- Handle tujuan pengiriman harus diperiksa di Wireshark
- Untuk kontrol yang lebih luas, struktur paket harus dipahami, sehingga analisis berlanjut ke aplikasi Android itu sendiri
Mendekompilasi APK dan menemukan kunci AES
- APK diunduh lalu dibuka dengan jadx untuk memeriksa kode aplikasinya
- Referensi AES terlihat di dalam sumber, sehingga muncul kemungkinan bahwa protokolnya terenkripsi
- Untuk data terenkripsi tersebut, diasumsikan beberapa hal berikut
- Ciphertext untuk aksi yang sama tidak berubah setiap saat, sehingga mungkin ada kunci yang konsisten
- Karena harus didekripsi cepat pada MCU berdaya rendah, kunci pendek akan menguntungkan
- Kuncinya mungkin bukan unik per perangkat, melainkan kunci tetap
- Aplikasi menyertakan pustaka AES terkompilasi bernama
libAES.so, dan ini tidak bisa dianalisis hanya denganjadx - Ditemukan tulisan analisis dari orang lain yang mendekompilasi pustaka AES dengan
ida freedan menemukan kunci tertanam, lalu kunci itu diuji - Saat didekripsi dengan mode AES ECB dari
Crypto.Cipher, paket on/off berubah menjadi bentuk yang bermakna- Nilai hasil dekripsi muncul seperti
05 54 55 52 4E 01 ...dan05 54 55 52 4E 00 ... - Setelah header tetap, byte ke-5 berubah antara
1dan0untuk menunjukkan on/off - Sisanya diisi nol
- Nilai hasil dekripsi muncul seperti
- Mulai tahap ini, paket yang dikirim aplikasi bisa didekripsi dan kontrol yang sama bisa direproduksi di kode buatan sendiri
Mencatat pola byte untuk tiap fungsi
- Cakupan protokol diperluas dengan menjalankan semua fungsi aplikasi satu per satu dan mencatat byte yang dikirim
- Setiap aksi diulang beberapa kali, dan pola mematikan/menyalakan lampu disisipkan untuk menandai batas antarbagian
- Warna diubah ke red, green, blue beberapa kali berturut-turut
- Kecerahan diubah ke 100%, 50%, 10%, 50%, 100%
- Di antara tiap kelompok, off/on dimasukkan agar batasnya mudah ditemukan di log tangkapan
- Dengan cara ini, bisa diketahui byte mana yang berubah sesuai aksi, lalu aksi yang dicatat dapat dicocokkan dengan paket yang tertangkap
Nomor efek 12 yang membuat pengontrol brick
- Saat menyelidiki perubahan warna, ditemukan bahwa aplikasi tidak pernah mengirim nilai lebih besar dari
0x1Funtuk nilai red, green, blue0x1Fadalah rentang 5-bit- Saat nilai 8-bit dikirim langsung, warna yang lebih terang bisa berfungsi
- Untuk memeriksa apakah ada efek tambahan di luar 10 efek yang digunakan aplikasi, loop
range(20)dijalankan untuk mengirim nomor efek secara berurutan- Dari 1 sampai 10 semuanya berjalan normal
- Di 11 ditemukan perilaku yang tampak seperti mode tersembunyi
- Saat berlanjut ke 12, lampu mati
- Setelah itu lampu tidak bisa menyala lagi
- Tidak lagi menyiarkan iklan Bluetooth
- Juga tidak bisa dihubungkan
- Menahan tombol saat menyalakan daya pun tidak memulihkannya
- Bahkan setelah dicabut semalaman, perangkat tidak kembali normal
- Diduga firmware rusak karena buffer overflow, tetapi penyebab pastinya belum dipastikan
- LED itu sendiri adalah LED addressable standar, jadi string-nya masih bisa dipakai ulang dengan menghubungkannya ke mikrokontroler lain
Hasil yang tersisa dan hal yang perlu diwaspadai
- Meski gagal, sebagian besar protokol berhasil didokumentasikan, dan dibuat proyek GitHub yang mencakup komponen kustom Home Assistant
- Komponen tersebut berfungsi, tetapi eksperimen dengan cara yang sama bisa merusak pengontrol lampu, jadi semuanya harus dilakukan dengan risiko masing-masing
1 komentar
Komentar Hacker News
Tampaknya bukan “header tetap” FTA, melainkan byte panjang (“perintahnya 5 byte”), dengan perintah
TURN, argumen 0/1, lalu sisanya diisi 0 sampai 16 byte54 55 52 4Elangsung terlihat sebagai alfabet kapitalTURNKalau tahu bahwa angka dimulai dari
0x30, huruf kapital dari0x41, dan huruf kecil dari0x61, lebih mudah menemukan pola alfanumerik dalam dump heksadesimalPengetahuan seperti ini berguna untuk string pendek, tetapi saat melihat paket atau dump memori, format hexdump standar adalah yang terbaik
0x54 55 52 4EmemangT U R NuintBisa jadi ini masalah catu daya. Seri WS281x bisa dinyalakan sangat terang, dan kalau banyak digabung, konsumsi arusnya luar biasa besar
Untuk strip berisi 100 LED, catu daya 12V 3A hanya cukup pas-pasan untuk menyalakan semuanya putih pada kecerahan maksimum, dan itu sangat menyilaukan
Jadi saya mungkin akan memeriksa sekring yang putus terlebih dahulu. Fakta bahwa firmware hanya memakai hingga 31 dari kecerahan maksimum 255 juga merupakan petunjuk
0x1f, saya juga awalnya berpikir begitu. Kalau beruntung, catu dayanya punya sekring dan hanya sekringnya yang putusKalaupun tidak bisa diselamatkan, rangkaian LED WS281x standar bisa dihubungkan ke Raspberry Pi, dan pengontrol LED beralamat open source saya juga bisa dipakai :) https://github.com/mbevand/ledthemfight
Ada efek bawaan, dan dibuat sangat modular untuk DIY sehingga cukup dua baris Python untuk membuat modul efek LED kustom sederhana. Demonya di sini: https://youtu.be/qpd2rILsnM4
12V, merah, hijau, biruSepertinya ini strip RGB analog, bukan beralamat individual, sehingga seluruh strip menyala dengan warna yang sama
https://www.aliexpress.com/item/1005005485885067.html
Siapa pun yang ingin mengutak-atik lampu LED wajib melihat WLED. Efek bawaannya banyak, ada GUI web, memakai ESP32 atau ESP8266 yang sangat murah sebagai pengontrol, dan bisa juga bereaksi terhadap suara. Saat ini saya menjalankan WLED pada lampu Natal dalam ruangan, dan hasilnya terlihat sangat bagus
Itu cara yang rapi untuk membatasi penggunaan daya
Tulisan yang bagus. Saya ingat pernah mencoba melakukan rekayasa balik pada lampu yang saya punya, lalu mengetahui bahwa lampu itu terenkripsi
Salah satunya amaran 60d dan sisanya beberapa lampu LED baterai SmallRig RM75; saya ingin menyalakan dan mematikan semuanya dengan satu skrip tanpa harus membuka dua aplikasi terpisah
Saya menghabiskan cukup banyak waktu merekayasa balik aplikasi dan protokolnya, dan tampaknya kedua lampu memakai prosedur negosiasi yang sama tetapi diimplementasikan dengan pustaka yang berbeda
Saya mencoba meniru pertukaran kunci Diffie-Hellman yang dilakukan saat koneksi, tetapi akhirnya menyerah. Seingat saya, setelah itu masih ada satu atau dua tahap lagi, dan setelah mengirim kunci pertama, perangkat mengirim angka lain yang tampak acak (kunci lain?) tetapi saya tidak berhasil mencari tahu apa yang diinginkannya
Membaca tulisan ini membuat saya berpikir untuk mencoba memasukkan saja kunci yang di-hardcode dan melihat apakah itu berfungsi
Kalau ada integrasi open source untuk Elgato Stream Deck atau Home Assistant, itu akan menjadi kisah sukses besar. Bagi orang-orang YouTube yang merekam video talking head di meja, itu akan jauh lebih baik daripada mengontrol lampu lewat aplikasi ponsel
Saya mencoba mengotomatiskan lampu Natal yang terhubung lewat BLE, lalu menciptakan limbah elektronik. Sekarang Anda juga bisa melakukannya
Saya tidak tahu di iPhone, tetapi di Android, kalau dibiarkan berjalan di latar belakang, ia bisa menangkap aktivitas BLE dalam GUI ponsel yang rapi. Saya memakainya setiap hari
Ini mengingatkan saya pada MCU keyboard yang menjadi brick saat menerima perintah pencahayaan tertentu
OpenRGB akhirnya harus menonaktifkan modul itu agar tidak dijalankan otomatis pada perangkat keras tersebut. Kadang perangkat lunak dari produsennya sendiri juga memicu bug yang sama
Sayangnya, untuk masuk ke mode pemrograman dalam sistem biasanya perlu mengirim laporan USB HID, sementara perangkat yang terdampak bahkan tidak lagi terenumerasi
Apakah itu benar-benar kerusakan firmware, atau perangkat kerasnya rusak karena perilaku tak terdefinisi lain, itu persoalan terpisah
“Mengirim plaintext lewat nirkabel itu tidak aman, kan?”
“Tenang, kami sudah menambahkan enkripsi AES”
Karena memang begitu metode pairing-nya. Aplikasi membroadcast paket secara membabi buta ke
255.255.255.255, dan perangkat target (bohlam, stopkontak, dll.) menunggu dalam mode promiscuousIsi paket dilindungi oleh WPA2 dan semacamnya, tetapi panjang paket tidak dilindungi, jadi aplikasi mengirim sangat banyak paket mungil dengan panjang masing-masing paket disetel ke nilai byte ASCII dari karakter berikutnya dalam handshake konfigurasi. Mungkin dikirim berulang kali
Itulah sebabnya pairing memakan waktu 2 menit lalu selalu tiba-tiba berhenti sebelum penghitung mencapai 0
Ini yang benar-benar saya khawatirkan tahun lalu saat melakukan rekayasa balik pada BLE controller perapian saya
Terutama karena perintah “Set password” menerima input byte mentah, sementara aplikasi OEM hanya mengirim data numerik dengan batas panjang
Untungnya, sepertinya jika daya terputus sebentar, perangkat itu melupakan semua yang pernah terjadi sebelumnya
Jadi sebagian besar BLE controller dari merek yang sama tampaknya tetap memakai kata sandi bawaan
0000. Begitu listrik padam sekali, akhirnya kembali ke kondisi itu. Kalau benar-benar sedang iseng, ini bisa jadi bahan BLE wardriving yang lumayan menarikSaya juga mengubah hasil rekayasa balik itu menjadi integrasi Home Assistant (https://github.com/kaechele/napoleon-efire), dan juga menulis dokumentasi sistem serta protokolnya (https://bonaparte.readthedocs.io/en/latest/index.html)
Saya sedang mencari lampu yang fleksibel dan kuat untuk dipasang di roof rack mobil
Harus bertenaga baterai dan cocok untuk luar ruangan/segala cuaca, dan akan bagus kalau kotak baterainya bisa mudah ditempelkan ke permukaan dengan cable tie
Kalau bisa, saya ingin form factor
T5“mini”, RGB dan bisa diprogram, supaya bisa dipakai sesuai musim: merah/hijau untuk Natal, ungu/oranye untuk Halloween, dan seterusnyaSaya penasaran apakah ada yang tahu produk yang memenuhi syarat ini. Tiga syarat pertama bisa ditemukan di Walmart atau Home Depot, tapi sulit menemukan yang memenuhi syarat terakhir
Hasil pencarian hanya penuh noise
[1] https://cdn.christmaslightsetc.com/images/CategoryDetail/788...
Misalnya, LED strip 12V dengan waterproof IP67 (model yang dimasukkan ke dalam tabung silikon) mudah didapat [0], dan jumlah LED-nya jauh lebih banyak daripada string seperti lampu Natal, jadi efeknya juga akan lebih kuat
Namun Anda harus membeli dan memprogram mikrokontroler seperti Arduino, ESP32, atau ESP8266, lalu menyelesaikan sendiri cara mengambil daya dari aki mobil [1]
Komponen elektroniknya bisa ditaruh di dalam mobil dan hanya kabelnya yang dikeluarkan lewat bagasi, sehingga Anda mungkin bisa mengandalkan seal bagasi yang ada untuk kedap air
[0] https://www.aliexpress.com/item/1005004289391906.html
[1] https://www.aliexpress.com/item/1005005977505151.html
Juga mudah disolder ulang dengan kabel ekstensi atau disambung berantai
https://www.aliexpress.com/item/4000105913323.html
Dari yang saya baca, produk seperti ini atau lampu 5V serupa tampaknya dipakai seperti standar dalam pertunjukan lampu Natal outdoor
#projectsserta#showcase. Ada banyak proyek pemasangan lampu RGB LED di kendaraanTapi hati-hati, bidang ini mudah sekali membuat ketagihan
Link undangan: https://discord.gg/eVhhh2Wh
Bisakah kita melihat pembongkaran lampu Natal yang rusak itu?
Kalau tahu chip apa yang ada di dalamnya, itu bisa memberi petunjuk apakah ada memori flash dan apakah mudah untuk di-dump