
Мощный инструмент статической перезаписи бинарных файлов
E9Patch — Мощный инструмент для статической перезаписи бинарных файлов
E9Patch — это мощный инструмент для статической перезаписи бинарных файлов для x86_64 Linux ELF.
E9Patch:
Статическая перезапись бинарных файлов принимает входной бинарный файл (исполняемый ELF или общий объект) и генерирует выходной бинарный файл с применённым к нему патчем/модификацией. Пропатченный бинарный файл может использоваться как замена оригинального.
Предварительно собранные бинарные файлы E9Patch можно скачать здесь:
Собрать E9Patch очень просто: просто выполните скрипт build.sh.
Это автоматически соберёт два инструмента:
e9patch: бэкенд для перезаписи бинарных файлов; иe9tool: фронтенд для линейной дизассемблеризации для E9Patch.E9Patch можно использовать через фронтенд E9Tool.
Например, чтобы добавить инструментирование вывода инструкций для всех инструкций xor в xterm, мы можем использовать следующую команду:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
Это создаст модифицированную версию xterm, записанную в файл a.out.
Модифицированный xterm можно запускать как обычно, но он будет выводить строку ассемблера каждой выполненной инструкции xor в stderr:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
Для полного списка поддерживаемых опций и режимов смотрите:
$ ./e9tool --help
Некоторые другие проекты, использующие E9Patch, включают:
libc.so.E9Patch — это низкоуровневый инструмент, предназначенный для интеграции в другие проекты. Чтобы узнать больше, пожалуйста, ознакомьтесь со следующей документацией:
Сообщать об ошибках можно здесь:
Текущая версия E9Patch значительно улучшена по сравнению с оригинальным прототипом, оценённым в статье PLDI'2020. В частности:
-O2 в E9Tool.Это программное обеспечение выпущено под лицензией GNU Public License (GPL) Версия 3.
Некоторые отдельные файлы выпущены под лицензией MIT (проверьте преамбулу файла).
Для получения дополнительной информации, пожалуйста, ознакомьтесь с нашей статьёй PLDI'2020:
Пожалуйста, цитируйте нашу статью следующим образом:
@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)}
}
Эта работа была частично поддержана Национальным центром передового опыта в области надёжных программных систем, финансируемым Национальным исследовательским фондом (NRF) Сингапура в рамках Национальной программы исследований и разработок в области кибербезопасности (NCR).