Si recibo un PCB (placa de circuito impreso) de un pequeño dispositivo de sistemas integrados, ¿cómo puedo analizarlo y conocer su funcionalidad?

Asumiré que no tiene documentación, y que la placa no es una placa “lista para usar” de la que podría buscar fácilmente en Google.

Esta es una situación en la que he estado profesionalmente. Me han pagado para hacer este tipo de ingeniería inversa antes, y no es fácil pero es posible.

Primero haga una lista de todos los circuitos integrados en el tablero. Usando Google encuentre las hojas de datos para cada uno de los circuitos integrados en el tablero. Ahora debería poder identificar el procesador y tener una idea aproximada de sus capacidades (es de 8 bits, 16 bits, 32 bits, cuánta memoria interna tiene, qué conjunto de periféricos contiene). Si hay dispositivos únicos en la placa, como un códec o un controlador de motor, esto le dará una indicación aproximada de qué tipo de trabajo está destinado a hacer, pero no los detalles. Para eso, necesitas ver el código.

Tuve suerte en mi proyecto de ingeniería inversa, utilizaba PROM externas para guardar el código. En este caso, pude eliminar las PROM de la placa y la placa de pruebas de un dispositivo que leería los contenidos y los almacenaría en un archivo. Luego se trataba de traducir el código de la máquina en mnemónicos de ensamblaje y buscar todos los lugares donde se producen ramas condicionales e incondicionales, comenzando en el “punto de entrada” del código, que es la dirección a la que los vectores de procesador en particular se encienden o reinician (Esto se puede encontrar en la hoja de datos del procesador). Si son instrucciones de ramificación a subrutina, sé que el código en el salto a la dirección es el comienzo de una subrutina (o función, si estaba codificada en C). Miro para ver si hay un código de entrada y salida de función común que use la pila, y si es así, el código probablemente se escribió en C o C ++, y si no, el código probablemente se escribió en ensamblador.

En cualquier aspecto, identifico los puntos de entrada y salida para las subrutinas y les doy “etiquetas” para que sea más fácil trabajar con ellas. Busco lecturas y escrituras de E / S y determino a qué dispositivos internos y externos se accede en estas lecturas y escrituras. En este momento, la imagen, aunque lejos de estar completa, comienza a revelarse lo suficiente como para determinar cuál es la función principal del tablero. Para obtener más información, solo sigue profundizando en el código.

Estos son solo algunos “consejos” sobre cómo realizar ingeniería inversa en una placa, pero de ninguna manera es todo lo que necesita saber; tomaría más tiempo explicarlo que yo.

¡Espero que esto ayude! 🙂

Antes que nada, al menos debes saber de qué dispositivo obtuviste ese pcb.

Una vez que sepa que es el fabricante y el número de modelo, busque el folleto de ese producto.

Descubra las especificaciones de hardware o simplemente puede mirar PCB y saber que los números e identificadores de IC.

Luego, busque en Internet o simplemente busque en Google esos números ic, obtendrá información variada sobre esos ics, pero le sugiero que visite el sitio web oficial del fabricante y descargue la hoja de datos desde allí.

En la hoja de datos, obtendrá información detallada sobre la funcionalidad de esos ics o dispositivos, incluida la interfaz, la tecnología de programación y todo eso.

Por lo tanto, en resumen, descubra las hojas de datos de los componentes y dispositivos que se usaron en esa pcb.

Además, debe conocer las configuraciones básicas de los circuitos y su uso, como series, paralelo, CB, CE, etc.

Si desea probarlo, puede usar herramientas de depuración de hardware como analizador lógico, osciloscopio, etc.

Espero que hayas tenido suficiente información.

Gracias.

Localice los circuitos integrados y anote los números de pieza. Busque los IC y cree un diagrama (símbolo esquemático) para cada IC. Use un multímetro, DMM o VOM para medir la continuidad entre los diferentes pines y componentes. Agregue estos componentes a su diagrama, creando así un esquema. Mida y observe los diversos voltajes en su esquema.

La parte más difícil de la ingeniería inversa de un sistema integrado es el firmware. Puede comprender parte de la funcionalidad del dispositivo al monitorear las señales con un osciloscopio, pero siempre puede haber una funcionalidad significativa que nunca podrá probar. Si tiene un analizador de protocolos, puede ver los datos en líneas seriales, SPI, I2C, etc. Si tiene un sistema de adquisición de datos (DAQ), puede monitorear múltiples señales de entrada y salida simultáneamente, así como monitorear voltajes analógicos, etc.

Si el dispositivo es de naturaleza digital con un procesador de algún tipo, gran parte de la funcionalidad estará en el código que ejecuta. Tendrá que encontrar una manera de sacar el código del tablero y luego desmontar el código. Esto será bastante difícil, pero luego tendrás que intentar interpretar lo que está haciendo el código. No quedará absolutamente nada del código original, excepto quizás cadenas literales incrustadas que pueden o no darle algunas pistas. Puede haber llamadas a funciones complejas como printf () (recuerde, cadenas literales incrustadas que son cadenas de formato), y no habrá nombres de variables, nombres de subrutinas o cualquier otra información significativa del código fuente. Eso lo hace un poco difícil.

Probablemente pueda obtener una idea de los chips periféricos que rodean el procesador, y puede usar la asignación IO de periféricos internos como puntos clave en su código desmontado. Naturalmente, ayuda saber algo sobre el propósito general de la junta.

Si la placa contiene una gran cantidad de circuitos analógicos, deberá rastrear el circuito y volver a dibujar un esquema. Desde el esquema, posiblemente puede analizar lo que hace el tablero de manera general. Tendría que ser extremadamente hábil para identificar exactamente cómo funciona la placa sin tener algunos antecedentes en el tipo de circuito que podría encontrar. Si el tablero usa técnicas de RF, entonces puede haber aspectos del diseño del tablero que entran en juego. Muchos dispositivos electrónicos utilizan bucles de retroalimentación, lo que dificulta el análisis si intenta realizar una inyección de señal para analizar comportamientos. Encontrar una fuente de señal que coincida con lo que la placa use como entrada será un desafío en sí mismo. Necesitará usar una variedad de equipos de prueba y medición, que naturalmente necesitará comprender cómo usarlos.

Puede haber algunos topes de espectáculo reales. Los ASIC que son esencialmente indocumentados públicamente pueden ser prácticamente imposibles de descifrar. Incluso dispositivos más simples como PAL o FPGA, o CPU con código bloqueado e ilegible harán que el problema sea un par de órdenes de magnitud más grande. Tampoco se debe pasar por alto el potencial de fuentes de peligro; altos voltajes, altas corrientes, incluso radiación de microondas.

Las probabilidades están muy a menudo en contra de usted. Buena suerte.

• Anote todos los números de pieza en el tablero, búsquelos en Google y busque hojas de datos. Utilice su comprensión de lo que hace cada chip para construir un diagrama de bloques del sistema. En algunos casos, esto le dirá qué es el dispositivo y qué hace.

• Si no es inmediatamente obvio desde la hoja de datos, encienda el dispositivo y encuentre el nivel lógico. Lo más probable es 3.3v o 5v. Esto le permitirá probar adecuadamente la lógica del dispositivo.

• Pruebe con un analizador lógico en puntos de prueba visibles e intente encontrar un UART con una consola. La simple prueba y error de enviar comandos puede darle una buena idea de lo que hace el dispositivo y cómo funciona. Muchos sistemas integrados como enrutadores dejan esta interfaz expuesta. Incluso los primeros iPhones tenían un UART y una consola.

• Encuentra JTAG o SWD. Volcar la memoria de programa del dispositivo y desarmarla para la arquitectura adecuada. Cree un gráfico de llamadas del firmware utilizando algo como IDA Pro o Hopper. Analice cada función y accesos de referencia cruzada a direcciones de memoria a sus registros de contraparte que se encuentran en la hoja de datos (si tiene tanta suerte). Determine cómo los registros cambian el estado del hardware y, por lo tanto, el estado de su sistema en su conjunto.

• Observe el tráfico en autobuses como USART, SPI o I2C. Encuentra patrones, como escribir o leer comandos. Analice cómo cambian los datos a medida que mueve los interruptores o presiona los botones del dispositivo. Comprender cómo se formatean los paquetes de datos puede darle una idea de lo que hacen los datos y hacia dónde van, por ejemplo, a un controlador de memoria o interfaz de pantalla.

• Haz todas estas cosas dos veces.

Tácticas como estas son aplicables en la mayoría de los casos de sistemas integrados de ingeniería inversa. Cualquier cosa más allá de estas o prácticas relacionadas se vuelve muy específica de la aplicación.

La forma habitual de analizar un dispositivo electrónico es revisando su esquema. Al carecer de esto, se enfrenta a la tediosa tarea de dibujar los dispositivos de estado sólido / lógico y luego dibujar todas las conexiones. La ingeniería inversa puede involucrar sangre, sudor y lágrimas.