amoco
| Estado: | En desarrollo |
| Versión: | 2.9 (anterior a 3.0) |
| Doc: | http://amoco.readthedocs.io/en/latest/index.html |
Descripción
Amoco es un paquete de Python dedicado al análisis simbólico de binarios.
Cuenta:
- Un marco genérico para las instrucciones de decodificación, desarrollado para reducir el tiempo necesario para implementar el soporte para nuevas arquitecturas. Por ejemplo, el decodificador para la mayoría de las instrucciones IA32 (propósito general) se ajusta en menos de 800 líneas de Python. El decodificador RISC SPARCV8 completo (o el pulgar-1 del brazo también se ajusta en menos de 350 líneas. El decodificador del conjunto de instrucciones ARMV8 es inferior a 650 líneas.
- Un módulo de álgebra simbólica que permite describir la semántica de cada instrucción y calcular una representación funcional de bloques de instrucciones.
- Un modelo de ejecución genérica que proporciona un modelo de memoria abstracta para tratar con valores concretos o simbólicos de manera transparente, y otras características dependientes del sistema.
- Varias clases que implementan técnicas de desmontaje habituales como el barrido lineal, el recorrido recursivo o las técnicas más elaboradas como la predicción de ruta que se basa en solucionadores SAT/SMT para proceder al descubrir el gráfico de flujo de control o incluso implementar técnicas como DARE (exploración aleatoria automatizada dirigida).
- Varios ayudantes genéricos e impresoras bonitas dependientes de arco para permitir configuraciones personalizadas de aspecto y sensación (piense en la sintaxis de AT&T vs. Intel, compensaciones absolutas versus relativas, decimal o hex de inmediato, etc.).
Amoco sigue funcionando en progreso . Consulte TODO para obtener una lista de características que se fusionarán de la rama Develop o se implementarán más a fondo.
La documentación del usuario y la API se pueden encontrar en http://amoco.readthedocs.io/en/latest/index.html

Hacer
Algunos componentes de AMOCO todavía están en proceso de ser empujados a la rama de liberación o desarrollados. Más precisamente:
- X86 Instrucciones de FPU La semántica no se implementa,
- Arm Simd, VFP, Neon, Trustzone, Jazelle Instructions No se implementan,
- Algunas estrategias de desmontaje basadas en el solucionador aún no se fusionan.
- Las funciones de importación/exportación del IDB no se implementan.
Las contribuciones para cumplir piezas incompletas/no implementadas son bienvenidas.
Notas de desarrollador
La hoja de estilo QT predeterminada se inspira en la excelente hoja de costura QDarkStyles y utiliza la mayoría de sus iconos a través de la API Qresource disponible en el módulo rc_icons.py generado:
<Pyenv>/lib/python3. <x>/sitio -packages/pyside6/rcc -g python icons.qrc> rc_icons.py
Licencia
Consulte la licencia.
Colegio de cambios
- v2.9.11
- Cambiar el motor de término de interfaz de usuario predeterminado de Pygments a Rich
- Agregue el objeto Emudata Orm para guardar el estado del emulador
- Agregar comandos Guardar/Restaurar en Emul UI
- Implementar la lógica de CallStack
- Agregar marco de callstack en emul ui
- Agregar comando de depuración en emul ui
- Agregar clase StructView para estructuras Pretty Printing
- FIJA LOGIC X86 MMU_CACHE (FLUSH & MISS)
- Cambiar la acción predeterminada de CodeQL a RUFF
- Código de refactorización basado en cheques de Ruff
- v2.9.10
- X86: Agregar soporte para la ejecución del modo real
- X86: Agregar soporte completo para segmentación/paginación
- Agregar sistema Baremetal-X86 para el análisis de firmware del BIOS
- fusionar el nuevo módulo Arch.io para definir los talones de iOS
- Fusionar Cas.Blobs Módulo
- Agregue versiones rápidas de REP STOS/LODS/SCAS/MOVS
- Agregar método TracePoint en la clase emul
- Agregar soporte para recursos de PE
- Mejorar los comandos de carga de la aplicación Amoco/emul
- Agregar set, visualización, nexti, hasta que en emul ui
- v2.9.9
- Agregar arquitectura PPC32 (E200)
- Agregar soporte para el formato ejecutable de Coff
- Agregar analizador para archivos de rastreo GDB
- Mejorar el subpacaje de estructuras
- v2.9.8
- Actualizar a Pyside6 (QT6)
- Agregar formato OLE2
- Actualizar el subpacaje de Structs para permitir el tamaños de puntero elegidos
- Actualización parcial de la arquitectura AVR
- v2.9.7
- Drop Python <3.8 Soporte
- Mejorar el paquete de estructuras para el soporte de bitfield y el cálculo de las compensaciones de los campos para el tamaño de puntero elegido (32 o 64 bits)
- v2.9.6
- fusionar QT GUI ImageView
- Mejorar QT GUI BinfmtView/HexView con entropía e infoview
- Agregar vista específica de Mach-O
- Mejorar el soporte para el modo oscuro QT UI
- Agregar arquitectura de tricore
- Agregar arquitectura W65C02
- Agregar arquitectura WASM
- Agregar análisis de formato binario WASM
- mover system.strucciones módulo en un paquete
- v2.9.5
- fusionar QT GUI binfmtview/hexview
- Arreglar el decodificador y la semántica de varias instrucciones del brazo
- Agregar vista de estructura y vistas específicas de ELF y PE
- Agregar soporte para el modo oscuro QT UI
- Agregar cargadores MIPS
- Agregar soporte de bitfield en estructuras
- v2.9.4
- Agregar cargadores Linux32 para MIPS_LE/SPARC/RISCV
- Actualizar interfaces del sistema Win32/Win64
- Agregar soporte mapper para una tubería no interactuada
- FIJO MIPS R3000 Efectos de la tubería de carga/almacenamiento de la tubería retrasada
- Agregar clase de Archview
- Agregar arquitectura Riscv64 (Riscv.RV64i)
- Agregar prueba de condición previa para las especificaciones
- Actualizar todas las especificaciones de arco para evitar colisiones
- mejorar/arreglar varios formatos de arco
- FIJO X86 PARSER
- v2.9.3
- Fusionar/actualizar los comandos DBGUI Emul y SRV
- Vistas del emulador de fusionar/actualizar
- Agregar sistema PSX
- Agregar arquitectura MIPS (solo R3000)
- mejorar el soporte para los cambios en la configuración
- Reelaborar la interfaz ext/stub
- Formar formatero SPARC
- fijación de PE32+ DataDirectorios analizando
- v2.9.2
- Prepare fusionar con dbgui
- Drop Python 2.7 Soporte
- Reelaborar las importaciones y registros de subpackage/módulo
- Varios códigos desinfectantes
- Fuentes negruadas
- v2.9.1
- Agregue el cargador Mach-O y System.Osx Skeleton
- Mejorar el módulo del emulador
- Agregar servidor y cliente básico CMDCLI UI
- corrige varios errores/advertencias
- v2.9.0
- Agregar esqueleto del módulo emulador (clase emul)
- Reorganizar los módulos del sistema en subpackages
- Agregar clases de sistema, sistema operativo, tarea y definición
- Agregar arquitectura AVR
- clase de bloque modificado => atributo de mapa movido a la clase cfg.node
- Clases de memoria movidas en el sistema.memory módulo
- Movió clases de análisis CFG en el subpackage 'SA'
- Mejorar los registros de depuración
- Mejorar los analizadores de PE/ELF con el módulo AMOCO.STRUCTS
- Agregar método de checkSec en la clase ELF
- FIJAR LA SEMANTICA Y FORMATOS DE ARMV7
- v2.6.3
- Agregar arquitectura enana
- actualizar y mejorar el cargador de elfos
- Mejorar la expresión simplifica para los cambios+y las operaciones
- fusionar la clase de campos struct de longitud variable "varfield"
- v2.6.2
- Arreglar el soporte para las estructuras "slop"
- Permitir alineaciones autodefinidas de las estructuras
- v2.6.1
- Utilice el tamaño/aligment de la estructura nativa de forma predeterminada
- v2.6.0
- Agregar arquitectura V850 (E2S)
- agregar sh2-a arquitectura
- Agregar soporte para analizar las estructuras HAB I.MX6
- Fusionar la arquitectura AVR
- Agregar clases de sistema/estructuras
- Exportar 'gatear' fuera de Amoco (libclang c-to-structs)
- Agregue la semántica de instrucciones EBPF
- Agregar soporte para especificaciones (antiguas) de instrucciones BPF
- Agregar soporte para el formato binario hexagonal/sREC
- Agregar el método de MemoryMap 'fusionar'
- Agregar método 'step_instruction' en CoreExec (emulador)
- Agregar soporte para estructuras UFS
- Fusionar el despachador de señales para la interfaz de usuario
- Mejorar el soporte de SetupTools
- Retire tox y confíe solo en Travis
- Mejorar las instrucciones de ARMV7 semántica y ayudantes de código
- Mejorar las especificaciones y formatos de instrucciones de ARMV7
- Agregar registro de nivel de depuración de Spec Tree
- Corrección de decodificador para arcos con instrucción de longitud de variable Bigendian
- Mejorar la eficencia del decodificador con el indicador de un buscador extendido
- Agregar soporte de pygmentos para SPARC, Formatero de instrucciones MSP430
- Mejorar las expresiones de ampliación
- Mejorar el módulo de configuración
- v2.5.3
- Solución completa del problema #77 (locura típica x64)
- v2.5.2
- Solución parcial del problema #77 (GitHub) relacionado con la semántica de instrucciones de LEA en X64 Arch.
- v2.5.1
- Agregar arquitectura RISC-V
- Agregar arquitectura EBPF
- Use salidas unicode con símbolos unicode para la mayoría de los operadores si se admite
- Agregue operadores menos que no indicados (LTU) y mayores de igualdad de modificaciones (GEU) que necesitan RISCV Architecture
- Se corrigió el método de simplificar para las expresiones de Comp
- Mejorar los métodos de simplificar con un parámetro opcional 'bitslice'
- Mejorar la interfaz de memoria Mapper
- Corrección del método SMT Model_To_Mapper
- Agregar salida CFG 'DOT' Formato (Elementary)
- Agregue el método 'getFileOffset' en las clases ELF y PE
- eliminar la bandera global de endianness
- Actualizar los formatos X86/X64 para ser compatibles con GNU AS y Clang
- Agregue un poco de semántica de instrucciones x86/x64 (Movnti, wbinvd, div, ...)
- Arregle algunas especificaciones de instrucciones raras x86/x64 (PMOVMSKB, ...)
- v2.5.0
- Apoyo a Python3 (> = 3.5)
- Permitir cargar múltiples arcos de CPU (solucione el problema #21 y #64)
- Actualizar documentos de readme y sphinx
- v2.4.6
- Agregar documentación Sphinx (RST archivos y documentos)
- Agregar método de funciones para las clases principales
- mejorar la impresión de elfos
- cambió el módulo DB para usar sqlalchemy en lugar de zodb
- Haga que todos los objetos sean recolectables (con el protocolo más alto)
- Agregue nuevos formatorios x86 y x64
- arreglar muchas especificaciones y semánticas x64
- Algunas mejoras de rendimiento
- Mejorar Simplify MEM (VEC) y SLC (VEC)
- FIJO SLC.SIMPLIFY para el operador '**'
- v2.4.5
- Agregar selector de 'modo de internals' x86/x64
- Agregar expresión de 'laboratorio' para etiquetas
- Mejorar MemoryZone/Map con un método 'GREP'
- Mejorar Memoryzone para permitir el "cambio" a alguna dirección
- Mejorar X86 AT&T Formatter
- Agregar pruebas de decodificador x64
- Corrección del modo de direccionamiento-relativo de RIP x64
- arreglar muchas especificaciones x64
- Agregar semántica de instrucciones empaquetadas x64
- Arreglar varias instrucciones de SSE x86
- Arreglar varios problemas X86 (FISTTP/SETCC/PUSH IMM8/MOVQ)
- v2.4.4
- Agregue un poco de semántica de instrucciones de SSE
- Agregue el paquete UI.Graphics Qt con clases de elementos BLOCK/FUNC/XFUNC
- Agregar paquete inicial de ui.graphics gtk
- Mover Vltable en UI.Views.BlockView Clase
- Arreglar varios x86/64 decodificación/formación/semántica
- v2.4.3
- Agregar paquetes UI.Graphics (vaciado)
- Agregar módulo ui.views con soporte para bloque/func/xfunc
- Agregue la clase UI.render.vltable a las tablas de impresión bonitas
- Mejorar la clase Formatter de instrucción para acceder a Tokens PP
- algoritmos limpios de Itercfg y Lbackward
- Agregue la clase de expresión VECW para representar expresiones VEC 'ampliadas'
- Mejorar la escritura de la memoria de las expresiones VEC
- Mejorar la amplitud y el punto de fijación en FURC.MakEmap ()
- Agregar atributo 'Tipo' (STD/PC/Flags/Stack/Other)
- Definir el tipo de registro para el arco x86
- Arreglar algunos X86/64 decodificación/formación/semántica
- Actualice la configuración de Travis, corrige Pytest vs. Token.
- v2.4.2
- Fusionar soporte para pigmentos métodos de impresión bonitos (en el módulo de renderizado)
- Agregue X86 Formatero de sintaxis hilisca (en Arch.x86.formats)
- Exponer la interfaz Pretty Printing de Expression (exp.pp (), exp.toks ())
- Eliminar la clase de configuración predeterminada Fallback (configparser es estándar)
- Fusionar algunas muestras y pruebas portadas al paquete Pytest
- Use SetupTools, agregue Tox.ini y Travis-Ci Config
- Arregle un poco de semántica x86/x64
- Mejorar los formatos SPARC V8
- Agregar registros de coprocesador SPARC
- Actualizar ReadMe
- v2.4.1
- Agregue el análisis Lbackward y las implementaciones de FunC.MakEmap ()
- Agregar clase de expresión VEC para representar un conjunto de expresiones
- Agregar fusiones de mapper y ampliar funciones
- Permitir pasar la instancia de SMT Solver en exp.to_smtlib ()
- Agregar métodos Funchelpers en clases de sistemas basadas en X86
- Agregar clases de sesión/DB y métodos específicos de Pickle
- Agregue el método "Progress" en la clase de registro para proporcionar retroalimentación
- Agregar paquetes externos requeridos en setup.py
- Arregle un poco de semántica x86/x64
- Mejorar los formatos SPARC V8
- Actualizar ReadMe
- v2.4.0
- Interfaz de solucionador de fusión Z3, consulte el método SMT.PY y SMTLIB () EXP
- Fusionar el análisis FBackward y la clase FUNC de código.
- Mejorar las expresiones: OPS unary y binarias separadas, expresiones "normalizar"
- Mejorar el método de Memory () y los operadores de composición resistentes a la alias
- Mejorar la clase MemoryZone: return Top Expression Parts en lugar de elevar MemoryError.
- Agregar clase RAWEXEC para la entrada tipo shellcode
- Soporte de entrada de cadena en clases ELF/PE.
- corrige varios errores x86/x64
- Proteger contra el cambio de tamaño de los registros de envío
- Agregar Win64 Loader
- Ajustar los niveles de registro y el archivo opcional de conf
- Actualizar ReadMe
- v2.3.5
- Agregar X64 Arch + Decodificador de SSE X86/64 completo
- Hotfix x86/x64 Inversión de {88}/{8a} Instrucciones de MOV
- arreglar varios decodificadores y semánticos x86
- Código de cosméticos
- v2.3.4
- Fusionar ARMV7/pulgar Semántica fija
- Agregar decodificadores de FPU x86
- Agregar función de localización en MemoryMap
- FIJA CORE Read_instruction en el límite del mapa
- Fix PE Import Parsing y TLS Table Builder
- decodificador genérico más rápido
- Hotfix varios decodificadores x86
- Agregue algunos decodificadores de SSE x86
- v2.3.3
- Soporte para microcontroladores MSP430 y PIC18
- FIJA SPARC RETT, UDIV/SDIV Y FORMATOS
- Arreglar X86 JCXZ Decodificación de instrucciones
- v2.3.2
- Merge Z80/GB Architecture, Fix SPARC informó problemas
- Agregar ejemplo de decodificación SSE2 (fijo)
- v2.3.1
- Agregar archivo de licencia
- Arreglar la arquitectura SPARC
- Evite la expresión de PTR cuando la dirección no es Deref
- corrige las reglas de simplificador eqn_helpers
- Readme actualizado
- Nueva clase PE (probada en cost.exe) + soporte para múltiples puntos de entrada.