
Uma poderosa ferramenta de reescrita binária estática
E9Patch - Um Poderoso Reescritor Binário Estático
E9Patch é uma ferramenta poderosa de reescrita binária estática para binários ELF Linux x86_64.
E9Patch é:
A reescrita binária estática pega um binário de entrada (executável ELF ou objeto compartilhado) e gera um binário de saída com alguma correção/modificação aplicada. O binário corrigido pode ser usado como um substituto direto do original.
Binários pré-construídos do E9Patch podem ser baixados aqui:
Compilar o E9Patch é muito fácil: basta executar o script build.sh.
Isso irá compilar automaticamente duas ferramentas:
e9patch: o backend de reescrita binária; ee9tool: um frontend de desmontagem linear para o E9Patch.E9Patch é utilizável através do frontend E9Tool.
Por exemplo, para adicionar instrumentação de impressão de instruções a todas
as instruções xor no xterm, podemos usar o seguinte comando:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
Isso irá gerar uma versão modificada do xterm gravada no arquivo a.out.
O xterm modificado pode ser executado normalmente, mas imprimirá a string
de montagem de cada instrução xor executada para stderr:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
Para uma lista completa de opções e modos suportados, veja:
$ ./e9tool --help
Alguns outros projetos que usam E9Patch incluem:
libc.so.E9Patch é uma ferramenta de baixo nível projetada para ser integrável em outros projetos. Para saber mais, consulte a seguinte documentação:
Bugs podem ser reportados aqui:
A versão atual do E9Patch é significativamente melhorada em comparação com o protótipo original avaliado no artigo PLDI'2020. Especificamente:
-O2 para o E9Tool.Este software foi liberado sob a GNU Public License (GPL) Versão 3.
Alguns arquivos específicos são liberados sob a licença MIT (verifique o preâmbulo do arquivo).
Para mais informações, consulte nosso artigo PLDI'2020:
Por favor, cite nosso artigo da seguinte forma:
@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 trabalho foi parcialmente apoiado pelo National Satellite of Excellence in Trustworthy Software Systems, financiado pela National Research Foundation (NRF) de Singapura sob o programa National Cybersecurity R&D (NCR).