Ddisasm es un desmontador rápido que es lo suficientemente preciso para que el código de ensamblaje resultante se vuelva a montar. El DDISASM se implementa utilizando el lenguaje de programación de lógica declarativo de datos (Souffle) para compilar reglas y heurísticas de desmontaje. El desasgustador primero analiza la información del archivo ELF/PE y decodifica un superconjunto de posibles instrucciones para crear un conjunto inicial de datos de datos. Estos hechos se analizan para identificar la ubicación del código , la simbolización y los límites de la función . Los resultados de este análisis, un conjunto refinado de hechos de conjunto de datos, se traducen a la representación intermedia GTIRB para el análisis binario y la ingeniería inversa. La impresora GTIRB Pretty puede usarse para imprimir bonita el Código de ensamblaje GTIRB para volver a ascender.
Formatos binarios:
Arquitecturas del conjunto de instrucciones (ISAS):
Puede ejecutar una versión prebuilt de DDISASM usando Docker:
docker pull grammatech/ddisasm:latestEl ddisasm se puede usar para desmontar un binario en la representación de GTIRB. Podemos probarlo con uno de los ejemplos incluidos en el repositorio.
Primero, comience el contenedor DDISASM Docker:
docker run -v $PWD /examples:/examples -it grammatech/ddisasm:latestDentro del contenedor Docker, construamos uno de los ejemplos:
apt update && apt install gcc -y
cd /examples/ex1
gcc ex.c -o exAhora podemos proceder a desmontar al binario:
ddisasm ex --ir ex.gtirbUna vez que tenga la representación GTIRB, puede hacer cambios programáticos en el binario usando GTIRB o Rewriting GTIRB.
Luego, puede usar GTIRB-Sprinter (incluido en la imagen Docker) para producir una nueva versión del binario:
gtirb-pprinter ex.gtirb -b ex_rewritten
Internamente, gtirb-pprinter generará un archivo de ensamblaje e invocará el compilador/ensamblador (por ejemplo, GCC) para producir un nuevo binario. gtirb-pprinter tendrá cuidado o generará todas las opciones de línea de comandos necesarias para generar un nuevo binario, incluidas las opciones de compilación, las dependencias de la biblioteca o los scripts de enlazadores de versión.
También puede usar gtirb-pprinter para generar una lista de ensamblaje para la modificación manual:
gtirb-pprinter ex.gtirb --asm ex.sEste listado de ensamblaje se puede recompilar manualmente:
gcc -nostartfiles ex.s -o ex_rewrittenEche un vistazo a nuestra documentación para obtener información adicional.
Ver contribuyente.md
@inproceedings {flores-montoya2020,
author = {Antonio Flores-Montoya and Eric Schulte},
title = {Datalog Disassembly},
booktitle = {29th USENIX Security Symposium (USENIX Security 20)},
year = {2020},
isbn = {978-1-939133-17-5},
pages = {1075--1092},
url = {https://www.usenix.org/conference/usenixsecurity20/presentation/flores-montoya},
publisher = {USENIX Association},
month = aug,
}
@misc{schulte2020gtirb,
title={GTIRB: Intermediate Representation for Binaries},
author={Eric Schulte and Jonathan Dorn and Antonio Flores-Montoya and Aaron Ballman and Tom Johnson},
year={2020},
eprint={1907.02859},
archivePrefix={arXiv},
primaryClass={cs.PL}
}