NOTÍCIAS

[ANONYMOUS][grids]

X86 To LLVM Bitcode Translation Framework: McSema


x86 para LLVM Bitcode Translation Framework O 

     McSema levanta os binários x86 e amd64 para módulos de bitcode LLVM. O McSema oferece suporte a binários Linux e Windows, e a maioria das instruções x86 e amd64, incluindo operações inteiras, FPU e SSE. 

O McSema é separado em duas partes conceituais: recuperação de fluxo de controle e tradução de instruções. A recuperação do fluxo de controle é realizada usando a ferramenta mcsema-disass, que usa o IDA Pro para desmontar um arquivo binário e produz um gráfico de fluxo de controle. A tradução de instruções é realizada usando a ferramenta mcsema-lift, que converte o gráfico de fluxo de controle em bitcode LLVM. 

Recursos 

Traduz os binários Linux ELF e Windows PE de 32 e 64 bits para bitcode, incluindo executáveis ​​e bibliotecas compartilhadas para cada plataforma.
Suporta um grande subconjunto de x86 e x86-64 instruções, incluindo a maioria das operações inteiras, FPU e SSE. Use mcsema-lift - list-supported --arch x86 para ver uma lista completa. 
Executa em Windows e Linux, e pode traduzir binários do Linux em binários Windows e Windows no Linux. 
O bitcode de saída é compatível com a cadeia de ferramentas LLVM 3.8. 
O código de bits traduzido pode ser analisado ou recompilado como um novo executável funcional com funcionalidades idênticas ao original. 
O McSema é executado no Windows e no Linux e foi testado no Windows 7, 10, no Ubuntu 14.04 e no Ubuntu 16.04. 


Usando o Mcsema 

Por que todos traduziriam binários de volta ao bitcode?

Patching e modificação binários. Levantar para LLVM IR permite que você modifique o programa de destino de forma limpa. Você pode executar passagens de ofuscação ou endurecimento, adicionar recursos, remover recursos, reescrever recursos ou até consertar esse erro de trapaça, erro gramatical ou lógica insana. Quando terminar, sua nova criação pode ser recompilada para um novo binário que ostenta todas essas mudanças. No Cyber ​​Grand Challenge, conseguimos usar o mcsema para traduzir binários de desafio para bitcode, inserir verificações de segurança de memória e depois emitir binários de trabalho. 
Execução simbólica com KLEE. O KLEE opera no código de bits LLVM, geralmente gerado fornecendo fonte para a cadeia de ferramentas LLVM. Mcsema pode levantar um binário para o código de bit LLVM, permitindo que o KLEE funcione em alvos anteriormente indisponíveis.
Reutilize as ferramentas existentes do LLVM. KLEE não é a única ferramenta que se torna disponível para uso em bitcode. É possível executar passagens de otimização LLVM e outras ferramentas baseadas em LLVM, como o libFuzzer no código de bits levantado. 
Analise o binário em vez da fonte. A análise do nível de origem é excelente, mas nem sempre é possível (por exemplo, você não tem a fonte) e, mesmo quando está disponível, não possui transformações, reordenamento e otimizações do compilador. Analisando as garantias binárias reais que você está analisando o verdadeiro comportamento executado. 
Escreva um conjunto de ferramentas de análise. Levantar para LLVM IR significa que um conjunto de ferramentas de análise pode funcionar na fonte e no binário. A manutenção de um único conjunto de ferramentas economiza tempo e esforço de desenvolvimento e permite um conjunto único de ferramentas melhores. 


Dependências 

Nome Versão 
Git  Último 
CMake  3.1+ 
Google Protobuf  2.6.1 
LLVM  3.8 
Clang  3.8 (3.9 se estiver usando o Visual Studio 2015) 
Python  2.7 
Python Package Index  Último 
python-protobuf  2.6.1 
IDA Pro  6.7+ 
Visual Studio  2013+ (somente para Windows) 

Docs 
Download