Hackear en un vehículo puede transportar (toyothack y socketcan) reparación de parachoques de uretano fabiobaltieri

Si es nuevo en los buses de campo, el bus CAN puede parecer extraño a primera vista. El bus se implementa físicamente como un par trenzado diferencial terminado con una referencia a tierra, y generalmente se encuentra en una topología de caída de troncal, donde muchos nodos están conectados a un cable troncal principal con líneas de bajada cortas, a veces usando uniones en T. El bus funciona hasta 1mbps, y la velocidad influye directamente en la longitud máxima del bus.

La idea detrás de esto es que la dirección se utiliza para identificar el tipo de trama (es decir, cuál es el significado de la carga útil), y todos los nodos del bus pueden enviar y recibir cualquier tipo de trama. Como el bus puede tener mucho tráfico, pero la mayoría de los nodos solo se preocupan por algunos identificadores de trama específicos y el precio de la onda de bithein ethereum no tiene los recursos computacionales para manejar el tráfico completo, cada controlador de bus CAN implementa algún tipo de “filtro de aceptación” ”, Que suele ser una máscara de bits para decidir qué rango de direcciones de trama debe recibir el nodo, mientras que todas las demás se descartan en silencio.

Al mismo tiempo, nada le prohíbe al diseñador asignar algunas direcciones de trama para una comunicación de punto a punto lógico entre dos nodos específicos, e implementar un protocolo de flujo sin precedentes: de hecho, eso es lo que se hace en el estándar ISO-TP protocolo, e incluso hay una aplicación de ejemplo de socketcan para ejecutar un completo dispositivo de red de Linux encima de él.

Por esta razón, los autos complejos generalmente tienen más de un autobús, a menudo corriendo a una velocidad diferente. Como un ejemplo que encontré en un automóvil FIAT, un bus está funcionando a una velocidad relativamente alta (500 kbps) y está cableado solo en la parte delantera del automóvil que conecta sistemas críticos, como el control del motor, el ABS, la dirección asistida, etc. Un bus adicional funciona a una velocidad mucho menor (50 kbps), lo que permite segmentos de conexión más largos, y solo lo utilizan los equipos no críticos, como el tablero de instrumentos, el estéreo, las ventanas eléctricas, las luces, los sensores de estacionamiento, etc. Este también está conectado a el par CAN del conector de diagnóstico OBD, lo que facilita su acceso.

La idea detrás de OBD es que, como los vehículos modernos dependen en gran medida de la electrónica y tienen muchas capacidades de autoprueba, un protocolo común debería permitir que un centro de servicio lea un código de error estándar para ayudar a solucionar problemas. Una vez que la ECU detecta que el valor de la descarga de un sensor está fuera de un rango “seguro”, el sistema puede almacenar un código de error y alertar al conductor al encender la conocida luz amarilla “revisar motor”. En este punto, un centro de servicio debería poder conectar un escáner genérico al puerto OBD estándar del vehículo, y eso debería dar una indicación de lo que ha fallado en el historial del vehículo.

¿Cómo se relaciona eso con el bus CAN? El OBD se implementó originalmente a través de un simple protocolo específico del proveedor, en el momento en que cuando se definió el conector OBD-II estándar, se soportaron muchos buses diferentes, incluido el bus CAN, en el mismo cable, y se necesitó un escáner genérico para soportar todos esos y adivina cuál se usa en un vehículo específico (ver ELM327).

Entonces, ¿qué puede esperar encontrar una vez que acceda a ese bus con su interfaz de bus CAN? No puede decirlo hasta que lo intente, porque aparte de los datos OBD (que de todos modos no envían nada por sí mismos), el proveedor puede utilizar el autobús para cualquier otra cosa: puede ser el único autobús del automóvil. en qué caso obtiene muchos datos, o puede estar dedicado para el diagnóstico, y en este caso no obtiene nada.

Si estás leyendo esto solo para divertirte y aprender más sobre las agallas digitales de tu auto, no encontrarás datos OBD tan interesantes, ya que eso es principalmente diagnóstico. En el otro lado, si logra conectar y configurar su interfaz correctamente, active el encendido y vea un flujo de datos, eso significa que el bus en el que se encuentra también se comparte con otros ecus de vehículos, y ahí es donde ¡La diversión comienza!

Entonces, para resumir: la mayoría de los automóviles modernos tienen muchos buses digitales, y al menos uno es un bus CAN y está expuesto en el conector de diagnóstico estándar. Puede adjuntar una interfaz genérica y enviar datos OBD genéricos de acceso, pero si el proveedor decide usar ese bus para otra cosa, también encontrará una secuencia de marcos específicos del proveedor, con sensor en tiempo real e información de control, esperando para ser invertido de ingeniería.

Desde el punto de vista de una aplicación, esta gran noticia, ya que significa que el bus CAN se maneja con las conocidas apis de berkley sockets y tiene total portabilidad de software: no hay diferencia de API entre una interfaz USB conectada a una estación de trabajo grande o una Interfaz mapeada de memoria en un pequeño ARM soc. El “truco” principal es que cuando se utiliza una interfaz de socketcan, la aplicación realmente envía y recibe una estructura específica de can_frame, definida como:

En un nivel bajo, esto también significa que el controlador de la interfaz se está ejecutando con un filtro de aceptación completamente abierto, por lo que el núcleo realmente recibe todos los datos del bus y decide si enviar marcos a cualquier aplicación que dependa de un filtro de software de nivel superior, pero eso suele ser no es un problema, ya que las socs modernas habilitadas con fosfatidiletanolamina son lo suficientemente poderosas para manejar el tráfico completo de todos modos.

De todo esto, solo he tenido una experiencia con el EMS, pero es bastante caro y quizás más difícil de obtener, por lo que el que compraría ahora es el USB2CAN de 8 dispositivos: es barato, puede obtener uno en la tienda web y proporcionan esquemas completos y actualizaciones de firmware. También hay un repositorio con el código fuente del dispositivo real, pero eso no sirve de nada sin el entorno de programación correcto.

Lo primero que necesita además de una computadora portátil y la interfaz de bus CAN es un cable que coincida con el puerto OBD-II. Tengo un cable OBD a DE-9 de sparkfun, pero también puede encontrar uno adecuado de su proveedor de interfaz de bus CAN. Al igual que con mi interfaz, utilicé un conector personalizado basado en 8P8C, en realidad corté mi lado DE-9 del cable y engarzé los cables a un conector Ethernet estándar.

Como el bus CAN envía tramas de error si están mal configurados, lo más probable es que desee mantener la interfaz en modo de solo escucha todo el tiempo, para que otros nodos no se den cuenta de que algo extraño está sucediendo. Tal como sabe, lo que puede suceder si se olvida de hacerlo es que algo en el bus se da cuenta del problema y aparece en la pantalla (como en el estéreo del automóvil) o registra el error.

Ahora que tiene los datos, es probable que esto le parezca un ruido, ya que es parte de los protocolos propietarios utilizados por el ecus de su vehículo. Si planea hacer ingeniería inversa en él, lo mejor es grabar todos los datos para la reproducción fuera de línea, pero también para configurar una cámara en el conector de Ethernet a Ethernet del automóvil para grabar lo que sucede en el tablero de instrumentos y en la carretera . Asegúrese de grabar para que pueda identificar fácilmente cuándo comenzó a descargar para que el video pueda sincronizarse fácilmente.

En mi caso, pude identificar algunos datos como la posición del acelerador, la velocidad, las rpm, los contadores de kilometraje y la velocidad de las ruedas individuales. Escribí una aplicación sencilla para abrir la interfaz de bus CAN, leer los marcos y decodificar los soportados. Puede usarlo como base para escribir sus propios decodificadores de paquetes, es fácil de piratear, está basado en ncurses y proporciona una lista de paquetes desconocidos … ¡póngalo en github!

De todos modos, estoy contento de que estés utilizando mi módulo del kernel como base. En realidad, es bastante simple porque el firmware utiliza estructuras de datos compatibles con socketcan y puede hacer lo mismo fácilmente. También puede interesarle una discusión en la lista de linux-can sobre los protocolos USB-CAN (http://article.Gmane.Org/gmane.Linux.Can/2004) y tal vez incluso unirse a la lista.

En cuanto al flujo de datos, lo que se encuentra en ep0.C es solo para el punto final de control (&eps [0]), y se usa solo para la configuración / inicio / parada del dispositivo. El tráfico masivo real se maneja en buffer.C, donde puede encontrar referencias a usb_send (&eps [2],…) y usb_recv [&eps [1],…). Esos dos mapas a las dos colas del núcleo: usb_sndbulkpipe (dev->udev, 1) y usb_rcvbulkpipe (dev->udev, 2) y devoluciones de llamada relativas.

En esta situación, buscaría un proyecto de ejemplo de trabajo para ejecutarlo en el STM32 que usa un punto final en masa y lo adaptaría a su configuración hasta que encuentre lo que se rompe. En el lado de Linux, puede utilizar el módulo usbmon para ver el tráfico en bruto. Además, una de mis utilidades favoritas para hackear en USB es la aplicación usbtool del paquete v-usb, puede encontrarla aquí https://github.Com/obdev/v-usb oculto en el directorio examples / usbtool. Le permite enviar y recibir tráfico USB arbitrario, usa libusb internamente. Si usa eso, solo tenga en cuenta que no cambia entre la identificación del paquete DATA0 / 1, por lo que en realidad solo funcionará para el primer paquete de walmart del cable Ethernet de 25 pies … ¡pero eso es a menudo suficiente! 🙂

La parte de socketcan es realmente fácil si te familiarizas con sockets normales de “internet” antes, y esa es solo la API utilizada para interconectar aplicaciones con TCP y UDP (¡y más!). SocketCAN es solo una extensión de eso para usar tramas CAN con la conocida API de socket, y en realidad es un gran paso adelante en comparación con la implementación anterior de apis CAN de bajo nivel en linux, lo cual no haría mucho más que exponer el controlador a la aplicación.

Realmente no hice mucho en otros autos aparte de lo que describí aquí, y creo que PUEDE usarse para dispositivos de infotrenamiento simplemente porque “ya está ahí” … un problema es que todavía hay una baja interoperabilidad entre los dispositivos, ya que incluso si comparten el todavía implementan protocolos específicos del proveedor (piense en los equipos de sonido o los tableros del mercado secundario).

Si se entera de problemas de confiabilidad, probablemente se deba a que son solo buses menos importantes y, como consecuencia, reciben menos atención al diseño confiable … tal vez los cables y conectores sean de menor calidad (calibre, torsión …), tengan troncos más largos (peor integridad de la señal) , se mueve a través de bisagras y otras cosas. Estoy seguro de que el bus de transmisión recibe más atención y hay mucho más que el propio protocolo para diseñar un sistema de bus de campo confiable.

Bueno, el hecho de que solo tenga un transceptor CAN en la placa significa que el STN1110 tiene un precio de hardware en su interfaz inrr (probablemente es un microcontrolador comercial preprogramado y personalizado), y el controlador seguramente puede operar en una bus de velocidad completa (eso es 1mbps), pero eso no se traduce de inmediato en el hecho de que puede usarlo como una interfaz CAN genérica y transferir toda la secuencia de datos del bus en la interfaz de control (su serie). La velocidad del puerto en serie es seguramente la primera preocupación en eso, pero eso está lejos de ser las únicas limitaciones. Los micros basados ​​en CAN están diseñados con algún tipo de filtro de cuadros para poder descartar silenciosamente la mayoría de los datos presentes en el bus, y solo activar la CPU para procesar los cuadros esenciales. Si utiliza el micro como detector de bus, abriendo así los filtros para capturar todo el flujo de datos, es posible que el micro ni siquiera tenga la potencia suficiente para anular los marcos lo suficientemente rápido como para evitar el desbordamiento, y eso incluso puede suceder si el bus está ligeramente cargado. pero ráfaga.

Esos chips ODB son agradables porque pueden implementar los protocolos OBD (encima de CAN y otros buses), pero no están diseñados para ser utilizados como un dispositivo de detección de CAN sin procesar (acceda a los datos completos del bus incluso en condiciones de carga pesada o ráfagas) – lo que entiendo es lo que intentas lograr aquí). Si eso es lo que quieres hacer, seguramente tendrías mejores resultados con algo como el USB2CAN.

Bien, entonces, el hecho de que tanto el cable como la interfaz CAN tengan un conector DE9 no significa que estén destinados a conectarse. De hecho, no lo están, ese cable (https://www.Sparkfun.Com/products/10087) está usando algún pinout que se encuentra comúnmente en los escáneres OBD (creo …), pero el convertidor de 8 dispositivos (http: // www.8devices.Com/media/files/usb2can.Pdf) utiliza el pinout estandarizado cia D-sub (https://www.Phoenixcontact.Com/assets/downloads_ed/global/web_dwl_technical_info/canopen.Pdf página 9), que Es lo que esperas en los dispositivos de automatización.

Debe cortar el extremo del cable y volver a cablearlo (la enfermedad de estenosis uretral es lo que hice también; tenía un conector personalizado en mi interfaz USB). Lo que hizo acortó alguna señal aleatoria, por lo tanto, las luces de error en el tablero de instrumentos. Probablemente no hizo volar nada, pero tenga cuidado con eso, por lo que recuerdo, el conector OBD tiene una línea de + 12V directamente de la batería, que probablemente esté limitada por un fusible de 10 A o algo así. Eso es potencialmente letal para cualquier transceptor de señal no protegido. 🙂

banner