
Desensamblador basado en Datalog que produce ensamblador reensamblable a partir de binarios ELF/PE, con representación intermedia GTIRB para análisis y reescritura de binarios en las arquitecturas x86, ARM y MIPS.
DDisasm es un desensamblador rápido que es lo suficientemente preciso como para que el código ensamblador resultante pueda ser reensamblado. DDisasm está implementado usando el lenguaje de programación lógica declarativa datalog (souffle) para compilar reglas y heurísticas de desensamblado. El desensamblador primero analiza la información de archivos ELF/PE y decodifica un superconjunto de instrucciones posibles para crear un conjunto inicial de hechos datalog. Estos hechos se analizan para identificar ubicación de código, simbolización y límites de funciones. Los resultados de este análisis, un conjunto refinado de hechos datalog, se traducen luego a la representación intermedia GTIRB para el análisis binario y la ingeniería inversa. El pretty printer de GTIRB puede usarse entonces para imprimir formateadamente el GTIRB a código ensamblador reensamblable.
Formatos binarios:
Arquitecturas de Conjuntos de Instrucciones (ISAs):
Puede ejecutar una versión preconstruida de Ddisasm usando Docker:
docker pull grammatech/ddisasm:latest
Ddisasm se puede usar para desensamblar un binario en la representación GTIRB. Podemos probarlo con uno de los ejemplos incluidos en el repositorio.
Primero, inicie el contenedor Docker de Ddisasm:
docker run -v $PWD/examples:/examples -it grammatech/ddisasm:latest
Dentro del contenedor Docker, compilemos uno de los ejemplos:
apt update && apt install gcc -y
cd /examples/ex1
gcc ex.c -o ex
Ahora podemos proceder a desensamblar el binario:
ddisasm ex --ir ex.gtirb
Una vez que tenga la representación GTIRB, puede realizar cambios programáticos en el binario usando GTIRB o gtirb-rewriting.
Luego, puede usar gtirb-pprinter (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 ensamblador e invocará al compilador/ensamblador (por ejemplo, gcc) para producir un nuevo binario. gtirb-pprinter se encargará de generar todas las opciones de línea de comandos necesarias para generar un nuevo binario, incluyendo opciones de compilación, dependencias de bibliotecas o scripts de enlazado de versiones.
También puede usar gtirb-pprinter para generar un listado ensamblador para modificación manual:
gtirb-pprinter ex.gtirb --asm ex.s
Este listado ensamblador puede luego recompilarse manualmente:
gcc -nostartfiles ex.s -o ex_rewritten
Consulte nuestra documentación para obtener información adicional.
Consulte CONTRIBUTING.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}
}
@INPROCEEDINGS{11023516,
author={Flores-Montoya, Antonio and Lim, Junghee and Seitz, Adam and Sood, Akshay and Raff, Edward and Holt, James},
booktitle={2025 IEEE Symposium on Security and Privacy (SP)},
title={Disassembly as Weighted Interval Scheduling with Learned Weights},
year={2025},
volume={},
number={},
pages={3033-3050},
keywords={Measurement;Privacy;Accuracy;Heuristic algorithms;Reverse engineering;Binary codes;Benchmark testing;Scheduling;Inference algorithms;Security;disassembly;reverse engineering;learning;binary analysis},
doi={10.1109/SP61157.2025.00192}}