amoco
| Statut: | En cours de développement |
| Version: | 2.9 (avant 3,0) |
| Doc: | http://amoco.readthedocs.io/en/latest/index.html |
Description
AMOCO est un package Python dédié à l'analyse symbolique des binaires.
Il s'agit de fonctionnalités:
- Un cadre générique pour le décodage des instructions, développé pour réduire le temps nécessaire pour mettre en œuvre le support pour les nouvelles architectures. Par exemple, le décodeur pour la plupart des instructions IA32 (usage général) s'adapte à moins de 800 lignes de Python. Le décodeur RISC SPARCV8 complet (ou l'ensemble du pouce du bras également) s'adapte à moins de 350 lignes. Le décodeur de jeu d'instructions ARMV8 est inférieur à 650 lignes.
- Un module d'algèbre symbolique qui permet de décrire la sémantique de toutes les instructions et de calculer une représentation fonctionnelle des blocs d'instructions.
- Un modèle d'exécution générique qui fournit un modèle de mémoire abstrait pour gérer de manière transparente des valeurs concrètes ou symboliques et d'autres fonctionnalités dépendantes du système.
- Diverses classes mettant en œuvre des techniques de démontage habituelles telles que le balayage linéaire, la traversée récursive ou les techniques plus élaborées telles que le Path-Predicate qui s'appuie sur des résolveurs SAT / SMT pour procéder à la découverte du graphique de flux de contrôle ou même pour implémenter des techniques comme DARE (Exploration aléatoire automatisée dirigée).
- Divers aides génériques et de jolies imprimantes dépendant de l'arc permettent des configurations de look et de feel personnalisées (pensez à la syntaxe AT&T vs Intel, des décalages absolus vs relatifs, des décimales ou des immédiates hexadécimales, etc.).
AMOCO est toujours en cours . Voir TODO pour une liste des fonctionnalités à fusionner à partir de Develop Branch ou pour être plus entièrement implémentée.
La documentation utilisateur et l'API se trouvent sur http://amoco.readthedocs.io/en/latest/index.html

Faire
Certaines composantes de l'AMOCO sont toujours en train d'être poussées à la branche de libération ou développées. Plus précisément:
- x86 FPU Instructions La sémantique n'est pas mise en œuvre,
- ARM SIMD, VFP, NEON, TRUSTZONE, JAZELLE Les ensembles d'instructions ne sont pas mis en œuvre,
- Certaines stratégies de démontage basées sur les solvures ne sont pas encore fusionnées.
- Les fonctionnalités d'importation / exportation des IDB ne sont pas implémentées.
Les contributions pour réaliser des pièces inactives / non implémentées sont les bienvenues.
Notes du développeur
La feuille de styles QT par défaut est inspirée par l'excellente feuille QDarkStyles et utilise la plupart de ses icônes via l'API QResource mise à disposition à partir du module RC_ICONS.PY généré:
<pyenv> / lib / python3. <x> / site-packages / pyside6 / rc -g python icons.qrc> rc_icons.py
Licence
Veuillez consulter la licence.
Changelog
- v2.9.11
- Modifier le moteur à terme d'interface utilisateur par défaut des pygments en riche
- Ajouter un objet Emutata ORM pour enregistrer l'état de l'émulateur
- Ajouter des commandes de sauvegarde / restauration dans l'interface utilisateur de l'émul
- implémenter CallStack Logic
- Ajouter un cadre CallStack dans l'interface utilisateur de l'émur
- Ajouter la commande de débogage dans l'interface utilisateur EMUL
- Ajouter une classe structView pour les structures jolies imprimes
- Correction de la logique X86 MMU_CACHE (Flush & Misses)
- Modifier l'action par défaut de CodeQL à Ruff
- Code de refactor basé sur les chèques RUFF
- v2.9.10
- x86: ajouter la prise en charge de l'exécution du mode réel
- x86: ajouter une prise en charge complète pour la segmentation / la pagination
- Ajouter le système Baremetal-X86 pour l'analyse du micrologiciel BIOS
- fusionner le nouveau module Arch.io pour définir les talons d'iOS
- MODULE DE CAS.BLOBS
- Ajouter des versions rapides de REP STOS / LOS / SCAS / MOVS
- Ajouter la méthode de tracepoint dans la classe EMUL
- Ajouter le support pour les ressources PE
- Améliorer les commandes de chargement d'application AMOCO
- Ajouter un ensemble, afficher, nexti, jusqu'à ce que dans l'interface utilisateur de l'émur
- v2.9.9
- Ajouter une architecture PPC32 (E200)
- Ajouter la prise en charge du format exécutable Coffre
- Ajouter l'analyseur pour les fichiers de trace GDB
- Améliorer le sous-package des structures
- v2.9.8
- Mise à jour de Pyside6 (QT6)
- Ajouter le format OLE2
- Mettre à jour le sous-package des structures pour permettre la taille du pointeur choisie
- Mise à jour partielle de l'architecture AVR
- v2.9.7
- Drop Python <3,8 Support
- Améliorer le package Structs pour la prise en charge de Bitfield et le calcul des décalages des champs pour la taille du pointeur choisie (32 ou 64 bits)
- v2.9.6
- fusionner QT GUI ImageView
- Améliorer QT GUI BINFMTVIEW / HEXVIEW avec Entropy & InfoView
- Ajouter une vue Mach-O spécifique
- Améliorer la prise en charge du mode Dark UI QT
- Ajouter une architecture Tricore
- Ajouter une architecture W65C02
- Ajouter une architecture WASM
- Ajouter l'analyseur de format binaire WASM
- Déplacer le module System.Structs dans un package
- v2.9.5
- fusionner QT GUI Binfmtview / HexView
- Corrigez divers décodeurs d'instructions de bras et sémantique
- Ajouter une vue de structure et des vues spécifiques Elfe et PE
- Ajouter la prise en charge du mode Dark UI QT
- Ajouter des chargeurs MIP
- Ajouter le support Bitfield dans les structures
- v2.9.4
- Ajoutez des chargeurs Linux32 pour MIPS_LE / SPARC / RISCV
- Mettre à jour les interfaces système Win32 / Win64
- Ajouter la prise en charge du mappeur pour un pipeline non interlassique
- Correction des effets de pipeline de chargement / stockage de MIPS R3000
- Ajouter une classe Archview
- Ajouter une architecture RISCV64 (RISCV.RV64I)
- Ajouter un test de précondition pour les spécifications
- Mettez à jour toutes les spécifications d'arc pour éviter les collisions
- Améliorer / réparer divers formats d'arc
- Correction de l'analyseur x86
- v2.9.3
- Merger / mettre à jour les commandes DBGUI EMUL et SRV
- Visives de fusion / mise à jour de l'émulateur
- Ajouter le système PSX
- Ajouter une architecture MIPS (R3000 uniquement)
- Améliorer la prise en charge des changements de configuration
- Interface EXT / Stub de reprise
- Fixation du formateur SPARC
- Fixation de PE32 + DataDirectories Analyse
- v2.9.2
- Préparez la fusion avec DBGUI
- Drop Python 2.7 Support
- revoir les importations de sous-package / module et journalisation
- Divers code désinfectant
- Sources blackifiées
- v2.9.1
- Ajouter le chargeur Mach-O et le squelette System.OSX
- Améliorer le module d'émulateur
- Ajouter un serveur et un client de base CMDCLI UI
- Correction de diverses erreurs / avertissements
- v2.9.0
- Ajouter le squelette du module d'émulateur (classe d'émulture)
- réorganiser les modules système en sous-packages
- Ajouter des classes système, système d'exploitation, tâche et définition
- Ajouter une architecture AVR
- Classe de blocs modifiée => Attribut MAP déplacé vers CFG.NODE CLASSE
- Classes de mémoire déplacées dans System.Memory Module
- Classes d'analyse CFG déplacées dans le sous-package «SA»
- Améliorer les journaux de débogage
- Améliorer les analyseurs PE / ELF avec le module AMOCO.Structs
- Ajouter la méthode de vérification de contrôle dans la classe ELF
- Correction de la sémantique et des formats ARMV7
- v2.6.3
- Ajouter une architecture naine
- Mettre à jour et améliorer le chargeur ELF
- Améliorez l'expression simplifier pour les changements + et les opérations
- fusion des champs de structure de longueur variable "varfield"
- v2.6.2
- Corrigez la prise en charge des structures "Sold"
- Autoriser les alignements autodéfinis des structures
- v2.6.1
- Utilisez la taille / aligment de la structure native par défaut
- v2.6.0
- Ajouter une architecture V850 (E2S)
- Ajouter l'architecture SH2-A
- Ajouter un support pour analyser les structures I.MX6 HAB
- fusionner l'architecture AVR
- Ajouter des classes Système / Structs
- Exporter «ramper» à partir d'Amoco Tree (Libclang C-To-Structes)
- Ajouter la sémantique des instructions EBPF
- Ajouter la prise en charge des (anciennes) spécifications d'instructions BPF
- Ajouter la prise en charge du format binaire Hex / SREC
- Ajouter la méthode MemoryMap 'Merge'
- Ajouter la méthode 'Step_instruction' dans CoreExec (émulateur)
- Ajouter la prise en charge des structures UFS
- fusion des signaux répartiteurs pour l'interface utilisateur
- Améliorer le support SetUptools
- Retirez Tox et comptez sur Travis uniquement
- Améliorer les instructions ARMV7 Sémantique et les aides de code
- Améliorer les spécifications et formats d'instructions ARMV7
- Ajouter la journalisation du niveau de débogage des arbres de spécification
- Correction du décodeur pour les arches avec une longueur d'instruction de la longueur variable
- Améliorer l'efficacité du décodeur avec l'indicateur de la rétroquette
- Ajouter la prise en charge des pygments pour SPARC, MSP430 Instruction Foral
- Améliorer l'élargissement des expressions
- Améliorer le module de configuration
- v2.5.3
- Correction complète du problème n ° 77 (Madness X64 typique)
- v2.5.2
- Correction partielle du numéro 77 (GitHub) lié à la sémantique d'instructions LEA sur X64 Arch.
- v2.5.1
- Ajouter l'architecture RISC-V
- Ajouter une architecture EBPF
- Utilisez des sorties Unicode avec des symboles Unicode pour la plupart des opérateurs si cela est pris en charge
- Ajouter des opérateurs moins que non signés (LTU) et plus grands ou égaux (GEU) nécessaires à l'architecture RISCV
- Correction de la méthode Simplify for Comp Expressions
- Améliorer les méthodes de simplification avec un paramètre facultatif «bitslice»
- Améliorer l'interface de la mémoire du mappeur
- Correction de la méthode SMT Model_To_Mapper
- Ajouter le format CFG «dot» (élémentaire)
- Ajouter la méthode «getFileOffset» dans les classes ELF et PE
- supprimer le drapeau global de l'endianness
- Mettre à jour les formats x86 / x64 pour être compatibles avec GNU As et Clang
- Ajoutez des instructions x86 / x64 sémantique (movnti, wbinvd, div, ...)
- Corrigez quelques spécifications d'instructions rares x86 / x64 (pmovmskb, ...)
- v2.5.0
- Prise en charge de Python3 (> = 3,5)
- Autoriser le chargement de plusieurs arches de processeur (résoudre le problème n ° 21 et # 64)
- Mettre à jour les documents ReadMe et Sphinx
- v2.4.6
- Ajouter une documentation Sphinx (fichiers et docstrings pour les premiers)
- Ajouter une méthode de fonctions pour les classes principales
- Améliorer la jolie impression de l'elfe
- Module DB modifié pour utiliser Sqlalchemy plutôt que ZODB
- Rendre tous les objets pickable (avec un protocole le plus élevé)
- Ajouter de nouveaux formateurs x86 et x64
- Corrigez de nombreuses spécifications et sémantiques x64
- Quelques améliorations de performances
- Améliorer la simplification MEM (VEC) et SLC (VEC)
- Correction de SLC.Simplify for '**' Operator
- v2.4.5
- Ajouter le sélecteur de mode internes x86 / x64
- Ajouter une expression «laboratoire» pour les étiquettes
- Améliorer la mémoire de mémoire / carte avec une méthode «grep»
- Améliorer MemoryZone pour permettre le "déplacement" vers une adresse
- Améliorer le formateur X86 AT&T
- Ajouter des tests de décodeur x64
- Correction du mode d'adressage x64 RIP-relalatif
- Correction de nombreuses spécifications x64
- Ajouter la sémantique x64 emballée
- Corrigez diverses instructions X86 SSE
- Correction de divers problèmes x86 (FISTTP / SETCC / PUSH IMM8 / MOVQ)
- v2.4.4
- Ajouter une sémantique d'instructions SSE
- Ajouter un package UI.Graphics QT avec des classes d'éléments block / func / xfunc
- Ajouter le package initial ui.graphics gtk
- Déplacer VlTable dans UI.Views.blockView Class
- Correction de divers décodage / formatage X86 / 64
- v2.4.3
- Ajouter des packages UI.Graphics (vidés)
- Ajouter un module UI.Views avec la prise en charge de Block / Func / Xfunc
- Ajouter une classe ui.render.vltable à de jolies tables imprimées
- Améliorer la classe de format d'instructions pour accéder aux jetons PP
- algorithmes ITERCFG plus propres et LBackward
- Ajouter une classe d'expression VECW pour représenter les expressions VEC «élargies»
- Améliorer la mémoire Écriture des expressions VEC
- Améliorer l'élargissement et le point de correction dans func.maKEMAP ()
- Ajouter l'attribut 'Type' (std / pc / flags / pile / autre)
- Définir le type de registre pour X86 Arch
- Correction de quelques décodages / formatrices X86 / 64
- Mettre à jour Travis Config, fixer Pytest vs Token.
- v2.4.2
- Fusionnez la prise en charge des méthodes d'impression jolies (dans UI.Render Module)
- Ajouter le formateur de syntaxe X86 Hilpled (dans Arch.x86.Formats)
- Exposer l'interface de la jolie imprimée de l'expression (exp.pp (), exp.toks ())
- Supprimer le repli de la classe de configuration par défaut (ConfigParser est standard)
- fusionner quelques échantillons et tests portés dans le package Pytest
- Utilisez setuptools, ajoutez Tox.ini et Travis-Ci Config
- Correction de la sémantique x86 / x64
- Améliorer les formats SPARC V8
- Ajouter les registres de coprocesseur SPARC
- Mettre à jour Readme
- v2.4.1
- Ajouter des implémentations de l'analyse LBACKWARD et func.maKEMAP ()
- Ajouter une classe d'expression VEC pour représenter un ensemble d'expressions
- Ajouter des fonctions de fusion et d'élargissement
- Laisser passer l'instance de solveur SMT dans exp.to_smtlib ()
- Ajouter des méthodes Funchepers dans les classes système basées sur x86
- Ajouter des classes de session / dB et des méthodes spécifiques à des cornichons
- Ajouter la méthode "Progress" dans la classe de journal pour fournir des commentaires
- Ajouter des packages externes requis dans setup.py
- Correction de la sémantique x86 / x64
- Améliorer les formats SPARC V8
- Mettre à jour Readme
- v2.4.0
- fusion de l'interface de solveur Z3, voir la méthode SMT.py et smtlib () Exp
- Furez l'analyse FBACKWARD et la classe Func de code.
- Améliorer les expressions: des opérations unaires et binaires séparées, "normaliser" les expressions
- Améliorer le mappeur avec la méthode de la mémoire () et les opérateurs de composition résistants à l'aliasing
- Améliorez la classe MemoryZone: renvoyez les parties d'expression supérieures au lieu d'augmenter MemoryError.
- Ajout de la classe RawExec pour une entrée de type Shellcode
- Prise en charge de l'entrée de chaîne dans les classes ELF / PE.
- Correction de divers bogues x86 / x64
- protéger contre le redimensionnement des registres env
- Ajouter le chargeur Win64
- ajuster les niveaux de journal et le fichier facultatif à partir de Conf
- Mettre à jour Readme
- v2.3.5
- Ajouter le décodeur SSE X64 Arch + Full x86 / 64
- Hotfix x86 / x64 Inversion de {88} / {8a} Mov Instructions
- Corrigez divers décodeurs et sémantiques x86
- code cosmétique
- v2.3.4
- fusionner la sémantique fixe ARMV7 / Thumb
- Ajouter des décodeurs FPU x86
- Ajouter la fonction de localisation dans MemoryMap
- Fix Core Read_instruction sur la limite de la carte
- Correction de l'analyse de l'analyse et de la table TLS
- décodeur générique plus rapide
- Hotfix divers décodeurs x86
- Ajouter des décodeurs SSE x86
- v2.3.3
- Prise en charge des microcontrôleurs MSP430 et PIC18
- Correction de SPARC RETT, UDIV / SDIV et Formats
- Correction du décodage d'instructions x86 JCXZ
- v2.3.2
- Fusionner l'architecture Z80 / GB, Fix SPARC signalé des problèmes
- Ajouter un exemple de décodage SSE2 (fixe)
- v2.3.1
- Ajouter le fichier de licence
- Correction de l'architecture SPARC
- Évitez l'expression de PTR lorsque l'adresse n'est pas deref
- Correction des règles de simplificateur EQN_HELPERS
- Readme mis à jour
- Nouvelle classe PE (testée sur Cost.exe) + Prise en charge de plusieurs points d'entrée.