Obtención del PIN del CEM en un Volvo S40 P1
En esta entrada explico paso a paso cómo logré extraer el PIN del CEM de un Volvo S40 (plataforma P1) para poder reconfigurar el coche y habilitar extras como el control de crucero, el sensor de lluvia y el ordenador de abordo. El método se basa en un esquema y código disponibles en GitHub, que aprovechan la potencia del Teensy 4.0 y la facilidad de uso de FlexCAN para comunicarse con el vehículo.
Materiales y Herramientas
Según el esquema publicado en GitHub, se han utilizado los siguientes componentes:
- Teensy 4.0: No se eligió por preferencia personal, sino por su potencia y la facilidad de integración con la biblioteca FlexCAN, necesaria para la comunicación con el CEM.
- Transceiver CAN bus SN65HVD230: Este chip, de Texas Instruments, es el que se recomienda en el esquema para establecer una comunicación fiable entre el Teensy y el CEM.
- Cables y soldadura: Para realizar las conexiones siguiendo el diagrama.
- Puerto OBD2 del Volvo: El punto de acceso al sistema del vehículo.
- Arduino IDE: Herramienta de programación en la que se carga el código del repositorio.
- Esquema y repositorio en GitHub: La documentación técnica que guía todo el proceso. Puedes consultarlo en volvo-cem-cracker.
Preparativos
El primer paso fue reunir todos los materiales indicados en el esquema de GitHub y familiarizarme con el proceso. Revisé el diagrama y descargué el código, ya optimizado para trabajar con el Teensy 4.0, FlexCAN y el transceiver SN65HVD230. Con todo listo, configuré el Arduino IDE y comprobé la comunicación con el bus CAN.
Aquí puedes ver una imagen del IDE con el código preparado:
Montaje del Circuito
La siguiente fase fue el montaje del hardware siguiendo fielmente el esquema de GitHub:
- Soldadura y Conexiones: Soldé los cables al Teensy siguiendo el diagrama. La precisión en este paso fue crucial para asegurar que la comunicación con el CAN bus funcionara sin problemas.
- Integración del Transceiver SN65HVD230: Se conectó el transceiver SN65HVD230 conforme a las indicaciones del esquema, permitiendo que el Teensy estableciera la comunicación con el CEM a través del puerto OBD2.
Conexión al Vehículo
Con el dispositivo completamente ensamblado, lo conecté al puerto OBD2 del Volvo. Durante esta fase, el Teensy envía solicitudes al CEM y “escucha” las respuestas, lo cual es fundamental para deducir el PIN mediante el análisis de latencias en la comunicación.
Aquí se muestra una imagen del proceso, en la que se observa como va probando por fuerza bruta posibles pines y segun la latencia los descarta o sigue al siguiente byte del pin:
Proceso de Extracción del PIN
El método implementado en el código de GitHub combina técnicas de medición de latencias y un proceso iterativo para obtener los 6 bytes del PIN:
- Inicio del Proceso: Con el coche encendido, el Teensy envía solicitudes al CEM a través del bus CAN. El código utiliza variaciones en la latencia de las respuestas para determinar el valor de cada byte del PIN.
- Medición y Análisis: La clave está en analizar las pequeñas diferencias en los tiempos de respuesta. Estas variaciones permiten “calcular” algunos de los bytes del PIN, mientras que el resto se obtiene mediante brute-force. Es por ello que es necesario el teensy ya que la potencia y el RTC(Real time clock) nos permite mas precision que un arduino normal.
- Iteración y Completado: Tras calcular parte del PIN, se completa el resto mediante un proceso iterativo. El código muestra claramente cómo, después de obtener ciertos bytes, el dispositivo procede a “bruteforcear” los bytes restantes.
- Tiempo de Ejecución: En menos de 20 minutos, el sistema logró extraer el PIN, abriendo la posibilidad de reconfigurar el vehículo.
Detalles Técnicos y Reflexiones
Este proceso demuestra cómo la electrónica y el software pueden interactuar para “comunicar” con los sistemas de un vehículo. Algunos puntos destacados:
- Uso del Teensy 4.0 y FlexCAN: La elección del Teensy 4.0 se fundamenta en su alta potencia y en la facilidad de uso de la biblioteca FlexCAN, tal como se especifica en el código del repositorio.
- Transceiver SN65HVD230: Este componente es esencial para una comunicación robusta en el bus CAN, según lo indicado en el esquema de GitHub.
- Código Abierto: El repositorio volvo-cem-cracker proporciona un enfoque probado y bien documentado, facilitando la implementación en diferentes modelos de Volvo.
- Aprendizaje y Experimentación: Más allá de la función práctica, este proceso ha sido una oportunidad para aprender sobre comunicación CAN bus, electrónica automotriz y técnicas de hacking de sistemas de vehículos de forma segura y responsable.
Conclusiones
Extraer el PIN del CEM puede no ser una tarea monumental, pero es una experiencia técnica muy enriquecedora. Siguiendo el esquema y el código de GitHub, se abren nuevas posibilidades para reconfigurar el vehículo y habilitar funciones adicionales que de otro modo permanecerían inaccesibles.
Si te interesa profundizar en el tema, te invito a visitar el repositorio en GitHub y a compartir tus preguntas o experiencias enviandome un mensjae.