Kako hakirati automobil - brzi tečaj sudara

Cilj ovog članka je pokrenuti hakiranje automobila - brzo, jeftino i jednostavno. Da bismo to učinili, kao primjer ćemo podvaliti mjerač broja okretaja.

Sljedeće nipošto nije iscrpan vodič. Umjesto toga, cilj mu je pružiti tek toliko informacija da vas pokrene. Ako želite dublje kopati, na kraju možete provjeriti obavezna čitanja.

Ako se odlučite za provođenje ovog vodiča u stvarnom životu, trebat će vam Linux računalo (ili virtualni Linux stroj) i CAN-to-USB uređaj (o čemu ćemo kasnije raspravljati).

Automobil je mreža

Automobil se sastoji od više računala za upravljanje motorom, mjenjačem, prozorima, bravama, svjetlima itd. Ta se računala nazivaju elektroničkim upravljačkim jedinicama (ECU) i međusobno komuniciraju putem mreže.

Na primjer, kada pritisnete tipku na upravljaču da biste povećali glasnoću radija, ECU upravljača šalje naredbu za pojačavanje glasnoće na mrežu, a zatim ECU radija vidi tu naredbu i djeluje u skladu s tim.

U automobilu postoji više mreža, uglavnom najmanje dvije:

  • Jedan za kritične podatke poput poruka motora i pogonskog sklopa
  • I jedan za manje kritične podatke kao što su radio i brave

Kritična mreža koristi brzi i pouzdani protokol, dok nekritična mreža koristi sporiji, manje pouzdani, ali jeftiniji protokol. Broj mreža, kao i ECU-ovi koji su umreženi, ovisi o marki automobila, modelu i godini. ECU se također može povezati na više mreža.

Povezivanje s mrežom

Nekim se mrežama može pristupiti putem OBD-II priključka. OBD-II obvezan je za sve automobile i lagane kamione izrađene u SAD-u nakon 1996. i Europi nakon 2004. godine.

Konektor je na dohvat ruke vozačevog sjedala. Možda ćete trebati skinuti neki plastični poklopac, ali uvijek je dostupan bez alata.

OBD-II norma omogućuje pet signalnih protokola. Na proizvođaču je da odluči koji će koristiti. CAN je najpopularniji i o tome ćemo razgovarati. Dostupna je putem iglica 6 i 14 na OBD-II konektoru. Ako vaš automobil ima CAN sabirnicu, na iglama ćete vidjeti metalne vodove kao na gornjoj slici.

CAN sabirnica je pouzdana sabirnica velike brzine koja se koristi za slanje kritičnih podataka. Nažalost, podatkovni paketi na sabirnici nisu standardizirani pa ćete ih morati preokrenuti da biste znali što znače. OBD-II standard također ostavlja prostor za igle specifične za dobavljača koji se mogu koristiti za protokole specifične za dobavljača. To trgovcu olakšava dijagnosticiranje problema.

U svom automobilu (GM) imam standardnu ​​CAN sabirnicu na pinovima 6 i 14, a na pinu 1. Standardnu ​​CAN sabirnicu pouzdan je protokol velike brzine (500 kbps) koji se naziva i CAN velike brzine (HS-CAN). Koristi se za kritične podatke. Jednožična CAN sabirnica (SW-CAN) ili GMLAN je sporija (33,3 kbps) i manje pouzdana, ali jeftinija jer koristi samo jednu žicu. Ova sabirnica koristi se za nekritične podatke.

Ako vidite pin određenog dobavljača i ne znate koji se protokol koristi, Google “OBD pinout”. Postoje i CAN male brzine (LS-CAN) i CAN srednje brzine (MS-CAN). MS-CAN je općenito na pinovima 3 i 11, a trči brzinom od 125 kbps na automobilima Ford i Volvo.

Alati

Trebat će vam i uređaj koji može interpretirati CAN podatke, kao i softver za analizu podataka

Hardver

Da biste mogli primati i slati CAN pakete, potreban vam je uređaj koji to može. Često ćete naići na uređaje temeljene na ELM327. Iako ih koristi, užasni su za hakiranje. Oni su prespori da nadgledaju CAN sabirnicu.

Postoje i vrhunski uređaji poput Kvaser, Peak ili EMS Wünsche. Ovi će posao obaviti, ali pretjerani su i prilično skupi.

Neki vrhunski uređaji također zahtijevaju da zajedno s njim kupite i softver. USB2CAN je izvorno CAN sučelje za Linux koje nudi veliku vrijednost za novac.

Možete koristiti i Cantact ili CANUSB. Međutim, ovo nisu izvorni CAN uređaji u Linuxu i koriste ASCII protokol. To znači da ih je malo složenije postaviti i imaju manje performanse. S druge strane, dobro su podržani u više operativnih sustava.

Koristim CANalyze koji sam dizajnirao za svoje potrebe. Sličan je USB2CAN-u jer je pristupačno izvorno CAN sučelje, ali koristi noviji mikrokontroler, otvoren je izvor i može se graditi pomoću alata otvorenog koda. Ostatak ovog vodiča pretpostavlja da koristite izvorno CAN sučelje.

Softver

Da biste komunicirali s uređajem, morate instalirati paket can-utils na vaš Linux stroj. To možete učiniti tako što ćete u Linux naredbu upisati sljedeće:

sudo apt-get install can-utils

Can-utils izuzetno olakšava slanje, primanje i analizu CAN paketa. To su naredbe koje ćemo koristiti.

  • cansniffer prikazuje samo pakete koji se mijenjaju
  • candump izbaci sve primljene pakete
  • moze poslati paket

Linux ima CAN podršku ugrađenu u jezgru putem SocketCAN-a. To olakšava pisanje vlastitih dodatnih programa. S CAN sabirnicom možete komunicirati na isti način na koji biste komunicirali s bilo kojom drugom mrežom, tj. Putem utičnica.

MOŽE autobus

Prije nego počnete kretati unatrag, trebali biste malo razumjeti kako CAN sabirnica radi. Sastoji se od 2 žice i koristi diferencijalnu signalizaciju. Budući da je riječ o sabirnici, na ove dvije žice može se povezati više uređaja. Kada se CAN okvir pošalje na sabirnicu, primaju ga svi ECU-i, ali se obrađuje samo ako je koristan za ECU. Ako se istovremeno pošalje više CAN okvira, pobjeđuje onaj s najvišim prioritetom. CAN okvir ima 3 dijela koja su za nas relevantna.

  • identifikator arbitraže Identifikator poruke. ECU ga koristi za odlučivanje o obradi ili zanemarivanju primljenog okvira. Također predstavlja prioritet poruke. Niži broj ima veći prioritet. Tako, na primjer, ako biste bili inženjer koji dizajnira mrežu, dali biste okviru za postavljanje zračnih jastuka vrlo visok prioritet ili nizak arbitražni ID. S druge strane, podacima namijenjenim za brave na vratima dali biste niži prioritet ili veći arbitražni ID.
  • kod duljine podataka (DLC) Označava duljinu podatkovnog polja u bajtovima. CAN okvir može imati najviše 8 bajtova podataka.
  • polje podataka Sadrži do 8 bajtova podataka.

Obrtanje CAN sabirnice

Općeniti pristup okretanju CAN sabirnice jest generiranje ponašanja koje želite oponašati i pronalaženje poruke koja uzrokuje takvo ponašanje. Na primjer, recimo da je sustav pomoći u održavanju trake (LKAS) na vašem automobilu sranje i da ste ga sami napravili.

Da bi mogao upravljati upravljačem, morate znati koje poruke poslati. Način da se to shvati je uključivanje izvornog LKAS-a, nadgledanje CAN sabirnice i prepoznavanje paketa odgovornih za okretanje upravljača. Nakon što identificirate ove pakete, možete zatražiti da ih vaš vlastiti LKAS pošalje na CAN sabirnicu radi upravljanja upravljačem.

U našem slučaju želimo podvaliti tahometar, pa moramo promijeniti broj okretaja tako da nagazimo gas dok je automobil uključen i u neutralnom položaju, a zatim pokušati pronaći paket odgovoran za promjenu broja okretaja.

Postaviti

Priključite CAN uređaj u OBD-II priključak automobila i USB priključak računala. Podignite CAN sučelje pokretanjem sljedećeg u Linuxu:

sudo ip link set can0 up type can bitrate 500000

koji prikazuje can0sučelje (uvijek can0ako je povezan samo jedan uređaj) brzinom od 500 kbps, što je standardno.

Identificirati

Kad je automobil isključen, ECU-ovi obično spavaju, tako da morate uključiti automobil ili ga staviti u način dodatne opreme. Možete pogledati neobrađene CAN podatke pokretanjem ovog u vašem Linuxu:

candump can0

Ovo ispisuje CAN podatke na zaslon čim ih primimo. To je međutim vrlo neorganizirano i vrlo je teško vidjeti koji paketi odgovaraju određenom događaju. Možete pritisnuti ctrl + c da zaustavite program. Da bi podaci bili čitljiviji koristimo cansniffer koji pakete grupira prema arbitražnom ID-u i prikazuje samo pakete koji se mijenjaju. Da biste ga pokrenuli, pokrenite naredbu u vašem Linuxu:

cansniffer -c can0

gdje -cboji bajtove koji se mijenjaju i can0sučelje je za njuškanje. Uklanjanju stalnih paketa potrebno je nekoliko sekundi.

Trebali biste vidjeti nešto slično donjoj slici, iako će brojevi vjerojatno biti potpuno drugačiji.

Prvi stupac (delta) prikazuje brzinu u sekundama kojom se primaju paketi s tim arbitražnim ID-om. Drugi stupac (ID) sadrži arbitražni ID. Preostali alfanumerički stupci (podaci ...) sadrže bajtove podataka. Ako podaci imaju ASCII prikaz, to se može vidjeti s desne strane, inače je točka.

Kad nagazite gas pri uključenom motoru kako biste povećali broj okretaja, na ekranu se mogu pojaviti nove CAN poruke i / ili se mijenjaju postojeće.

Moramo pronaći CAN poruku gdje bajtovi koji se mijenjaju koreliraju s promjenom u RPM-u. Vjerojatno možemo očekivati ​​da će se vrijednost povećavati / smanjivati ​​kako se RPM povećava / smanjuje.

Prvi CAN okvir u cansnifferu koji se čini da varira s RPM-om je okvir s arbitražnim ID-om C9. Vjerojatno postoji više potencijalnih paketa koji se razlikuju ovisno o RPM-u, ovo je samo prvi.

Postoje 4 bajta koja se mijenjaju (obojena crveno) u ovoj poruci, ali ne moraju svi označavati RPM. 07Čini se da varijacije u trećem bajtu ne koreliraju s različitim RPM-ima. Posljednji bajt 1Bradi.

Međutim, čim maknemo nogu s leptira za gas, to ide u 00. To bi značilo da predstavlja položaj leptira za gas, a ne RPM.

Napokon, postoje dva bajta za 21 C0koja se čini da odgovaraju promjeni RPM-a. Štoviše, ona varira kao cijeli bajt od 16 bajtova, tj. Kada se drugi bajt C0prelije, prvi se bajt 21poveća za jedan. Također se čini da to 21odgovara otprilike 2000 o / min. Ovo je dobro napomenuti kada ćete ponoviti poruku.

Repriza

Jednom kada imate kandidata, pošaljite ga na CAN sabirnicu sljedećom naredbom u vašem Linuxu:

cansend can0 0C9#8021C0071B101000

pri čemu okvir ima format #{data} i mora biti zamijenjen vašom vlastitom CAN porukom.

Vaš automobil za to može biti u pogonu ili u načinu dodatne opreme. Obavezno upotrijebite paket koji ste dobili kad motor nije radio u praznom hodu jer inače nećete vidjeti ništa da se mijenja prilikom ponovnog reprodukcije dok je motor u praznom hodu.

Ako samo jednom pošaljete paket, vjerojatno nećete vidjeti ništa na instrument ploči. To je zato što ECU izvornu poruku i dalje neprestano šalje na sabirnicu u intervalima od 0,2 sekunde, tako da će vaša poruka biti samo zanemarena.

Podsjetimo da je stopa navedena u prvom stupcu kansifera. Postoje dva načina kako to zaobići, osim odspajanja ECU-a koji generira ove poruke. Jedna od mogućnosti je slanje paketa mnogo većom frekvencijom od onih koji se trenutno šalju. To možete učiniti pokretanjem sljedećeg u Linuxu:

while true; do cansend can0 0C9#8021C0071B101000; sleep 0.002; done

i zamjenjujući poruku CAN onom koju ste identificirali. Pritisnite ctrl + c da biste zaustavili.

Druga mogućnost je nadgledanje sabirnice i svaki put kad otkrijete paket koji želite lažirati, odmah pošaljite svoj vlastiti paket. To se može učiniti pokretanjem u vašem Linuxu upita:

candump can0 | grep " 0C9 " | while read line; do cansend can0 0C9#8021C0071B101000; done

gdje trebate zamijeniti CAN poruku i 0C9CAN porukom koju ste identificirali, a to je arbitražni ID. Možete eksperimentirati s oba pristupa kako biste vidjeli koji djeluje bolje.

Ako se tahometar promijeni, dobar posao, našli ste ga! Ako nije, identificirajte sljedeću poruku koja se odnosi na RPM i ponovite je.

Fuzzing

Sad kad imate CAN okvir koji postavlja RPM na instrument tabli, možete se igrati s podacima koje šaljete da biste vidjeli što će se dogoditi. Primijetili smo da se dva bajta koja odgovaraju RPM-u ponašaju kao 16-bitni cijeli broj pa da bismo postavili tahometar na 8 k / min, pokrenuli smo sljedeće u vašem Linuxu upita:

while true; do cansend can0 0C9#0080000000101000; sleep 0.002; done

a rezultat je ...

To je to! Sada možete pokušati kontrolirati brzinomjer, radio, svjetla, brave na vratima itd. Koristeći isti pristup.

Mogući problemi

  • Iako je CAN sabirnica najpopularnija mreža, to nije jedina mreža. Ako ne možete pronaći poruku koju tražite na sabirnici CAN, pokušajte s drugom mrežom. Pogotovo nekritične poruke kao što su radio, svjetla i brave vjerojatno će biti na drugoj mreži.
  • Kao što je spomenuto, točni podaci koji se prenose putem CAN-a ovise o marki automobila, modelu i godini. Neki automobili koriste brojač u CAN poruci kako bi osigurali da se ista poruka ne obrađuje više puta. To je malo teže, ali trebali biste to moći učiniti s navedenim informacijama. Neki automobili također koriste kontrolni zbroj kako bi osigurali cjelovitost podataka. Izračun ove kontrolne sume može biti težak. Ako imate Toyotu, pogledajte Avanture u automobilskim mrežama i upravljačkim jedinicama, str. 10, Kontrolni zbroj-Toyota. Svatko bi zaista trebao pročitati cijeli članak.
  • Pri ponovnoj reprodukciji identificiranog paketa na sabirnici, vaš CAN na USB uređaj može preći u stanje "isključeno sabirnice". To je dio CAN standarda i događa se kada je uređaj doživio previše pogrešaka. To se obično događa kada je u autobusu velika gužva. Da biste to zaobišli, možete se igrati s odgodama i vremenskim usklađivanjem, možda pokušajte ponovno reproducirati poruku odmah nakon stavljanja automobila u način dodatne opreme, pokušajte malo pričekati, pokušajte s uključenim automobilom itd. Ako ste prepoznali što su ECU-ovi spojeni na autobus, također možete povući njihov osigurač kako biste ih spriječili u slanju poruka i smanjili promet u autobusu.

Mora čitati

  • Priručnik za hakere automobila
  • Istraživanje Charlieja Millera i Chrisa Valaseka, da, sve
  • Istraživanje Sveučilišta u Kaliforniji u San Diegu i Sveučilišta u Washingtonu.

Svakako pogledajte i Otvorene garaže i njihove videozapise.