Amoco
| Status: | Em desenvolvimento |
| Versão: | 2.9 (pré-3,0) |
| Doc: | http://amoco.readthedocs.io/en/latest/index.html |
Descrição
Amoco é um pacote Python dedicado à análise simbólica de binários.
Apresenta:
- Uma estrutura genérica para decodificar instruções, desenvolvida para reduzir o tempo necessário para implementar o suporte para novas arquiteturas. Por exemplo, o decodificador para a maioria das instruções do IA32 (fins gerais) se encaixa em menos de 800 linhas de python. O decodificador SPARCV8 RISC completo (ou o conjunto de thumb-1 do braço também se encaixa em menos de 350 linhas. O decodificador do conjunto de instruções ARMV8 é inferior a 650 linhas.
- Um módulo de álgebra simbólica que permite descrever a semântica de todas as instruções e calcular uma representação funcional dos blocos de instruções.
- Um modelo de execução genérica que fornece um modelo de memória abstrato para lidar com valores concretos ou simbólicos de forma transparente e outros recursos dependentes do sistema.
- Várias classes que implementam técnicas usuais de desmontagem, como varredura linear, travessia recursiva ou técnicas mais elaboradas, como o Path-Predicate, que se baseia em solucionadores de SAT/SMT para prosseguir com a descoberta do gráfico de fluxo de controle ou mesmo para implementar técnicas como DARE (exploração aleatória automatizada).
- Vários ajudantes genéricos e impressoras bonitas dependentes do arco para permitir configurações de aparência e sensação personalizadas (pense em Sintaxe AT&T vs. Intel, compensações absolutas versus relativas, decimais ou hexadecipais, etc.).
Amoco ainda está em andamento . Consulte TODO para obter uma lista de recursos a serem mesclados do Develop Branch ou para ser implementado mais minuciosamente.
A documentação do usuário e a API podem ser encontradas em http://amoco.readthedocs.io/en/latest/index.html

Pendência
Alguns componentes do AMOCO ainda estão sendo empurrados para o ramo de liberação ou desenvolvidos. Mais precisamente:
- As instruções da FPU x86 não são implementadas, não são implementadas,
- Os conjuntos de instruções ARM Simd, VFP, Neon, TrustZone, Jazelle não são implementados,
- Algumas estratégias de desmontagem baseadas no solucionador ainda não estão mescladas.
- Os recursos de importação/exportação do BID não são implementados.
As contribuições para cumprir peças incompletas/não implementadas são bem -vindas.
Notas do desenvolvedor
A folha de estilo QT padrão é inspirada na excelente QDarkStylesheet e usa a maioria de seus ícones através da API Qresource disponibilizada no módulo gerado rc_icons.py :
<pyenv>/lib/python3.
Licença
Por favor, veja a licença.
Changelog
- v2.9.11
- Alterar o motor de termo de interface do usuário padrão de pigmentos para ricos
- Adicione o objeto Emudata ORM para salvar o estado do emulador
- Adicionar comandos de salvar/restaurar na interface do usuário emul
- Implementar a lógica do callStack
- Adicionar quadro de pilhas de calls in Emul Ui
- Adicionar comando debug na interface do usuário
- Adicione a classe Structview para estruturas de impressão bonita
- Corrigir x86 mmu_cache lógica (Flush & misses)
- Alterar a ação padrão de CodeQL para Ruff
- Código de refattor com base em verificações de ruff
- v2.9.10
- x86: adicione suporte para execução do modo real
- x86: adicione suporte completo para segmentação/paginação
- Adicione o sistema Baremetal-X86 para análise de firmware do BIOS
- Merge New Arch.io Module para definir os stubs do iOS
- MERGE CAS.BLOBS Módulo
- Adicione versões rápidas de reptos/lods/scas/movs
- Adicione o método Tracepoint na aula de Emul
- Adicione suporte para recursos de PE
- Melhore os comandos de carga/emul do aplicativo amoco
- Adicionar conjunto, exibição, Nexti, até que em EMUL UI
- v2.9.9
- Adicionar arquitetura PPC32 (E200)
- Adicione suporte para o formato executável da Coft
- Adicione o analisador para arquivos de rastreamento do GDB
- Melhore a subpackagem de estruturas
- v2.9.8
- Atualização para Pyside6 (qt6)
- Adicione o formato OLE2
- Atualize o subpackage de estruturas para permitir tamanhos de ponteiro escolhidos
- Atualização parcial da arquitetura AVR
- v2.9.7
- soltar python <3,8 suporte
- Melhore o pacote de estruturas para o suporte e o cálculo do campo de Bitfield das compensações dos campos para o tamanho do ponteiro escolhido (32 ou 64 bits)
- v2.9.6
- Mesclar Qt GUI ImageView
- Melhore o QT GUI Binfmtview/Hexview com entropia e Infoview
- Adicionar visualização específica de mach-o
- melhorar o suporte para o modo escuro da interface do usuário QT
- Adicione a arquitetura Tricore
- Adicione a arquitetura W65C02
- Adicione a arquitetura WASM
- Adicionar analisador de formato binário WASM
- Mover System.Structs Módulo em um pacote
- v2.9.5
- Mesclar Qt GUI Binfmtview/Hexview
- Corrija o decodificador e a semântica de várias instruções do braço
- Adicione a visão da estrutura e as visualizações específicas de elfos e pe
- Adicione suporte ao modo escuro da UI QT
- Adicione carregadores MIPs
- Adicione o suporte do Bitfield em estruturas
- v2.9.4
- Adicionar carregadores Linux32 para MIPS_LE/SPARC/RISCV
- Atualizar interfaces do sistema Win32/Win64
- Adicione o suporte do mapeador para o pipeline não interlocking
- Corrija os efeitos do pipeline de carga/armazenamento MIPS R3000 R3000
- Adicione a classe Archview
- Adicione a arquitetura RISCV64 (riscv.rv64i)
- Adicionar teste de pré -condição para especificações
- Atualize todas as especificações do arco para evitar colisões
- melhorar/consertar vários formatos de arco
- Corrija o analisador x86
- v2.9.3
- Mesclar/atualizar comandos DBGUI EMUL e SRV
- Mesclar/atualizar visualizações do emulador
- Adicione o sistema PSX
- Adicione a arquitetura MIPS (somente R3000)
- melhorar o suporte para mudanças na configuração
- Rework Ext/Stub Interface
- Corrigindo o formatador SPARC
- Corrigindo PE32+ Datadirectories analisando
- v2.9.2
- Prepare a fusão com o dbgui
- Drop Python 2.7 Suporte
- Rework Subpackage/Module Importações e registro
- Vários código higienizando
- fontes em blackificação
- v2.9.1
- Adicionar Mach-O Loader e System.OSX Skeleton
- Melhore o módulo do emulador
- Adicione o servidor e o cliente básico CMDCLI UI
- Corrija vários erros/avisos
- v2.9.0
- Adicionar esqueleto do módulo Emulador (classe EMUL)
- reorganizar os módulos do sistema em subpackagens
- Adicionar classes de sistema, SO, tarefa e definição
- Adicione a arquitetura AVR
- Classe de bloco modificado => Atributo do mapa movido para CFG.Node Class
- moveu aulas de memória no módulo System.Memory
- moveu as classes de análise CFG na subpackagem 'SA'
- melhorar os logs de depuração
- melhorar os analisadores de PE/ELF com o módulo AMOCO.STRUCTS
- Adicionar o método de checksec na classe ELF
- Corrigir semânticos e formatos do ARMV7
- v2.6.3
- Adicione a arquitetura anã
- atualizar e melhorar o carregador de elfos
- melhorar a expressão simplificar para turnos+e operações
- Mesclar campos de estrutura de comprimento variável "Varfield"
- v2.6.2
- Corrija o suporte para estruturas "Slop"
- Permitir alinhamentos autodefinidos de estruturas
- v2.6.1
- Use tamanho/aligment da estrutura nativa por padrão
- v2.6.0
- Adicione a arquitetura V850 (E2S)
- Adicione a arquitetura SH2-A
- Adicione suporte para analisar as estruturas I.Mx6 HAB
- Merge Arquitetura AVR
- Adicione classes de sistema/estruturas
- Exportar 'Crawl' para fora da árvore amoco (Libclang c-to-sutts)
- Adicione a semântica das instruções do EBPF
- Adicione suporte para (antigas) instruções de BPF especificações
- Adicione suporte para formato binário hexadecimal/srec
- Adicionar MemoryMap 'Merge' Método
- Adicione o método 'step_instruction' no CoreExec (emulador)
- Adicione suporte para estruturas de UFS
- despachante de sinais de mesclagem para interface do usuário
- Melhore o suporte do SetupTools
- Remova o tox e confie apenas no travis
- Melhore a semântica do ARMV7 Instruções e os ajudantes de código
- melhorar as especificações e formatos do ARMV7 Instruções
- Adicione o registro de nível de depuração de árvores especiais
- Corrija o decodificador para arcos com instrução de comprimento variável bigendiana
- melhorar a eficácia do decodificador com o indicador de busca estendida
- Adicione suporte de pigmentos para o SPARC, MSP430 Instruções Formateiras
- melhorar as expressões aumentando
- Melhore o módulo de configuração
- v2.5.3
- Correção completa da edição #77 (Madness Típica X64)
- v2.5.2
- Correção parcial da edição nº 77 (GitHub) relacionada à semântica da instrução LEA no X64 Arch.
- v2.5.1
- Adicione a arquitetura RISC-V
- Adicione a arquitetura EBPF
- Use saídas Unicode com símbolos Unicode para a maioria dos operadores se suportados
- Adicione os operadores menos indiferentes (LTU) e os operadores não projetados (GEU) necessários pela arquitetura RISCV
- Corrigir o método Simplify para expressões de compras
- Melhore os métodos simplificados com um parâmetro opcional 'Bitslice'
- Melhorar a interface de memória do mapeador
- Fix SMT Model_to_mapper Método
- Adicione o formato CFG 'DOT' (Elementary) Saída
- Adicione o método 'getfileoffset' nas aulas de ELF e PE
- Remova a bandeira Global Endianness
- Atualize os formatos x86/x64 para serem compatíveis com GNU AS e CLANG
- Adicione algumas instruções x86/x64 semântica (movnti, wbinvd, div, ...)
- Corrija algumas especificações de instruções raras x86/x64 (PMOVMSKB, ...)
- v2.5.0
- Suporte Python3 (> = 3,5)
- Deixe o carregamento de vários arcos da CPU (corrigir a edição nº 21 e #64)
- Atualize os documentos Readme e Sphinx
- v2.4.6
- Adicione a documentação da Esfinge (arquivos rst e DocStrings)
- Adicionar o método de funções para as classes principais
- melhorar a impressão elsa bonita
- Módulo DB alterado para usar SQLalchemy em vez de zodb
- Torne todos os objetos escolhidos (com o mais alto protocolo)
- Adicione novos formatados x86 e x64
- Corrija muitas especificações e semânticas X64
- Algumas melhorias de desempenho
- Melhore simplificar Mem (VEC) e SLC (VEC)
- Corrija o SLC.simplify para o operador '**'
- v2.4.5
- Adicionar seletor de 'modo' x86/x64
- Adicionar expressão de 'laboratório' para rótulos
- Melhore a MemoryZone/Mapa com um método 'Grep'
- Melhore a MemoryZone para permitir "mudar" para algum endereço
- melhorar o formatador X86 AT&T
- Adicionar testes de decodificador x64
- Corrigir o modo de endereçamento RIP-RIPLATIVO X64
- Corrija muitas especificações X64
- Adicione a semântica de instrução embalada x64
- Corrija várias instruções X86 SSE
- Corrija vários problemas x86 (Fisttp/Setcc/Push Imm8/MovQ)
- v2.4.4
- Adicione alguma semântica de instrução SSE
- Adicione o pacote UI.Graphics QT com classes de itens de bloco/func/xfunc
- Adicione o pacote inicial da UI.Graphics GTK
- Mova vltable na classe UI.Views.BlockView
- Corrija vários X86/64 Decodificação/formação/semântica
- v2.4.3
- Adicione pacotes de ui.graphics (esvaziados)
- Adicionar módulo UI.Views com suporte para bloco/func/xfunc
- Adicione a classe ui.render.vltable às tabelas de impressão bonitas
- Melhorar a classe do formatador de instrução para acessar tokens pp
- Algoritmos mais limpos de itercfg e lbackward
- Adicione a classe de expressão VECW para representar expressões VEC 'ampliadas'
- Melhorar a gravação da memória das expressões VEC
- Melhore o alargamento e o Fixpoint em func.makemap ()
- Atributo 'Type' Adicionar (std/pc/sinalizador/pilha/outro)
- Defina o tipo de registro para o arco x86
- Corrija alguns X86/64 Decodificação/formação/semântica
- Atualize o Travis Config, Fix Pytest vs. Token.
- v2.4.2
- Mesclar suporte para pigmentos Métodos de impressão bonitos (no módulo UI.render)
- Adicione o formatador de sintaxe Hilfled X86 (em arch.x86.formats)
- Exponha a bela interface de impressão da expressão (exp.pp (), exp.toks ())
- Remova o fallback da classe de configuração padrão (o ConfigParser é padrão)
- Mesclar algumas amostras e testes portados para o pacote de pytest
- Use o setupTools, adicione a configuração Tox.ini e Travis-Ci
- Corrija alguma semântica x86/x64
- melhorar os formatos SPARC V8
- Adicionar registros de coprocessador SPARC
- Atualize readme
- v2.4.1
- Adicione as implementações da Lbackward Analysis e Func.Makemap ()
- Adicione a classe de expressão VEC para representar um conjunto de expressões
- Adicione funções de mesclagem de mapeador e ampliação
- Deixe passar a instância do solucionador SMT em exp.to_smtlib ()
- Adicionar métodos do Funchelpers em aulas de sistema baseadas em x86
- Adicionar aulas de sessão/dB e métodos específicos de picles
- Adicione o método "Progress" na classe de log para fornecer feedback
- Adicionar pacotes externos necessários em setup.py
- Corrija alguma semântica x86/x64
- melhorar os formatos SPARC V8
- Atualize readme
- v2.4.0
- Interface do solucionador de mesclagem Z3, consulte o método smt.py e smtlib () exp.
- Merge Fackward Analysis e Code Func Class.
- melhorar expressões: separar operações unárias e binárias, "normalizar" expressões
- Melhore o Mapper With Memory () Método e Operadores de Composição Resistente a Aliasing
- Melhore a classe MemoryZone: retorne as peças de expressão superior em vez de aumentar o MemoryError.
- Adicionando classe RawExec para entrada do tipo shellcode
- Suporte a entrada da string nas classes ELF/PE.
- Corrija vários bugs x86/x64
- Proteger contra o redimensionamento dos registros Env
- Adicione o carregador Win64
- Ajustar os níveis de log e o arquivo opcional do conf
- Atualize readme
- v2.3.5
- Adicione o decodificador X64 Arch + Full X86/64 SSE
- Hotfix x86/x64 Inversão de {88}/{8a} MOV Instruções
- Corrija vários decodificadores x86 e semântica
- Código Cosmetics
- v2.3.4
- Mesclar ARMV7/semântica fixa
- Adicionar decodificadores X86 FPU
- Adicione a função Locate no MemoryMap
- Corrija o núcleo read_instruction no limite do mapa
- Fix PE Import Parsing e TLS Table Builder
- decodificador genérico mais rápido
- hotfix vários decodificadores x86
- Adicione alguns decodificadores X86 SSE
- v2.3.3
- Suporte para microcontroladores MSP430 e PIC18
- Corrija o SPARC RETT, UDIV/SDIV e formatos
- Corrigir a decodificação da instrução x86 jcxz
- v2.3.2
- Arquitetura de Merge Z80/GB, Fix SPARC Relatou problemas
- Adicione exemplo de decodificação SSE2 (fixo)
- v2.3.1
- Adicionar arquivo de licença
- Corrija a arquitetura SPARC
- Evite a expressão de PTR quando o endereço não for Deref
- Corrigir regras simplificadoras de eqn_helpers
- Readme atualizado
- Nova classe de PE (testada no custo.exe) + suporte para vários pontos de entrada.