Desensamblador online

  • January 17, 2013
  • tuxotron
  • oda_screen.png

    Alguna vez podríamos vernos en la situación de tener que analizar y/o desensamblar un fichero binario. Idealmente tendríamos nuestro equipo con nosotros y todas las herramientas que necesitamos para analizar dicho fichero, pero como la mayoría de nosotros creemos en Murphy, siempre es bueno el tener un plan B.

    Incluso teniendo nuestro equipo, puede ser que el binario con el nos tenemos que enfrentar sea de una arquitectura distinta a las que reconoce nuestro desensamblador. Así tener acceso a un desensamblador online no sería ninguna mala idea.

    Online Disassembler u ODA es precisamente eso, un desensamblador online listo para subir nuestro fichero binario y mostrarnos el desensamblado del mismo. Es capaz de reconocer arquitecturas:

    • x86
    • ARM
    • MIPS
    • PowerPC
    • PDP11
    Para desensamblar un fichero es tan fácil como seleccionar File Upload y arrastrar nuestro fichero dentro del navegador. ODA intentará averiguar la arquitectura del fichero, pero nos da la opción a seleccionar una diferente de entre una larga lista de opciones.

    Nos permite no sólo subir uno, sino varios ficheros, de entre los cuales podemos ir navegando y ver el código desensamblado. Una vez el fichero ha sido procesado, nos mostrará 4 apartados distintos:

    • Código ensamblador, donde podemos ver como ODA además es capaz de detectar y marcar (nombra) las distintas funciones dentro del código, referencias cruzadas (XREF), marca los bucles y llamadas con flechas de indicación, etc.
    • Secciones es el segundo apartado, donde podemos ver las distintas secciones del fichero (.reloc, .data, .text, etc)
    • Símbolos es el apartado siguiente, dónde nos muestra la lista (si existen) de los símbolos con su dirección, tipo y nombre.
    • Cadenas (Strings) es el último de los apartados donde podemos ver las cadenas de texto dentro del fichero y su desplazamiento.
    Además de todo esto, tenemos varias opciones que podemos elegir a la hora de la presentación del código ensamblador, como son: formato de direcciones (big o little endian), sintaxis (Intel o ATT), modo (i8086, i386 o x86-64), tamaño de direcciones (16, 32 ó 64 bits) y tamaño de datos (16 ó 32 bits).

    El proyecto está en constante desarrollo, por lo que irán apareciendo nuevas funcionalidades, modificaciones, correcciones, etc.

Raspberry Pi, un poco de hardware

  • January 16, 2013
  • tuxotron
  • Selection_001.png

    En esta entrada vamos a dar un pequeño repaso al hardware que incorpora nuestro querido Raspberry Pi.

    Lo primero decir que, como mucho ya sabréis, el tamaño importa es el de una tarjeta de crédito. Este fue una de las mayores dificultades que los ingenieros tuvieron que afrontar cuando trabajaban en el diseño del dispositivo. Por lo visto tuvieron problemas bastante serios porque no encontraban la forma de colocar todos los componentes de la placa e interconectarlos.

    Para empezar por las características del hardware, empecemos por el microprocesador. Por su versatilidad, soporte de distintas arquitecturas y precio, el equipo de ingenieros apostaron por Linux. Por lo tanto entre los requerimientos el microprocesador, tenía que ser de alguna de las arquitecturas soportadas por Linux, bajo consumo y bajo coste. Los diseñadores optaron por una arquitectura ARM. También pensaron que 700 MHz eran suficientes para correr un sistema completo Linux, más varias aplicaciones educacionales y algún que otro lenguaje de programación de alto nivel. Por lo que la decisión final fue usar chip de Broadcom, el BCM2835 ARM11.

    Selection_002.png

    Otra de las características críticas del sistema es la memoria RAM. Inicialmente diseñaron dos modelos: A y B. Ambos tenían 256Mb, pero a finales del 2012, al modelo B (revisión 2) se le añadió 256Mb más, por lo que tenemos: modelos A y B (revisión 1) con 256Mb y modelo B revisión 2 con 512Mb.

    El segundo tipo de memoria que necesitamos en el Raspberry Pi es la memoria de almacenamiento, para la cual Raspberry Pi incorpora un lector de tarjetas de memoria SD de alta capacidad (SDHC). El cual actúa como dispositivo primario del sistema y por lo tanto es desde donde nuestro RPi va a arrancar el sistema.

    El tercer elemento crítico del sistema es la “tarjeta de vídeo”, en nuestro caso sería más bien el procesador gráfico. Raspberry Pi viene equipado con un VideoCore IV GPU (Graphical Processing Unit), capaz de reproducir vídeo en alta definición. Por ello y para aprovechar la potencia gráfica, RPi incorpora un puerto HDMI capaz de transportar no sólo vídeo, sino también audio. Además del puerto de alta definición, RPi también incorpora salida de vídeo compuesto y audio analógico. La razón de esta segunda opción es porque los ingenieros querían hacer llegar este sistema todos los rincones del mundo incluido países del tercer mundo, donde monitores o televisores de alta definición serían un verdadero lujo.

    La conectividad de red, es otra de las diferencias entre los modelos A y B. El modelo B tiene un puerto Ethernet A LAN9512, conectado internamente vía USB con una velocidad de 10/100Mbits. Mientras que el modelo A carece de esta característica. De nuevo, siempre pensando en países más pobres, esta era una forma de abaratar el coste del RPi

    Ahora hablaremos de la posibilidad de añadir dispositivos externos. Aquí, de nuevo tenemos otras de las diferencias entre los modelos A y B. El modelo B dispone de 2 puertos USB 2.0 de propósito general, mientras que el modelo A sólo dispone de 1 puerto USB 2.0. Ambos modelos incorporan un puerto micro USB, pero éste es por el cual se alimenta la placa. El modelo A consume 2.5W y el B 3.5W. También tenemos un puerto SCI2 (Camera Serial Interface), lo que abra las puertas al desarrollo de cámaras de vídeo para el Raspberry Pi. La GPU que incorporan estos dispositivos es capaz de manejar capturas de imágenes de 40MP (Megapixels) y capturar vídeo con una resolución de 1080p a 30 frames por segundo. ¡Bastante impresionante!

    Para acabar hablaremos de una de las características que llaman más la atención a los hackers (en su sentido más puro): el puerto GPIO. GPIO o Generic Purpose Input/Output (entrada/salida de propósito general), nos permite comunicarnos con las tripas del Raspberry Pi, es una forma de comunicación directa con el hardware de nuestro dispositivo. GPIO viene en forma pins de 2x13, los cuales incluyen conexiones SPI, I2C, UART serie y voltajes de 3.3V y 5V. En la segunda revisión del modelo B, hicieron algunos cambios en el diseño del GPIO y además de cambiar algunos pines de lugar, añadieron 4 pines más de propósito general y otro nuevo llamado P5. Sobre GPIO hablaremos un poco más en futuras entradas.

    Como colofón final, decir que además de las diferencias mencionadas entre las revisiones 1 y 2 del modelo B, en la segunda revisión se añadió funcionalidad para hacer reset del equipo y depuración a través de JTAG.

    Las dos imágenes mostradas son capturas de pantalla de TheMagPi número 2.