Extracción de firmware usando JTAG

Busqué y encontré bastantes ejemplos de artículos que afirman haber extraído firmware de algún dispositivo usando la interfaz JTAG. He leído además que no existe un procedimiento general para hacer esto, ya que cada fabricante impone diferentes restricciones y requisitos.

Entonces, tengo esta cafetera que hace un gran desastre cada vez que se usa. Pensé que probaría algo de ingeniería inversa desmantelando la cosa y posiblemente extrayendo / parcheando el firmware. Después de un poco de inversión y análisis de la construcción, la arquitectura general es realmente simple. Hay algunos interruptores que indican si el dispositivo puede o no comenzar a preparar con seguridad, junto con un termopar para medir la temperatura del agua y una bomba para producir presión positiva para llevar el agua calentada al café molido. Podría desechar fácilmente el controlador anterior y reemplazarlo con mi propia lógica, pero pensé que primero intentaría usar el hardware existente, ya que de lo contrario tendría que invertir los mecanismos de control de la pantalla LCD incluida y eso no parece muy atractivo. .

Dicho esto, el controlador que encontré en la placa es Sino Wealth SH79F1619 - Device Page . Por lo que encontré en la hoja de datos, este dispositivo tiene un conjunto de instrucciones compatible con la Intel's 8051familia. Busqué brevemente y descubrí que hay compiladores que funcionan con esta arquitectura, por lo que no me preocupa demasiado volver a compilar el código después de la extracción, pero llegaremos a eso cuando sea necesario.

Al leer la hoja de datos (y muy obviamente de la placa), este dispositivo es compatible con la interfaz de depuración/programación JTAG. La única información que pude encontrar relacionada con esta empresa fue que era posible hacer una lectura/escritura flash suponiendo que los bits de protección no se configuraron en el momento del lanzamiento. Teniendo en cuenta que este dispositivo es una cafetera básica, ¿tal vez no estén configurados? Continuando, encontré la siguiente declaración en la página 20 de la hoja de datos:

Solo después de que los cuatro pines ingresen la forma de onda especificada, la CPU ingresará al modo de programación

Entonces, ¿qué formas de onda de entrada se requieren?

La única otra información que pude encontrar fue (página 19):

El programador Flash en modo ICP envía instrucciones de código de lectura/escritura para ejecutar código de lectura/escritura

Un poco más de investigación arrojó que el término forma de onda probablemente no era el mejor descriptor que se podría haber usado ya que, de acuerdo con la siguiente máquina de estado, simplemente tenemos que realizar una serie de escrituras de registro para llegar al modo de programación (página 23):

ingrese la descripción de la imagen aquí

Entonces, presumiblemente, la idea es que entremos primero en el modo de programación a través de la ruta descrita anteriormente en el diagrama de estado. Suponiendo que lleguemos tan lejos, ¿qué sucede después? ¿Leemos cada línea desde la dirección flash 0 hasta la dirección flash MAX? ¿Cómo funciona eso sobre JTAG?

¿Y alguien sabe posiblemente a qué se refiere esta parte del diagrama de estado?ingrese la descripción de la imagen aquí

Este es el hardware real en cuestión:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Esos 4 pads desnudos a la derecha del controlador son los pines JTAG.

En resumen :

  • ¿Alguna pista sobre qué tipo de LCD es esta pantalla? ¿Información genérica de modelo/comando?
  • ¿Cómo podemos determinar si los bits de protección están habilitados?
  • ¿Cómo se envían los comandos (como establecer el registro IB_CON4 = 0x9H) usando JTAG?
  • ¿Cómo leemos el flash una vez que estamos en modo programación?
  • Suponiendo que el bit de protección esté configurado, ¿no tenemos suerte?
  • ¿Simplemente leemos todo el espacio de direcciones flash y lo volcamos en un archivo?
  • Una vez que tenemos el archivo binario, ¿qué hacemos a continuación? ¿Escribir un analizador para convertir el binario en un ASCII legible?
  • ¿Cuál es la posibilidad de bloquear el dispositivo y/o borrar el firmware actual?
Si el hardware se puede reutilizar, puede comparar las secciones de hardware en detalle. más tarde, la MCU sola se puede aislar. El resto del hardware puede ser controlado por una nueva MCU. Preferiría esta forma de conseguir el café pronto.
@Umar, ¿está sugiriendo omitir el volcado de firmware y controlar todo con lógica personalizada y un nuevo controlador? Tal como están, el controlador y la pantalla LCD están soldados en la misma placa, pero las lecturas del termopar y la información del estado del interruptor llegan a través de un cable plano. ¿Cómo sugeriría interactuar con la pantalla que ya está en el tablero?
@sherrellbc: es muy, muy poco probable que su cafetera use termopares reales. Son un poco caros. Probablemente use termistores.
@ConnorWolf, en ese grado probablemente tengas razón. Supuse que eran termopares, pero podrían ser termistores con la misma facilidad. En realidad, la salida es un valor de CC variable leído por el controlador, por lo que aún hay más evidencia que apunta a los termistores.
Controlador LCD: - 4 X 12 puntos (1/4 de servicio 1/3 de sesgo) según la hoja de datos. Esto sugiere que es posible que no haya ningún controlador en la pantalla LCD. Las líneas SEG y las líneas COM son impulsadas directamente por el controlador LCD interno. Rastrear los pines de la pantalla LCD hasta la MCU debería proporcionar el pin de la pantalla LCD fácilmente.
¿Puede publicar esta pregunta sobre el sitio SE Embedded System ? Al ser una pregunta de firmware, pertenece al sitio del sistema integrado .

Respuestas (1)

Ah, JTAG. El estándar que es universal como inútil.

JTAG es un 'estándar' universal principalmente porque define todo sin realmente definir nada. Recuerde, comenzó como una forma de probar placas de circuito completas y su integridad en general, nunca se definió como (ni pretende ser) un protocolo de programación/depuración/emulación en circuito, aunque lo convierte en un excelente bus físico para implementar tales características en. Una de las características más útiles es que es altamente encadenable, lo que le permite conectar en cadena muchos dispositivos en una placa y probarlos (o lo que sea) usando solo una interfaz JTAG.

JTAG es realmente solo una máquina de estado, una que le da acceso a las direcciones de memoria. No especifica ningún tipo de protocolo o sistema para hacer nada a nada, simplemente proporciona el medio. Cómo o qué se hace realmente en la interfaz JTAG será muy específico para el chip en cuestión y, a menudo, estas funciones no se publican y requieren el uso de hardware y software proporcionados por el proveedor.

Una 'interfaz de programación/depuración JTAG' no es algo estandarizado. Utilizará, de alguna manera, la máquina de estado JTAG, pero aquí no hay implicación de interoperabilidad o universalidad. Esa interfaz es tan única y específica para el chip en cuestión como lo permite el estándar JTAG. Para usar una analogía, JTAG podría ser un sistema de correo estandarizado, con direcciones y formato y tal vez papel y sobres específicos que deben usarse, todo muy rigurosamente definido. Lo que no define particularmente bien es lo que realmente escribes en esas letras. Especifica la máquina de escribir, el tipo de letra, el tamaño, el espaciado, el alfabeto, etc., pero lo que realmente escriba aún depende principalmente de usted.

OK, me tomé libertades significativas con esa analogía, pero creo que se entiende.

Entonces, cuando la hoja de datos de ese chip dice 'ingresó la forma de onda especificada', esa es la buena manera de decirle que no le dirán cómo poner el chip en modo de programación. Dice que consulte la guía del usuario de su programador flash, el JET51. Está en chino, pero ciertamente no expone su protocolo patentado (que es claramente propiedad intelectual que vale miles de millones , al menos en la mente de un ejecutivo ingenuo de todos modos) para que pueda construir su propio dispositivo y software.

Desafortunadamente, las respuestas a muchas de sus preguntas son para que Sino Wealth las sepa y usted... bueno... no. ¿Has probado a escribirles un correo electrónico? Quién sabe, tal vez te dejen firmar un NDA o algo así.

Ahora, las cosas podrían ser peores. Hay proveedores que ni siquiera le venderán un programador o el software patentado necesario para usarlo a menos que sea una gran empresa y todos sus ingenieros firmen NDA, hagan algún tipo de pacto de sangre oculta, etc. Pero afortunadamente, Sino Wealth sabe cómo para relajarse un poco, y amablemente ha proporcionado la guía del usuario, el firmware (!!) para sus programadores y el software necesario. ¿Como funciona? Si Sino Wealth no te lo dice, me temo que la única opción que te queda es aplicar ingeniería inversa a todo eso también. Dado que hay varios programadores de terceros que admiten ese chip específico y que proporcionan el software e incluso el firmware para sus programadores, es probable que no sea demasiado difícil aplicar ingeniería inversa. O simplemente puede comprar un programador JET51.Ya sea que lo use o realice ingeniería inversa, su funcionamiento depende de usted.

Además, el diagrama de flujo de la máquina de estado que capturó es del modo de programación SSP propiedad de Sino Wealth y es totalmente irrelevante para la 'forma de onda especificada' mencionada en la sección de programación flash de ICP, y no tiene nada que ver con la interfaz de programación JTAG. No tiene nada que ver con el resto de tu pregunta, lamentablemente.

En cuanto a la pantalla LCD, no importa. El SH79F1619 es un controlador LCD de segmento. Controla segmentos de una pantalla LCD utilizando controladores de 12 segmentos y 4 pines comunes para multiplexación. No hay nada especial aquí, no es diferente de conducir una pantalla LED de 7 segmentos. Cada segmento hace que un segmento se 'ilumine' en la pantalla LCD. Qué segmento es, o cómo se ve, se deja al diseñador de la pantalla LCD. No hay nada especial que saber: puede controlar los segmentos con cualquier chip controlador de segmento LCD y funcionarán exactamente igual con cualquier otro controlador como este microcontrolador.

Lo único que es diferente entre un LCD y un LED es que los LCD deben funcionar con CA, mientras que los LED obviamente funcionan con CC. Esto es totalmente genérico y generalmente funciona como si operara un LED, solo que con CA. ¿Quieres un segmento para estar? Aplique un voltaje de CA. ¿Quieres quitarlo? No aplique voltaje de CA (o en realidad, solo un voltaje de CA RMS mucho más pequeño). Todo lo que el controlador LCD está haciendo por usted es cambiar COM y los pines de varios segmentos entre sí, y generalmente entre unos pocos voltajes de polarización para crear una forma de onda escalonada y brindarle algunas características agradables como variación en contraste / escala de grises, etc. Pero esto es completamente genérico y no necesita saber nada sobre este LCD. Si quieres acelerar un fin de semana lleno de frustraciones, incluso puedes bitbang tú mismo usando un micro y algunos transistores para cambiar entre voltajes de polarización. Sin embargo, si sufres de ideación suicida, te aconsejo que no intentes esto.

Mis pensamientos finales finales:

La vida es corta. No gaste el recurso más preciado de todos, el tiempo, en esto. No hay razón para aplicar ingeniería inversa a todo esto. No será una experiencia de aprendizaje particularmente valiosa: aprenderá mucho sobre un chip muy específico y su interfaz de programación patentada que no tendrá nada especial y será solo otra variación de la misma basura hecha durante décadas en implementaciones superficialmente diferentes por todo tipo de micros. Y de todos modos no hay nada que valga la pena recuperar y descompilar en ese chip. No hay nada revolucionario en un micro flash de mierda con un controlador de segmento LCD incorporado y un convertidor analógico a digital de "10 bits" (probablemente más cerca de 6 bits y otros 4 de ruido sin valor). No hay nada que aprender de ese código, y lo igualará o mejorará simplemente escribiendo el suyo propio desde cero para un micro más abierto y disponible. Atmel fabrica chips como el atmega169 que tiene los mismos pines de controlador de segmento LCD disponibles, una interfaz de programación pública y bien documentada, herramientas de código abierto y montones de código de muestra.

No pretendo decirte si un proyecto vale la pena o no, o si es interesante o no. Todo el mundo tiene su propia definición de diversión, y yo digo, hazlo. Haga que esta cafetera se comporte, o dele un lazo de control PID, o haga que funcione con linux y agregue un bus CAN para que su automóvil pueda comunicarse con ella: enloquezca. Pero no pierda su tiempo haciendo ingeniería inversa en algo que no vale la pena invertir el tiempo de nadie. Si no te importa tanto la cafetera y quieres aplicar ingeniería inversa a algo, entonces elige algo que te ayude a aprender habilidades de ingeniería inversa, no detalles sin sentido de algún sistema patentado. O, desde un ángulo diferente, elija algo que realmente pueda tener algo interesante y que valga la pena recuperar. Sin embargo, dudo que algo que valga la pena esté sentado allí esperando que alguien lo deseche.

Confía en mí, hay toneladas de cosas igualmente interesantes en las que pasar tu tiempo, muchas más de las que pueden caber en cualquier vida humana. Elija los buenos, o los mejores que pueda manejar, y renuncie a los menores. Incluso si eso significa nunca aprender las 200 instrucciones de montaje que hacen que su máquina de café funcione.