Hogyan lehet feltörni egy autót - gyors ütközéses tanfolyam

A cikk célja, hogy elkezdje hackelni az autókat - gyors, olcsó és egyszerű. Ennek érdekében példaként hamisítjuk az RPM-mérőt.

Az alábbiak korántsem teljes körűek. Ehelyett éppen annyi információt kíván nyújtani, hogy elindulhasson. Ha mélyebbre akarsz ásni, a végén megnézheted a kötelező olvasmányokat.

Ha úgy dönt, hogy ezt az oktatást a való életben hajtja végre, akkor szüksége lesz egy Linux számítógépre (vagy egy virtuális Linux gépre) és egy CAN-USB eszközre (amelyet később megvizsgálunk).

Az autó hálózat

Az autó több számítógépből áll a motor, a sebességváltó, az ablakok, a zárak, a lámpák stb. Vezérlésére. Ezeket a számítógépeket elektronikus vezérlőegységeknek (ECU) nevezik, és hálózaton keresztül kommunikálnak egymással.

Például, amikor megnyomja a kormánykerék gombját a rádió hangerejének növeléséhez, a kormánykerék ECU parancsot küld a hangerő növelésére a hálózatra, majd a rádió ECU látja ezt a parancsot, és ennek megfelelően cselekszik.

Az autóban több hálózat van, általában legalább kettő:

  • Az egyik a kritikus adatok, például a motor és a hajtáslánc üzenetei számára
  • És az egyik a kevésbé kritikus adatokhoz, például a rádióhoz és az ajtózárakhoz

A kritikus hálózat gyors és megbízható protokollt használ, míg a nem kritikus hálózat lassabb, kevésbé megbízható, de olcsóbb protokollt használ. A hálózatok száma, valamint az ECU-k összekapcsolása az autó gyártmányától, modelljétől és évétől függ. Az ECU több hálózathoz is csatlakoztatható.

Csatlakozás hálózathoz

Egyes hálózatok az OBD-II porton keresztül érhetők el. Az OBD-II kötelező minden olyan autóra és könnyű teherautóra, amelyet 1996 után az Egyesült Államokban és 2004 után Európában gyártottak.

A csatlakozó a vezetőülés karjaiban érhető el. Lehet, hogy le kell emelnie néhány műanyag burkolatot, de mindig elérhető szerszámok nélkül.

Az OBD-II szabvány öt jelzési protokollt tesz lehetővé. A gyártó dönti el, melyiket használja. A CAN a legnépszerűbb, és ezt megvitatjuk. Az OBD-II csatlakozó 6. és 14. érintkezőjén keresztül érhető el. Ha autójában CAN busz van, akkor a csapokon fémvezetéseket lát, mint a fenti képen.

A CAN busz megbízható, nagy sebességű busz, amelyet kritikus adatok küldésére használnak. Sajnos a buszon lévő adatcsomagok nincsenek szabványosítva, ezért meg kell fordítani őket, hogy tudják, mit jelentenek. Az OBD-II szabvány teret enged az eladóspecifikus tűknek is, amelyek felhasználhatók a gyártói specifikus protokollokhoz. Ez megkönnyíti a kereskedő számára a problémák diagnosztizálását.

Az autómon (GM) van egy szabványos CAN-busz a 6. és 14. érintkezõknél, és egy gyártóspecifikus egyvezetékes CAN-busz az 1. érintkezõn. A szabványos CAN-busz megbízható, nagy sebességû (500 kbps) protokoll, amelyet nagy sebességű CAN (HS-CAN). Kritikus adatokhoz használják. Az egyvezetékes CAN busz (SW-CAN) vagy a GMLAN lassabb (33,3 kbps) és kevésbé megbízható, de olcsóbb, mivel csak egy vezetéket használ. Ezt a buszt nem kritikus adatokhoz használják.

Ha lát egy szállítóspecifikus PIN-kódot, és nem tudja, melyik protokollt használja, akkor a Google „OBD pinout”. Van alacsony sebességű CAN (LS-CAN) és közepes sebességű CAN (MS-CAN) is. Az MS-CAN általában a 3-as és 11-es csapokon áll, 125 kb / s sebességgel Ford és Volvo autókon.

Eszközök

Szüksége lesz mind a CAN adatok értelmezésére alkalmas eszközre, mind szoftverre az adatok elemzéséhez

Hardver

A CAN-csomagok fogadásához és továbbításához olyan eszközre van szükség, amely képes erre. Gyakran találkozhat ELM327 alapú eszközökkel. Míg ezeket használják, szörnyűek a hackelés miatt. Túl lassúak a CAN-busz felügyeletéhez.

Vannak olyan csúcskategóriás eszközök is, mint a Kvaser, a Peak vagy az EMS Wünsche. Ezek elvégzik a munkát, de túlteljesek és elég drágák.

Egyes csúcskategóriás eszközöknél szoftverek vásárlása szükséges. Az USB2CAN egy natív CAN interfész a Linux számára, amely nagyszerű ár-érték arányt kínál.

Használhatja a Cantactot vagy a CANUSB-t is. Ezek azonban nem natív CAN eszközök Linux alatt, és ASCII alapú protokollt használnak. Ez azt jelenti, hogy kissé bonyolultabb a beállításuk, és kisebb a teljesítményük. Másrészt jól támogatottak több operációs rendszerben.

A CANalyze-t használom, amelyet az én igényeimnek terveztem. Hasonlít az USB2CAN-hoz, mivel megfizethető natív CAN interfész, de egy újabb mikrovezérlőt használ, nyílt forráskódú és nyílt forráskódú eszközökkel felépíthető. Az oktatóanyag többi része feltételezi, hogy natív CAN interfészt használ.

Szoftver

Az eszközzel való kommunikációhoz telepítenie kell a can-utils csomagot a Linux gépére. Ezt úgy teheti meg, hogy beírja a következőket a Linux parancssorába:

sudo apt-get install can-utils

A Can-utils rendkívül megkönnyíti a CAN-csomagok küldését, fogadását és elemzését. Ezeket a parancsokat fogjuk használni.

  • A cansniffer csak a változó csomagokat jeleníti meg
  • candump dobja ki az összes beérkezett csomagot
  • cansend küldjön egy csomag

A Linux rendelkezik a kernelbe beépített CAN támogatással a SocketCAN-on keresztül. Ez megkönnyíti a saját további programok megírását. A CAN-busszal ugyanúgy léphet kapcsolatba, mint bármely más hálózattal, azaz aljzatokon keresztül.

CAN busz

A tolatás megkezdése előtt meg kell ismernie a CAN busz működését. 2 vezetékből áll, és differenciál jelzést használ. Mivel ez egy busz, több eszköz is csatlakoztatható ehhez a két vezetékhez. Amikor egy CAN keretet küld a buszra, azt minden ECU megkapja, de csak akkor dolgozza fel, ha hasznos az ECU számára. Ha egyszerre több CAN keretet küldenek, akkor a legmagasabb prioritású győz. A CAN keret 3 részből áll, amelyek relevánsak számunkra.

  • arbitration identifier Az üzenet azonosítója. Az ECU arra használja, hogy eldöntse a vett keret feldolgozását vagy figyelmen kívül hagyását. Ez az üzenet prioritását is képviseli. Az alacsonyabb számnak nagyobb prioritása van. Tehát, ha például mérnök lenne, aki a hálózatot tervezi, akkor a légzsákok kiépítésének kereteinek kiemelt prioritást vagy alacsony választottbírósági azonosítót adna. Másrészt alacsonyabb prioritású vagy magasabb választottbírósági azonosítót adna az ajtózárak számára szánt adatoknak.
  • adathossz kód (DLC) Az adatmező hosszát jelzi bájtokban. A CAN keret legfeljebb 8 bájt adatot tartalmazhat.
  • adatmező Legfeljebb 8 bájt adatot tartalmaz.

A CAN busz megfordítása

A CAN-busz visszafordításának általános megközelítése az utánozni kívánt viselkedés létrehozása és a viselkedést kiváltó üzenet megtalálása. Például tegyük fel, hogy a gépkocsin lévő sávtartó segédrendszer (LKAS) gagyi, és Ön elkészítette a sajátját.

Annak érdekében, hogy irányítsa a kormányzást, tudnia kell, milyen üzeneteket küldjön. Ennek kiderítésére az eredeti LKAS bekapcsolása, a CAN-busz figyelése és a kormány elforgatásáért felelős csomagok azonosítása szükséges. Miután azonosította ezeket a csomagokat, megkaphatja saját LKAS-jait, hogy ezeket a csomagokat a CAN buszra küldjék a kormánykerék irányítására.

Esetünkben meg akarjuk csalni a fordulatszámmérőt, ezért meg kell változtatnunk a fordulatszámot úgy, hogy a gépkocsival be van kapcsolva a gépkocsi be és szabadon, majd meg kell próbálnunk megtalálni az RPM megváltoztatásáért felelős csomagot.

Beállít

Csatlakoztassa a CAN eszközt az autó OBD-II és a számítógép USB portjához. Hozza létre a CAN interfészt a következő futtatásával a Linux parancssorában:

sudo ip link set can0 up type can bitrate 500000

amely az can0interfészt (mindig, can0ha csak egy eszköz van csatlakoztatva) 500 kbps bitsebességgel hozza fel , ami szabványos.

Azonosítani

Ha az autó ki van kapcsolva, az ECU-k általában alszanak, ezért be kell kapcsolnia az autót, vagy kiegészítő módba kell kapcsolnia. Megtekintheti a nyers CAN-adatokat, ha ezt futtatja a Linux parancssorában:

candump can0

Ez a CAN adatokat kinyomtatja a képernyőre, amint megkapja azokat. Ez azonban nagyon nem szervezett, és nagyon nehéz meglátni, hogy milyen csomagok felelnek meg egy bizonyos eseménynek. A program leállításához nyomja meg a ctrl + c billentyűkombinációt. Az adatok olvashatóbbá tételéhez használjuk a cansniffer programot, amely a csomagokat választottbírósági azonosító szerint csoportosítja, és csak a változó csomagokat mutatja. Az indításhoz futtassa a parancsot a Linux parancssorában:

cansniffer -c can0

ahol -cszínezi a változó bájtokat, és can0a szippantás interfésze. Néhány másodpercbe telik az állandó csomagok eltávolítása.

Valami hasonlót kellene látnia az alábbi képhez, bár a számok valószínűleg teljesen mások lesznek.

Az első oszlop (delta) azt a sebességet mutatja másodpercekben, amely alatt az adott választottbírósági azonosítóval rendelkező csomagokat fogadják. A második oszlop (ID) tartalmazza a választottbírósági azonosítót. A fennmaradó alfanumerikus oszlopok (adatok…) tartalmazzák az adat byte-okat. Ha az adatok ASCII reprezentációval rendelkeznek, akkor azok jobbra láthatók, különben pont.

Amikor járó motorral lép a gázkarra az RPM növelése érdekében, előfordulhat, hogy új CAN üzenetek jelennek meg a képernyőn, és / vagy a meglévők megváltoznak.

Meg kell találnunk egy CAN üzenetet, ahol a változó bájtok korrelálnak az RPM változásával. Valószínűleg számíthatunk arra, hogy az RPM növekedésével / csökkenésével az érték növekszik / csökken.

Az első CAN-keret a snifferben, amely az RPM-től függően változni látszik, az a választottbírósági azonosítójú keret C9. Valószínűleg több potenciális csomag létezik, amelyek az RPM-től függően változnak, ez csak az első.

Jelenleg 4 bájt változik (piros színnel) ebben az üzenetben, de ezek nem feltétlenül jelzik a fordulatszámot. 07Úgy tűnik, hogy a harmadik bájt variációi nem állnak összefüggésben a változó RPM értékkel. Az utolsó bájt 1Bigen.

Amint azonban levesszük a lábunkat a fojtószelepről, az megy 00. Ez azt jelzi, hogy ez a fojtószelep helyzetét képviseli, és nem az RPM-et.

Végül van a két bájt 21 C0, amelyek úgy tűnik, hogy megfelelnek az RPM változásának. Sőt, ez 16 bájtos egész számként változik, azaz amikor a második bájt C0túlcsordul, az első bájt 21eggyel nő. Úgy tűnik, hogy 21ez nagyjából 2000 RPM-nek felel meg. Ez jó megjegyezni, mikor fogja visszajátszani az üzenetet.

Visszajátszás

Ha van jelöltje, küldje el a CAN-buszra a következő paranccsal a Linux parancssorában:

cansend can0 0C9#8021C0071B101000

ahol a keret formátuma #{data}, és helyettesíteni kell a saját CAN üzenetével.

Az Ön autója járhat, vagy ehhez tartozék módban van. Ügyeljen arra, hogy olyan csomagot használjon, amelyet akkor kapott, amikor a motor nem jár alapjáraton, különben nem lát semmit változást, amikor újra játssza a motort alapjáraton.

Ha egyszer csak elküldi a csomagot, valószínűleg nem fog semmi változást látni a műszercsoportban. Ez azért van, mert az ECU továbbra is folyamatosan továbbítja a buszon 0,2 másodperces időközönként, így az üzenetét csak figyelmen kívül hagyja.

Emlékezzünk arra, hogy az árfolyamot a cansniffer első oszlopában adjuk meg. Kétféleképpen lehet ezt megkerülni, eltekintve az ECU lekapcsolásától, amely ezeket az üzeneteket generálja. Az egyik lehetőség a csomagok küldése sokkal nagyobb frekvencián, mint a jelenleg küldöttek. Ezt úgy teheti meg, hogy a következőket futtatja a Linux parancssorában:

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

és a CAN üzenet helyettesítése az Ön által azonosítottal. A leállításhoz nyomja meg a ctrl + c gombot.

Egy másik lehetőség a busz figyelése, és minden alkalommal, amikor észleli a becsapni kívánt csomagot, azonnal küldje el saját csomagját. Ez a Linux parancssorban történő futtatással tehető meg:

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

ahol ki kell cserélnie a CAN üzenetet, és 0C9az Ön által azonosított CAN üzenettel és annak választottbírósági azonosítójával. Kísérletezhet mindkét megközelítéssel, hogy melyik működik jobban.

Ha a fordulatszámmérő változik, jó munkát, megtaláltad! Ha nem, akkor azonosítsa a következő üzenetet, amely korrelál az RPM-mel, és játssza le újra.

Fuzzing

Most, hogy megvan a CAN keret, amely beállítja az RPM-et a műszercsoporton, játszhat az elküldött adatokkal, hogy lássa, mi történik. Megjegyeztük, hogy az RPM-nek megfelelő két bájt 16 bites egész számként viselkedik, így a fordulatszámmérő 8 k / perc sebességre állításához a következőket futtatjuk a Linux parancssorban:

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

és az eredmény:

Ez az! Most megpróbálhatja ugyanezzel a megközelítéssel vezérelni a sebességmérőt, a rádiót, a lámpákat, az ajtózárakat stb.

Lehetséges kérdések

  • Bár a CAN busz a legnépszerűbb hálózat, nem ez az egyetlen hálózat. Ha nem találja a keresett üzenetet a CAN buszon, próbáljon meg egy másik hálózatot. Különösen a nem kritikus üzenetek, például a rádió, a lámpák és az ajtózárak valószínűleg egy másik hálózaton lesznek.
  • Mint említettük, a CAN-on keresztül továbbított pontos adatok az autó gyártmányától, modelljétől és évétől függenek. Néhány autó számlálót használ a CAN üzenetben annak biztosítására, hogy ugyanazt az üzenetet ne dolgozzák fel többször. Ez valamivel nehezebb, de a megadott információkkal meg kell tudnia csinálni. Néhány autó ellenőrző összeget is használ az adatok integritásának biztosítása érdekében. Ennek az ellenőrző összegnek a kiszámítása nehéz lehet. Ha van Toyota, nézze meg az Adventures in Automotive Networks and Control Units (10. oldal), Checksum-Toyota oldalt. Mindenkinek el kellene olvasnia az egész papírt.
  • Amikor az azonosított csomagot a buszon visszajátssza, a CAN USB eszközre a „busz ki” állapotba kerülhet. Ez a CAN szabvány része, és akkor történik, amikor az eszköz túl sok hibát tapasztalt. Ez általában akkor történik, ha nagy a forgalom a buszon. Ennek kiküszöbölése érdekében késésekkel és időzítéssel játszhat, esetleg megpróbálja újra lejátszani az üzenetet, miután az autót kiegészítő módba helyezte, próbáljon várni egy kicsit, próbálja ki bekapcsolt autóval stb. Ha azonosította az ECU-kat csatlakozik a buszhoz, akkor húzza meg a biztosítékukat is, hogy megakadályozza őket az üzenetek küldésében, és csökkentse a busz forgalmát.

Olvasnia kell

  • Autóhacker kézikönyve
  • Charlie Miller és Chris Valasek kutatása, igen
  • A Kaliforniai Egyetem, San Diego és a Washingtoni Egyetem kutatása.

Ne felejtse el megtekinteni az Open Garages és videóikat is.