ScratchABit es un desensamblador incremental interactivo con capacidades de análisis de flujo de control/datos. ScratchABit se dedica a los esfuerzos de la comunidad de ingeniería inversa OpenSource (ingeniería inversa para producir controladores/firmware OpenSource para hardware que los proveedores no admiten adecuadamente, para la interoperabilidad de hardware y software, para investigación de seguridad).
ScratchABit admite la conocida API IDAPython de la comunidad para escribir módulos de desmontaje/extensión.
ScratchABit es un trabajo en progreso, se agregan funciones según sea necesario y las contribuciones son bienvenidas.
ScratchABit se publica bajo los términos de la Licencia Pública General GNU v3 (GPLv3).
No debe escribirse en un lenguaje confuso. Estos incluyen lenguajes que son de nivel demasiado bajo, que permiten acceder a variables no inicializadas, que no diferencian entre variables y funciones/procedimientos, que inician índices de matrices a partir de números arbitrarios, etc., etc. ScratchABit está escrito en Python ( versión moderna, Python3) para su placer y cordura.
El marco de la interfaz de usuario debe permitir la interacción del usuario al nivel necesario, no agregar dependencias, sobrecargas, problemas e incompatibilidades entre las versiones del marco. ScratchABit actualmente utiliza una interfaz de usuario de texto simple en pantalla completa, usando secuencias de escape de terminal ANSI/VT100 (sí, incluso la biblioteca de curses se consideró una dependencia demasiado grande para imponerla a los usuarios).
Se deben aprovechar formatos de texto fáciles de usar para almacenar "bases de datos", para facilitar la reutilización y la escritura de herramientas, y el almacenamiento en sistemas de control de versiones.
Para usar ScratchABit, necesita Python3 instalado (probado con Python 3.3 a 3.7) y un terminal o emulador de terminal VT100 (mínimo) o XTerm (recomendado) (cualquier sistema Unix debe ser compatible, como Linux/BSD/etc., consulte las preguntas frecuentes a continuación para más).
Clona el código usando:
git clone --recursive https://github.com/pfalcon/ScratchABit
Si clonó código sin --recursive
, ejecute git submodule update --init
en el directorio de ScratchABit.
ScratchABit ahora viene con complementos de CPU basados en Capstone Engine, que permiten el acceso a varias arquitecturas de CPU. Para usarlo, se debe instalar el módulo de enlaces de Python reciente para Capstone (en preferencia a los paquetes enviados por distribuciones del sistema operativo, que a menudo están desactualizados). La forma más sencilla de instalarlo es en el directorio de paquetes de usuario de Python:
pip3 install --no-cache-dir --user capstone
Una alternativa es instalarlo en un entorno virtual Python dentro del directorio de ScratchABit:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
Siempre que abra una nueva sesión de terminal para trabajar con ScratchABit, ejecute el comando source .venv/bin/activate
nuevamente para activar el entorno virtual.
Si nada de lo anterior funciona, puede intentar instalar el paquete capstone en todo el sistema (no recomendado):
sudo pip3 install --system capstone
Si desea desmontar un archivo en formato ejecutable de autodescripción (como ELF), simplemente páselo como argumento a ScratchABit.py
. El repositorio incluye una serie de archivos de example-*.elf
para varias arquitecturas para un inicio rápido. Por ejemplo, para probar la versión x86 de 32 bits:
python3 ScratchABit.py example-x86_32.elf
Alternativamente, si desea desensamblar un archivo binario sin formato, necesita crear un archivo .def (definición) para especificar qué áreas de memoria están definidas para el código, en qué dirección cargar el archivo binario, etc. (Nota: a. def también puede ser útil para .elf y archivos similares). El repositorio incluye un código binario sin formato x86_64 simple y el archivo de ejemplo-x86_64.def correspondiente (busque en el interior la descripción de las opciones disponibles):
python3 ScratchABit.py example-x86_64.def
Presione F9 para acceder a los menús (el mouse también funciona en terminales compatibles con XTerm). Presione F1 para obtener ayuda sobre las combinaciones de teclas (también se puede acceder a la mayoría de las acciones a través del menú). El flujo de trabajo de ScratchABit es similar al de otros desensambladores interactivos (algo de experiencia previa o lecturas previas pueden ser útiles).
Los complementos del procesador IDAPython se pueden cargar desde cualquier lugar de la ruta del módulo Python. Alternativamente, puede vincular/copiar los archivos .py
del complemento en el subdirectorio plugins/cpu/
.
Una vez que el complemento esté disponible, cree un nuevo archivo de definición basado en example-x86_64.def
que establezca el nombre del módulo del complemento (sin extensión .py
) en la línea cpu xxx
.
Para ver un ejemplo muy simple que utiliza un complemento externo, consulte este archivo esp8266.def que funciona con el complemento xtensa.py del repositorio ida-xtensa2.
P: ¿Qué procesadores/arquitecturas son compatibles?
R: ScratchABit no es compatible con ninguna arquitectura de procesador por sí solo; se puede reorientar completamente utilizando los complementos API de IDAPython. Hay muchos complementos disponibles, escribir un nuevo complemento es fácil. Para permitir a los usuarios probar ScratchABit, se incluye un complemento de procesador x86 simple en la distribución, que utiliza el desensamblador Pymsasid debajo del capó.
A partir de la versión 2.0, también se incluye el complemento Capstone, que permite el acceso a varias arquitecturas, incluidas x86, ARM, MIPS, PowerPC, SPARC, etc. (el soporte de arquitectura se habilita gradualmente según las pruebas de los usuarios).
Puede leer sobre los complementos incluidos con ScratchABit en el archivo README para plugins/cpu/
dir.
P: ¿Depurador?
R: ScratchABit se dedica al análisis estático y al soporte sencillo para nuevas arquitecturas de CPU (simplemente codifique un nuevo complemento de CPU en Python; puede obtener resultados iniciales en pocas horas). El análisis dinámico no fue concebido para ser una característica principal y no hay planes inmediatos para implementarlo. Aunque los parches son bienvenidos.
P: ¿Descompilador?
R: Existe un proyecto relacionado, llamado ScratchABlock, para un análisis, transformación y descompilación profundos de programas. Se espera que a medida que ScratchABlock madure, algunas de sus funciones estarán disponibles en ScratchABit (quizás a través de complementos).
P: No uso Linux, ¿cómo puedo ejecutar ScratchABit?
R: Instale Linux en un emulador/VM en su sistema y regocíjese.
P: ¿Captura de pantalla obligatoria?
R: Claro: