
Un potente strumento di riscrittura binaria statica
E9Patch - Un Potente Riscrittore Binario Statico
E9Patch è un potente strumento di riscrittura binaria statica per binari ELF Linux x86_64.
E9Patch è:
La riscrittura binaria statica prende un binario in input (eseguibile ELF o oggetto condiviso) e genera un binario in output con una patch/modifica applicata. Il binario patchato può essere utilizzato come sostituto diretto dell'originale.
I binari precompilati di E9Patch possono essere scaricati qui:
Compilare E9Patch è molto semplice: basta eseguire lo script build.sh.
Questo compilerà automaticamente due strumenti:
e9patch: il backend di riscrittura binaria; ee9tool: un frontend di disassemblaggio lineare per E9Patch.E9Patch è utilizzabile tramite il frontend E9Tool.
Ad esempio, per aggiungere la strumentazione di stampa delle istruzioni a tutte le istruzioni xor in xterm, possiamo usare il seguente comando:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
Questo genererà una versione modificata di xterm scritta nel file a.out.
La versione modificata di xterm può essere eseguita normalmente, ma stamperà la stringa assembly di ogni istruzione xor eseguita su stderr:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
Per un elenco completo delle opzioni e modalità supportate, vedi:
$ ./e9tool --help
Alcuni altri progetti che utilizzano E9Patch includono:
libc.so.E9Patch è uno strumento di basso livello progettato per essere integrabile in altri progetti. Per saperne di più, consulta la seguente documentazione:
I bug possono essere segnalati qui:
La versione attuale di E9Patch è notevolmente migliorata rispetto al prototipo originale valutato nell'articolo PLDI'2020. In particolare:
-O2 a E9Tool.Questo software è stato rilasciato sotto la GNU Public License (GPL) Versione 3.
Alcuni file specifici sono rilasciati sotto licenza MIT (controlla il preambolo del file).
Per maggiori informazioni, consulta il nostro articolo PLDI'2020:
Si prega di citare il nostro articolo come segue:
@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)}
}
Questo lavoro è stato parzialmente supportato dal National Satellite of Excellence in Trustworthy Software Systems, finanziato dal National Research Foundation (NRF) Singapore nell'ambito del programma National Cybersecurity R&D (NCR).