
Una potente herramienta de reescritura binaria estática
E9Patch - Un potente reescritor binario estático
E9Patch es una potente herramienta de reescritura binaria estática para binarios ELF de Linux x86_64.
E9Patch es:
La reescritura binaria estática toma un binario de entrada (Ejecutable ELF u objeto compartido) y genera un binario de salida con algún parche/modificación aplicada. El binario parcheado puede usarse como un reemplazo directo del original.
Los binarios precompilados de E9Patch se pueden descargar aquí:
Compilar E9Patch es muy fácil: simplemente ejecute el script build.sh.
Esto compilará automáticamente dos herramientas:
e9patch: el backend de reescritura binaria; ye9tool: un frontend de desensamblaje lineal para E9Patch.E9Patch es utilizable a través del frontend E9Tool.
Por ejemplo, para añadir instrumentación de impresión de instrucciones a todas las instrucciones xor en xterm, podemos usar el siguiente comando:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
Esto generará una versión modificada de xterm escrita en el archivo a.out.
El xterm modificado se puede ejecutar con normalidad, pero imprimirá la cadena de ensamblaje de cada instrucción xor ejecutada en stderr:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
Para una lista completa de opciones y modos compatibles, consulte:
$ ./e9tool --help
Algunos otros proyectos que usan E9Patch incluyen:
libc.so.E9Patch es una herramienta de bajo nivel diseñada para ser integrable en otros proyectos. Para obtener más información, consulte la siguiente documentación:
Los errores se pueden informar aquí:
La versión actual de E9Patch está significativamente mejorada en comparación con el prototipo original evaluado en el artículo PLDI'2020. Específicamente:
-O2 a E9Tool.Este software se ha publicado bajo la GNU Public License (GPL) Versión 3.
Algunos archivos específicos se publican bajo la licencia MIT (consulte el preámbulo del archivo).
Para más información, consulte nuestro artículo PLDI'2020:
Por favor, cite nuestro artículo de la siguiente manera:
@inproceedings{e9patch,
author = {Duck, Gregory J. and Gao, Xiang and Roychoudhury, Abhik},
title = {Binary rewriting without control flow recovery},
year = {2020},
publisher = {Association for Computing Machinery},
url = {https://doi.org/10.1145/3385412.3385972},
doi = {10.1145/3385412.3385972},
booktitle = {Programming Language Design and Implementation (PLDI)}
}
Este trabajo fue parcialmente apoyado por el National Satellite of Excellence in Trustworthy Software Systems, financiado por la National Research Foundation (NRF) de Singapur bajo el programa National Cybersecurity R&D (NCR).