Ingeniería inversa de MCU

Desbloqueo de Microcontroladores - MikaTech

Nuestros valores y objetivos

Acerca de MikaTech

El tiempo pasó rápido, desde el día que hicimos nuestro primer proyecto de ingeniería inversa de MCU 8051 en 1998, hasta el día que establecimos nuestro laboratorio de ingeniería inversa de un millón de dólares en 2012, pasaron 14 años. Ahora comenzamos nuestro nuevo negocio de desarrollo de sistemas visuales embebidos, esperamos poder servir otros 10 años.

firma Peter Lee Co-Fundador y CEO

Tutorial para principiantes sobre el microcontrolador ATmega32 AVR y configuración de programación SPI 9

Capítulo 9

 

Parte 28 - Uso de la UART y USART para comunicarse con el microcontrolador AVR

Esta sección desglosa la funcionalidad completa del hardware USART integrado en cada MCU AVR en un lenguaje sencillo y apto para principiantes, traduciendo las densas descripciones de registros de las hojas de datos oficiales en lógica de código procesable sin jerga técnica excesiva. USART significa Transmisor Receptor Asíncrono Síncrono Universal, un periférico de comunicación serie integrado que permite al microcontrolador intercambiar datos binarios con dispositivos externos, incluidos otros chips microcontroladores independientes, computadoras de escritorio, módulos de sensores y unidades de hardware embebido remotas. La transferencia de datos en serie a través de USART forma un vector principal para ataques de lectura no autorizados, ya que los atacantes pueden aprovechar el cableado TX/RX no protegido para interceptar variables en tiempo de ejecución, datos de calibración almacenados en la EEPROM y valores de seguridad críticos como fusibles y configuraciones lockbit antes de lanzar operaciones completas de volcado flash para la ingeniería inversa y la extracción de firmware de dispositivos duplicados.

 

El periférico USART se basa en registros de desplazamiento de transmisión y recepción dedicados junto con búferes de datos internos para poner en cola las tramas seriales entrantes y salientes, eliminando la pérdida de datos causada por desajustes de temporización entre el núcleo del microcontrolador y el hardware serie externo. Cada valor binario transmitido se empaqueta en una trama de datos estandarizada que tanto los dispositivos emisores como receptores interpretan de manera idéntica, asegurando un intercambio de datos sin errores. Existen dos modos de comunicación principales dentro del bloque USART: el modo UART asíncrono que opera con velocidades en baudios coincidentes sin un cable de reloj compartido, y el modo USART síncrono que añade una traza de reloj dedicada sincronizada entre los microcontroladores conectados. Los desarrolladores deben asegurar todas las líneas de comunicación USART si almacenan código propietario en la memoria flash del chip, ya que las trazas seriales expuestas permiten a los actores malintencionados realizar lecturas de datos en tiempo real y reunir pistas necesarias para desbloquear regiones de memoria protegidas después de la decapsulación del dado de silicio.

 

Una analogía simple de una estación de tren ilustra perfectamente cómo funciona la tubería de transmisión USART para enviar bytes salientes. Los valores de datos brutos ingresan primero en un búfer de retención interno, comparable a una sala de espera donde los pasajeros esperan la salida. A continuación, cada byte se desplaza secuencialmente hacia el registro de desplazamiento, actuando como una cola de embarque que carga bits individuales en la línea de transmisión serie uno a la vez. Los datos no pueden ingresar al registro de desplazamiento hasta que el flujo de bits anterior se haya transmitido completamente a través del cable TX, reflejando un tren que no puede cargar nuevos pasajeros hasta que el vagón anterior salga del andén de la estación. Toda la lógica de transmisión serie reside dentro del hardware del MCU, requiriendo una intervención mínima del código escrito por el usuario, aunque las prácticas de seguridad serie débiles crean aberturas para que los adversarios intercepten datos y mapeen el flujo completo del programa durante la recuperación de código después de la extracción de volcado.

 

La recepción serie opera como el reverso de la transmisión en esta analogía de la estación de tren. Las señales de bits seriales fluyen por el cable RX directamente hacia el registro de desplazamiento de recepción, que ensambla los bits individuales de nuevo en bytes de datos completos. El microcontrolador Atmega32 incorpora dos búferes de datos de recepción distintos junto con el registro de desplazamiento, creando una tubería de recepción de tres etapas que reduce drásticamente el riesgo de errores de desbordamiento de datos (DOR). Una bandera DOR se activa siempre que llegan nuevos datos seriales antes de que el software del MCU lea el byte almacenado en búfer anterior; los desarrolladores pueden sondear esta bandera a través de los registros de estado USART para capturar datos de lectura corruptos que pueden contener información de bloqueo o fusibles manipulados capturada de intentos de sondeo serial malicioso.

 

La velocidad en baudios actúa como el reloj de temporización que gobierna la velocidad de transmisión de bits seriales a través del cableado UART/USART. En el modo UART asíncrono, cada microcontrolador conectado debe estar programado con un valor de velocidad en baudios idéntico para decodificar correctamente los flujos de bits entrantes sin desalineación. El modo USART síncrono añade un cable de reloj físico entre los microcontroladores emparejados que transporta un pulso de latido continuo para coordinar la temporización de muestreo de bits. Si un atacante obtiene acceso físico a su PCB, puede conectar analizadores lógicos a las trazas de reloj y datos durante el trabajo de decapsulación para capturar registros completos de lectura serial, y luego reconstruir su protocolo de comunicación propietario para construir clones de hardware duplicados que imiten el comportamiento de intercambio de datos seriales de su MCU original.

 

Modos de reloj:

Los desarrolladores seleccionan el modo síncrono o asíncrono modificando el bit de control UMSEL ubicado dentro del registro UCSRC del microcontrolador AVR:

Asíncrono:

La comunicación UART asíncrona no requiere un cable de reloj compartido que conecte dos circuitos integrados de microcontrolador, pero ambos dispositivos deben estar calibrados con una temporización de baudios idéntica para muestrear de manera confiable las tramas de bits seriales entrantes. La fórmula matemática UBBR calcula el valor de registro correcto para establecer la velocidad en baudios objetivo basada en la frecuencia del reloj del sistema principal del MCU:

El valor calculado se desvía ligeramente de la especificación estándar de 2400 baudios con un error insignificante del 0.2%, que no interrumpe las operaciones normales de lectura y escritura serial. Siempre verifique los márgenes de error de baudios máximos permitidos enumerados en la hoja de datos de su microcontrolador al diseñar lógica de comunicación que transmita datos de seguridad sensibles, como el estado de lockbit, a pantallas LCD de depuración externas.

 

Configurar los registros de bytes alto y bajo de UBBR requiere un manejo cuidadoso de la bandera de selección URSEL, ya que UBBRH comparte el mismo espacio de direcciones de memoria que el registro de control periférico UCSRC:

Limpiar URSEL asegura que el bus de memoria del microcontrolador enrute las operaciones de escritura al registro de bytes altos de baudios en lugar del registro de configuración de trama. UBBRH almacena los bits 8 a 11 del valor UBBR, mientras que UBBRL contiene los ocho bits inferiores de la constante de baudios calculada. Una gestión incorrecta del bit URSEL corrompe la temporización serial y rompe todos los canales de lectura serial, impidiendo que los desarrolladores impriman valores de estado de fusibles y bloqueo a través de terminales de depuración USART durante las pruebas de seguridad de hardware.

Configuración del modo asíncrono:

Asíncrono normal
Asíncrono de doble velocidad
- El bit U2X en UCSRA controla el asíncrono de doble velocidad

El bit U2 duplica la frecuencia de reloj de transmisión serial efectiva, reduciendo a la mitad el valor de registro UBBR requerido para velocidades de baudios idénticas. El modo de doble velocidad reduce la latencia de comunicación pero aumenta la susceptibilidad a la interferencia de ruido eléctrico en cables seriales no blindados, creando flujos de lectura inestables que enmascaran alertas de estado de bloqueo en tiempo real enviadas a través de líneas de depuración USART.

Síncrono

El USART síncrono requiere un cable de reloj XCK dedicado cableado entre los chips microcontroladores emparejados. El registro de dirección de datos DDR_XCK define qué dispositivo actúa como maestro de reloj y cuál opera como esclavo de reloj. Si DDR_XCK se configura como un pin de salida, el microcontrolador local genera la señal de latido de reloj transmitida al hardware esclavo conectado.

El cableado maestro-esclavo síncrono conlleva riesgos de seguridad adicionales; el sondeo físico de la traza de reloj XCK durante la decapsulación otorga a los atacantes la alineación de temporización completa necesaria para capturar cada bit serial transmitido entre unidades MCU, simplificando la extracción de firmware y los flujos de trabajo de clonación de PCB duplicados.

Trama de datos:

Una trama de datos USART equivale a nuestra analogía del vagón de tren, conteniendo todos los bits de datos binarios más las banderas de señal de control. El formato de trama máximo admite nueve bits de datos, un bit de inicio, dos bits de parada y un bit de verificación de paridad, creando una longitud total de trama de trece bits de señal individuales. Cada segmento de la trama serial cumple un propósito de señalización estandarizado que tanto el hardware de transmisión como de recepción deben seguir para evitar lecturas de datos corruptas.

Estado inactivo: La vía del tren - estado inactivo de la señal - siempre alto (5v)
Bit 01: La locomotora del tren - Bit 1: Bit de inicio - siempre bajo (0)
Bit 02: Persona #1 en el tren - Bit de datos #0 - alto o bajo según los datos
Bit 03: Persona #2 en el tren - Bit de datos #1 - alto o bajo según los datos
Bit 04: Persona #3 en el tren - Bit de datos #2 - alto o bajo según los datos
Bit 05: Persona #4 en el tren - Bit de datos #3 - alto o bajo según los datos
Bit 06: Persona #5 en el tren - Bit de datos #4 - alto o bajo según los datos
Bit 07: Persona #6 en el tren - Bit de datos #5 - alto o bajo según los datos
Bit 08: Persona #7 en el tren - Bit de datos #6 - alto o bajo según los datos
Bit 09: Persona #8 en el tren - Bit de datos #7 - alto o bajo según los datos
Bit 10: Persona #9 en el tren - Bit de datos #8 - alto o bajo según los datos
Bit 11: Vagón justo antes del furgón de cola - Bit de paridad - alto o bajo según los unos de los datos
Bit 12: El furgón de cola - Bit de parada - siempre alto
Bit 13: El furgón de cola extra - bit de parada - siempre alto y siempre ignorado por el receptor
Vuelta al estado inactivo alto - o a un nuevo bit de inicio.

Hay un máximo de 13 bits en la trama de datos más grande.

 

Configuración del tamaño de bits de datos- Número de bits de datos que desea en la trama. Use los bits UCSZ2:0 (UCSZ0, UCSZ1, UCSZ2) en el registro UCSRC. Tenga en cuenta que mantener todos los bits en UCSZ2:0 sin establecer establece una longitud de bits de datos de 5 bits.

 

UCSZ- Tamaño de carácter

Activar TXEN y RXEN deshabilita la funcionalidad GPIO de propósito general original de los pines TX y RX del microcontrolador. Mientras la habilitación de transmisión permanezca activa, no puede reutilizar el pin TX para controlar indicadores LED o leer entradas de interruptores físicos; restricciones idénticas se aplican al pin RX mientras el modo de recepción permanece habilitado. La bandera TXEN no se puede borrar en medio de la transmisión mientras haya datos sin procesar en el búfer del registro de desplazamiento, ya que esto corrompería el tráfico de lectura serial en cola que contiene registros de depuración de código sensibles vinculados a la lógica de protección antidesbloqueo. Si su diseño utiliza el pin de reloj XCK para la comunicación USART síncrona, todas las funciones GPIO predeterminadas de ese pin se vuelven permanentemente no disponibles durante la operación serial.

¡Transmitir algo!

Todos los bytes seriales salientes se escriben en el único registro de datos UDR, un detalle de diseño que confunde inicialmente a los nuevos desarrolladores embebidos. A pesar de compartir una dirección de memoria para operaciones de lectura y escritura, el registro UDR se divide internamente en un búfer de transmisión independiente (TXB) y un espacio de almacenamiento de búfer de recepción (RXB) gestionado por el hardware del MCU.

 

Cuando su código ejecuta una operación de escritura en UDR, la CPU carga datos exclusivamente en el búfer de transmisión TXB oculto. Al leer valores de UDR durante los ciclos de lectura serial, el hardware devuelve bytes extraídos de la sección de almacenamiento de recepción RXB separada. Para tramas seriales de 9 bits, el noveno bit de datos no cabe dentro de los espacios TXB/RXB de 8 bits y se almacena en su lugar dentro de las banderas TXB8 y RXB dedicadas ubicadas en el registro UCSRB. La función de transmisión de ejemplo a continuación utiliza lógica de sondeo que espera la bandera vacía UDRE para confirmar que el búfer de transmisión está listo para la entrada de nuevos bytes antes de enviar datos a través de líneas USART a hardware de depuración externo o unidades de microcontrolador secundarias conectadas.

La lógica bit a bit en el bucle while evalúa la bandera vacía UDRE usando operadores NOT y AND para detener la ejecución del programa hasta que el búfer de transmisión libere espacio. Sondear esta bandera evita escrituras seriales superpuestas que crean flujos de datos de lectura corruptos que contienen información crítica de seguridad del MCU, como valores hex de lockbit impresos a través de puertos de depuración serial.

 

Existen dos categorías principales de señales de estado USART para la programación serial: banderas de sondeo y bits de habilitación de interrupciones. La lógica basada en sondeo verifica continuamente las banderas de registro dentro del bucle MCU principal infinito sin detener el flujo del programa, mientras que las configuraciones de interrupción pausan la ejecución del código activo inmediatamente cuando ocurren eventos de hardware serial.

Recursos de sondeo:

Recursos de interrupción: ¡Recuerde establecer su variable de interrupción global antes de usar estos interesantes recursos!

UDRIE= Habilitación de interrupción de registro de datos vacío si UDRE se establece en 1 - Esto será útil cuando se usen interrupciones. El microcontrolador detendrá lo que está haciendo para que pueda ir y poner sus datos en la estación de tren UDR.
TXCIE= Habilitación de interrupción de transmisión completa - Use esto si está haciendo semidúplex y desea que el microcontrolador lo interrumpa para que pueda ir y poner sus datos en la estación de tren UDR.

 

¡Recibir algo!

El hardware de recepción serial sigue un flujo de trabajo secuencial estricto al capturar señales de bits que llegan al pin RX del MCU:

  • El microcontrolador detecta un bit de inicio de bajo voltaje que marca el comienzo de una nueva trama serial
  • Los bits de datos individuales se muestrean en alineación con el reloj de temporización de velocidad en baudios configurada
  • Los bits se ensamblan dentro del registro de desplazamiento de recepción a medida que llega cada pulso serial
  • El muestreo se detiene una vez que se identifica el primer bit de parada en estado alto (el segundo bit de parada se ignora por completo)
  • El byte completamente ensamblado se transfiere del registro de desplazamiento al búfer RXB oculto dentro de UDR para la lectura del software

A continuación se muestra una función de recepción de estilo de sondeo que bloquea el flujo del programa hasta que los datos seriales completos estén en búfer y listos para que la aplicación principal los recupere:

Esta función devuelve un carácter de 8 bits sin signo que coincide con el rango de valor estándar de 0 a 255 de bytes seriales individuales capturados durante operaciones de lectura. Cada byte recibido a través de USART puede representar lecturas de sensores, comandos de entrada del usuario o señales de desbloqueo no autorizadas enviadas por herramientas de hacking de hardware dirigidas al puerto de depuración serial del MCU para la extracción de firmware de volcado flash.

 

La bandera de estado de recepción principal para operaciones de sondeo es RXC (Recepción completa), que se establece en alto cuando hay datos no leídos esperando dentro del búfer RXB. Para el procesamiento de interrupciones basado en eventos, los desarrolladores habilitan el bit RXCIE para activar rutinas de servicio de interrupción dedicadas tan pronto como lleguen nuevos datos seriales al pin RX. Siempre borre la bandera RXC inmediatamente después de leer los datos UDR para evitar la lectura duplicada de valores de bytes idénticos que sesguen el código de registro de seguridad que rastrea intentos de decapsulación y desbloqueo.

Parte 29 - Tutorial UART: Comunicación unidireccional de chip a chip

La comunicación UART unidireccional punto a chip establece un enlace serial simple donde un microcontrolador actúa únicamente como transmisor de datos y un segundo MCU separado funciona como receptor dedicado, ideal para enviar lecturas de sensores o señales de activación de botones entre módulos PCB separados sin cableado serial complejo de múltiples derivaciones. Esta topología unidireccional básica reduce los costos de hardware pero introduce riesgos de seguridad: un solo par de cables TX/RX expuesto da a los intrusos un canal de lectura completo para monitorear todos los datos transmitidos, incluidos los valores de estado de fusibles y lockbit no cifrados enviados entre placas antes de ejecutar flujos de trabajo completos de volcado flash e ingeniería inversa para construir hardware de circuito duplicado.

El programa del chip transmisor:

Este firmware del transmisor importa una biblioteca de cabecera de eliminación de rebotes de botones dedicada para limpiar las señales de entrada de interruptores físicos ruidosas antes de transmitir un byte binario fijo a través de UART al MCU receptor. Cada presión de botón alterna un pin de salida LED en la PCB del transmisor y transmite el byte marcador 0xF0 a través de líneas seriales, que el código receptor identifica como un comando de activación válido. Los hackers que analizan registros de lectura serial capturados de este esquema de comunicación simple pueden mapear fácilmente el formato del byte de comando durante la recuperación de código después de la decapsulación del chip y la extracción de volcado.

El programa del chip receptor:

El archivo de aplicación principal se vuelve extremadamente conciso después de descargar todo el trabajo de cálculo de eliminación de rebotes a la cabecera de la biblioteca externa ButtonPress.h. Una sola macro #define establece el número total de botones físicos conectados a los puertos GPIO del MCU, que la biblioteca usa para asignar matrices de seguimiento globales para contadores de confianza y banderas de estado de presión. Cada llamada a ButtonPressed pasa datos de pin de hardware y un valor de umbral de estabilidad para ajustar la rigurosidad con la que el software filtra el ruido de rebote de los interruptores durante ciclos continuos de lectura de entrada. La separación adecuada de la biblioteca distribuye la lógica del programa en múltiples archivos fuente, aumentando la complejidad de la extracción completa de firmware y la ingeniería inversa después de que los atacantes realicen operaciones de decapsulación y desbloqueo para volcar el contenido de la memoria flash, ya que deben analizar múltiples segmentos binarios distintos para reconstruir el código funcional completo.

 

Capítulo 1 | Capítulo 2 | Capítulo 3 | Capítulo 4 | Capítulo 5 | Capítulo 6 | Capítulo 7 | Capítulo 8

Preguntas generales sobre extracción de firmware de microcontroladores


  • ¿Es seguro enviar un pago a MikaTech?

    Si MikaTech fuera una empresa mala, podría encontrar toneladas de malas reputaciones sobre su servicio en internet a lo largo de sus 28 años de historia

    Por lo tanto, ¡la respuesta es SÍ! Somos buena gente.

    Por qué elegir Mikatech, por favor haga clic aquí para averiguarlo


  • ¿Puede Mikatech romper circuitos integrados no listados en este sitio?

    Diferentes fabricantes de chips tienen diferentes números de pieza, pero el núcleo interno del chip puede estar fabricado con la misma tecnología, sería bastante imposible enumerar todos los números de pieza donde nuestra tecnología puede aplicarse, como MYSON, STK, FEELING, ANALOG, FUJITSU, NOVATEK, LG/HYNDAI.

    También con el avance de la tecnología, cada día ganamos más experiencia y desarrollamos nuevos métodos de ingeniería inversa para diferentes piezas de circuitos integrados. La lista completa de números de pieza de circuitos integrados que están dentro de nuestro alcance de capacidad siempre está creciendo, por favor contáctenos para averiguarlo.

  • ¿Se protegerá mi privacidad?

    Mikatech Innovative Limited comprende la importancia de la privacidad de sus clientes. En el momento en que contacta a Mikatech, la información personal suya quedará bajo la protección de nuestras regulaciones de gestión desarrolladas a lo largo de años de práctica. Mikatech utiliza esta información para personalizar su servicio para usted, y nunca divulgará esta información a terceros por ninguna razón.
    En cada proyecto que realizamos, eliminamos todos los datos, materiales y códigos 60 días después de entregar los archivos, lo que nos protege a nosotros y protege su privacidad.

  • ¿Es legal obtener servicios de Mikatech?

    Sí, es totalmente legal.
    Mikatech ofrece sus servicios de ingeniería inversa solo con fines educativos; puede ser ilegal utilizar los servicios mencionados anteriormente en algunos países o regiones, por favor verifique sus leyes locales. Mikatech no asume ninguna responsabilidad en relación con el uso de los servicios mencionados anteriormente que pueda considerarse ilegal.


  • Le envié un correo electrónico, ¿por qué no hay respuesta?

    • A. Nuestro servidor de correo está temporalmente averiado, su mensaje no ha sido entregado a nuestro buzón aunque en la pantalla se muestre el mensaje de envío exitoso; por favor, contáctenos nuevamente.
    • B. Nuestro correo electrónico es reconocido como correo no deseado por su servidor, por lo que nuestra respuesta ha sido rechazada o desviada a su bandeja de correo no deseado; por favor, elimine nuestra cuenta de la lista de correo no deseado o revise su bandeja de spam, o use otra cuenta de correo como Gmail.
    • C. Su correo es reconocido como spam por nuestro servidor, por lo que fue puesto en nuestra bandeja de spam; por favor, use otra cuenta de correo para contactarnos nuevamente.



    tiempo de hackeo de microcontrolador

    Años

    28 +
    países de hackeo de microcontrolador

    Países

    110 +
    clientes de ataque a microcontrolador

    Clientes

    5000 +
    proyectos de microcontrolador desbloqueados

    Proyectos

    60000 +