
Ein leistungsstarkes statisches Tool zur Binärumschreibung
E9Patch - Ein leistungsstarker statischer Binär-Rewriter
E9Patch ist ein leistungsstarkes Tool zum statischen Binär-Rewriting für x86_64 Linux-ELF-Binärdateien.
E9Patch ist:
Statisches Binär-Rewriting nimmt eine Eingabe-Binärdatei (ELF-Executable oder Shared Object) und erzeugt eine Ausgabe-Binärdatei, auf die ein Patch/eine Modifikation angewendet wurde. Die gepatchte Binärdatei kann als Drop-in-Ersatz für das Original verwendet werden.
Vorgefertigte E9Patch-Binärdateien können hier heruntergeladen werden:
Das Erstellen von E9Patch ist sehr einfach: Führen Sie einfach das Skript build.sh aus.
Dies erstellt automatisch zwei Werkzeuge:
e9patch: das Backend zum Binär-Rewriting; unde9tool: ein Frontend für lineare Disassemblierung für E9Patch.E9Patch ist über das E9Tool-Frontend nutzbar.
Um beispielsweise eine Anweisungsdruck-Instrumentierung zu allen xor-Anweisungen in xterm hinzuzufügen, können wir den folgenden Befehl verwenden:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
Dies erzeugt eine modifizierte Version von xterm, die in die Datei a.out geschrieben wird.
Das modifizierte xterm kann wie gewohnt ausgeführt werden, gibt aber die Assembler-Zeichenkette jeder ausgeführten xor-Anweisung auf stderr aus:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
Eine vollständige Liste der unterstützten Optionen und Modi finden Sie unter:
$ ./e9tool --help
Einige andere Projekte, die E9Patch verwenden, sind:
libc.so.E9Patch ist ein Low-Level-Tool, das für die Integration in andere Projekte konzipiert ist. Weitere Informationen finden Sie in der folgenden Dokumentation:
Fehler können hier gemeldet werden:
Die aktuelle Version von E9Patch ist im Vergleich zum ursprünglichen Prototypen, der im PLDI'2020-Papier evaluiert wurde, erheblich verbessert. Insbesondere:
-O2 an E9Tool.Diese Software wurde unter der GNU Public License (GPL) Version 3 veröffentlicht.
Einige spezifische Dateien werden unter der MIT-Lizenz veröffentlicht (siehe Dateipräambel).
Weitere Informationen finden Sie in unserem PLDI'2020-Papier:
Bitte zitieren Sie unser Papier wie folgt:
@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)}
}
Diese Arbeit wurde teilweise vom National Satellite of Excellence in Trustworthy Software Systems unterstützt, finanziert von der National Research Foundation (NRF) Singapur im Rahmen des National Cybersecurity R&D (NCR) Programms.