[ Megoldva ] Shell Bluetooth autó vezérlése

Van esélyem arra, hogy egy Shell Bluetooth matchboxot a laptopom bluetooth egységével vezéreljek?

Megpróbáltam felcsatlakozni a vezérlő app és az autó kommunikációjára, hátha visszafejthető, de úgy tűnik, ez csak külön hardverrel lehetséges.

Van valakinek ötlete, hogy külön hardver nélkül hogyan törhető fel a vezérlés kommunikációja?

Hozzászólások

Szerkesztve: 2020. 09. 30., sze – 13:06

Meg kell szerezni az APK-t, be/fel kell tolni valami reveng toolba, és remélni, hogy a holland srácok trógerek voltak és nem obfuszkálták a kódot.

Ja meg hogy nem natív kódot használtak a BT kezelésére.

Ugyanezzel a módszerrel fejtettem vissza az Ikea Idasen állóasztal vezérlését. Androidon bt debug módba, gyári alkalmazás nyomogat (asztal fel, le, stop, stb..), debug log telefonról letölt, wiresharkban órákig nézeget, pythonban implementál, tesztel, örül.

Mondjuk ott annyiból egyszerűbb volt a helyzet, hogy csak a fel/le/stop payloadot kellett kibányászni (ez egy állóasztal, amit fel-le lehet mozgatni egy motorral), illetve az időzítéseket.

Köszönöm, ez nagyon sokat segített! Sikerült dekódolnom az irányítást.

Ha valaki hasonlóba kezdene, pár lépés, ami nekem segített.

Először a btsnoop.log bluetooth logfájl elkészítése a telefonon, ahol a vezérlő alkalmazás fut. (Nálam [Samsung Android 5] a /Android/data/ mappában volt a telefonon).

Majd fájl átmásolása a gépemre.

A Wireshark, ami gyönyörűen olvassa ezt a fájlt.

A RPI-BLE-toy-control project, ami más kisautókat irányít shell scriptekkel. Innen a "hcitool lescan" parancs, ami kilistázza a bluetooth MAC adresseket, bár a MAC address a logból is kideríthető a Wireshark segítségével. Valamint a gatttool parancs, amiből nekem a következőket kellett használnom:

gatttool -b $MAC --primary -u $UUID

Ahol a UUID-t a Wireshark segítségével kerestem meg, anélkül, hogy ismertem volna a bluetooth protokoll rejtelmeit. Ez a parancs visszaadta a tól-ig értékeket, amivel a szervizekre hivatkozhatom. ( Esetemben 0x0010 és 0x001c. )

gatttool -b $MAC --char-read -a 0x0010

Amivel olvashattam volna az eszközről, ilyet egyelőre nem csináltam.

gatttool -b $MAC --char-write-req -a 0x0012 -n $VALUE

Ahol a 0x0012 az a szolgáltatás, ami nálam az autót vezérelte, és a $VALUE tartalmazza azt az értéket, amit az autó csinál. Ezeket szintén a Wireshark-ból olvastam ki, bár a végén egy plain text exporttal egyszerűbb volt scripttel kikeresni az export fájlból.

A konkrét parancsok a TTA protokollal kerülnek átküldésre, ami az exportban a következő formában található meg:

Bluetooth Attribute Protocol
    Opcode: Write Command (0x52)
    Handle: 0x0012 (Unknown: Unknown)
    Value: 025e695a48ff2a438ca680f83e04e45d

Innen kigyűjtve a Value értékeit, megkaptam az összes átküldött parancsot:

025e695a48ff2a438ca680f83e04e45d        Alapállapotba állít

29609c664852cff1b0f0cbb98014bd2c        Előre
e65567da8e6c560d09d3733a7f47ff06        Turbó előre
03209909ba9da1c8b986163c6d484655        Hátra
cec2ff1d7acc163cd13b7e6153ad5c45        Turbó hátra
9928e590dfe821485f414fbb633d5c4e        Előre és balra
51382112135cccdb46cf8921b705499a        Balra
0f2ce56662d4fd9d32a44f102bf20aa7        Előre és jobbra
98ce981d58d115afe11960bf4613925c        Hátra és balra
1b5769cdf13e8ab627080ff3cefc3bc0        Jobbra
f2520fba3144fb11468fe080c6c2c23c        Hátra és jobbra
592381c943a417ca1bc3b59400e0fc12        Turbó előre és balra
fb976fba04af87022226ec50ae82f8c4        Turbó előre és jobbra
d54ad55857d327745f141dd00d671595        Turbó hátra és balra
80dfb2165f3260f1d9837750f43a43da        Turbó hátra és jobbra

Érdekes, hogy minden kombinációnak külön kódja van, de ezeket elküldve egymás után, az autó szépen halad.

Köszönöm mindenkinek a segítséget!

Ha sikerül, ennek segítségével majd ifjú titánok fognak közelebbről ismerkedni az informatika rejtelmeivel ... ;)

Sziasztok,

Hakkolt végül valaki saját szoftvert az autóhoz?

Én elkezdtem, de random időközönként bontódik a kapcsolat (10-50 mpn belül a csatlakozás után).

Csináltam btmon trace-t ebből az látszik, hogy a szétcsatlakozást a telefonom kezdeményezi és az oka:

Remote User Terminated Connection 0x13

https://forum.sailfishos.org/uploads/db4219/original/2X/b/babb44722fba1…

A HCI traffic logolásán kívül nincs most más gearem (amivel mondjuk a rádiós forgalmat lehetne sniffelni).

Próbáltam kézenfekvő dolgokat: másik telefon (másik kernellel), kisebb "poll rate", notificaiton-ök letiltása, stb. de semmi nem segített.

Ja BTW: az akkufeszt is felküldi az autó AES encoded formátumban:

https://gist.github.com/scrool/e79d6a4cb50c26499746f4fe473b3768