AMOCO
| Status: | In der Entwicklung |
| Version: | 2.9 (vor 3.0) |
| DOC: | http://amoco.readthedocs.io/en/latest/index.html |
Beschreibung
Amoco ist ein Python -Paket, das sich der symbolischen Analyse von Binärdateien widmet.
Es enthält:
- Ein generischer Rahmen für Dekodierungsanweisungen, die entwickelt wurde, um die Zeit zu verkürzen, die zur Umsetzung neuer Architekturen erforderlich ist. Zum Beispiel passt der Decoder für die meisten IA32 -Anweisungen (Allgemeinzweck) in weniger als 800 Python -Zeilen. Der volle Sparcv8-RISC-Decoder (oder auch der ARM Thumb-1-Set) passt in weniger als 350 Linien. Der Decoder des ARMV8 -Befehlssatzes beträgt weniger als 650 Zeilen.
- Ein symbolisches Algebra -Modul, mit dem die Semantik aller Anweisungen beschrieben und eine funktionale Darstellung von Anweisungsblöcken berechnet werden kann.
- Ein generisches Ausführungsmodell, das ein abstraktes Speichermodell für konkrete oder symbolische Werte transparent und andere systemabhängige Merkmale bereitstellt.
- Verschiedene Klassen, die übliche Demontktechniken wie linearer Sweep, rekursiver Durchqueren oder ausgearbeitete Techniken wie Pfadvorbereitungen implementieren, die sich auf SAT/SMT-Löser stützen, um mit der Erkennung des Kontrollflussdiagramms oder sogar für die Implementierung von Techniken wie DARE (gerichtete automatische Zufallsuntersuchung) fortzufahren.
- Verschiedene generische Helfer und arch-abhängige hübsche Drucker, um benutzerdefinierte Look-and-Feel-Konfigurationen zu ermöglichen (denken Sie an AT & T vs. Intel-Syntax, absolute vs. relative Offsets, Dezimal- oder Hex-unmittelbare Unmittelbare usw.).
Amoco arbeitet noch in Arbeit . Sehen Sie, dass eine Liste von Funktionen aus Entwicklungszweig oder gründlicher implementiert werden soll.
Benutzerdokumentation und API finden Sie unter http://amoco.readthedocs.io/en/latest/index.html

Todo
Einige Komponenten von AMOCO werden noch dabei, in den Freisetzungszweig zu schieben oder weiterentwickelt zu werden. Genauer gesagt:
- X86 FPU -Anweisungen Semantik werden nicht implementiert,
- ARM SIMD, VFP, Neon, Trustzone, Jazelle -Anweisungssätze werden nicht implementiert,
- Einige löserbasierte Disassembling-Strategien werden noch nicht verschmolzen.
- IDB -Import-/Exportfunktionen werden nicht implementiert.
Beiträge zur Erfüllung unvollständiger/nicht implementierter Teile sind willkommen.
Entwicklernotizen
Das Standard -QT -Stylesheet ist vom ausgezeichneten Qdarkstylesheet inspiriert und verwendet die meisten seiner Symbole über die QResource -API, die aus dem generierten RC_ICONS.PY -Modul zur Verfügung gestellt wurde:
<Pyenv>/lib/python3.
Lizenz
Bitte beachten Sie die Lizenz.
Changelog
- v2.9.11
- Ändern Sie die Standard -UI -Term Engine von Pygmenten in Rich
- Fügen Sie das Objekt des Emudaten hinzu, um den Emulatorzustand zu retten
- Fügen Sie Save/Wiederhere -Befehle in der EMUL -UI hinzu
- CallStack Logic implementieren
- Fügen Sie CallStack -Rahmen in die EMUL -UI hinzu
- Fügen Sie Debugg -Befehl in Emul UI hinzu
- Fügen Sie StructView -Klasse für Strukturen Pretty Printing hinzu
- Fix x86 MMU_Cache Logic (Flush & Misse)
- Ändern Sie die Standardaktion von CODEQL auf RUFF.
- Refactor -Code basierend auf Ruff -Checks
- v2.9.10
- X86: Fügen Sie Unterstützung für die Real -Modus -Ausführung hinzu
- x86: Fügen Sie die vollständige Unterstützung für Segmentierung/Paging hinzu
- Fügen Sie das Baremetal-X86-System für die BIOS-Firmware-Analyse hinzu
- Neues Arch.io -Modul zusammenführen, um die Stubs von iOS zu definieren
- Merge Cas.blobs Modul
- Fügen Sie schnelle Versionen von Rep STOS/LODS/SCAS/MOVS hinzu
- Fügen Sie die TracePoint -Methode in der EMUL -Klasse hinzu
- Fügen Sie Unterstützung für PE -Ressourcen hinzu
- Verbessern Sie die Befehle der Amoco -App -Lade-/Emul -Befehle
- Set, Anzeige, Nexti hinzufügen, bis in der EMUL -UI
- v2.9.9
- Fügen Sie PPC32 (E200) Architektur hinzu
- Fügen Sie Unterstützung für das ausführbare Coff -Format hinzu
- Fügen Sie Parser für GDB -Trace -Dateien hinzu
- Verbesserung der Strukturen Unterpackung
- v2.9.8
- Update auf Pyside6 (QT6)
- Fügen Sie das Ole2 -Format hinzu
- Aktualisieren Sie Strukturen Unterpackungen, um ausgewählte Zeigergrößen zu ermöglichen
- Teilweise Update der AVR -Architektur
- v2.9.7
- Python <3,8 Support fallen lassen
- Verbesserung des Strukturpakets für Bitfield -Unterstützung und Berechnung der Offsets von Feldern für ausgewählte Zeigergröße (32 oder 64 Bit)
- v2.9.6
- Fusion QT GUI ImageView zusammenführen
- Verbessern Sie QT GUI BinfmtView/Hexview mit Entropie & Infoview
- Fügen Sie eine spezifische Mach-O-Ansicht hinzu
- Verbessern Sie die Unterstützung für den Dunkelmodus des QT UI
- Fügen Sie Tricore Architecture hinzu
- Fügen Sie W65C02 Architektur hinzu
- Fügen Sie die WASM -Architektur hinzu
- Fügen Sie das WASM -Binärformat -Parser hinzu
- Move System.strukturmodul in ein Paket einsteigt
- v2.9.5
- Fucken Sie QT GUI BinfmtView/Hexview zusammen
- Fixieren Sie Decoder und Semantik der verschiedenen Armanweisungen
- Strukturansicht und spezifische ELF- und PE -Ansichten hinzufügen
- Fügen Sie Unterstützung für den QT UI Dark -Modus hinzu
- Fügen Sie MIPS -Lader hinzu
- Fügen Sie Bitfield -Unterstützung in Strukturen hinzu
- v2.9.4
- Fügen Sie Linux32 -Loader für MIPS_LE/SPARC/RISCV hinzu
- Aktualisieren Sie Win32/Win64 -Systemoberflächen
- Fügen Sie Mapper-Unterstützung für nicht interpretierende Pipeline hinzu
- Fix MIPS R3000 Last/Speichern verzögerte Pipeline -Effekte
- Fügen Sie die Erzview -Klasse hinzu
- Fügen Sie RISCV64 Architektur (RISCV.RV64I) hinzu
- Fügen Sie Vorkonditionstest für Spezifikationen hinzu
- Aktualisieren Sie alle Bogenspezifikationen, um Kollisionen zu vermeiden
- Verschiedene Bogenformate verbessern/reparieren
- Fix X86 Parser
- v2.9.3
- Befehle von DBGui Emul und SRV zusammenführen/aktualisieren
- Zusammenführen/Aktualisieren von Emulatoransichten
- PSX -System hinzufügen
- Fügen Sie MIPS -Architektur hinzu (nur R3000)
- Verbessern Sie die Unterstützung für Änderungen in der Konfiguration
- Überarbeit der Ext/Stub -Schnittstelle
- Fixierung von SPARC -Formatierer
- Behebung von PE32+ Datadirectories Parsing
- v2.9.2
- Vorbereiten Sie die Zusammenführung mit DBGui
- Python 2.7 Support fallen lassen
- Impackage/Modul -Impackungen und Protokollierung überarbeiten
- Verschiedene Code -Desinfektion
- schwarzere Quellen
- v2.9.1
- Fügen Sie Mach-O-Lader und System.osx Skelett hinzu
- Verbesserung des Emulatormoduls
- Fügen Sie Server und grundlegende Client -CMDCLI -Benutzeroberfläche hinzu
- Beheben Sie verschiedene Fehler/Warnungen
- v2.9.0
- Fügen Sie Skelett des Emulatormoduls (EMUL -Klasse) hinzu
- Verworganisieren Sie Systemmodule in Unterpackungen um
- Fügen Sie System-, Betriebssystem-, Aufgaben- und Definitionsklassen hinzu
- Fügen Sie AVR -Architektur hinzu
- Modifizierte Blockklasse => MAP -Attribut an CFG.Node -Klasse verschoben
- Verschiebte Speicherklassen im System.Memory -Modul
- bewegte CFG -Analyseklassen in 'SA' Subpackage
- Verbesserung der Debug -Protokolle
- Verbessern Sie PE/ELF -Parser mit Amoco.structs -Modul
- Fügen Sie die Checksec -Methode in der ELF -Klasse hinzu
- Fix Armv7 -Semantik und Formate
- v2.6.3
- Fügen Sie Zwergarchitektur hinzu
- Elf Loader aktualisieren und verbessern
- Verbesserung der Ausdruck vereinfachen Verschiebungen+und OPS
- Strukturfelder der variablen Länge der variablen Länge "Varfield" verschmelzen
- v2.6.2
- Beheben der Unterstützung für Strukturen "Slop"
- Ermöglichen Sie selbstdefinierte Ausrichtungen von Strukturen
- v2.6.1
- Verwenden Sie standardmäßig native Strukturgröße/Aligment
- v2.6.0
- Fügen Sie V850 (E2S) Architektur hinzu
- Fügen Sie SH2-A-Architektur hinzu
- Fügen Sie Unterstützung für die Analyse von I.MX6 -HAB -Strukturen hinzu
- Merge AVR Architecture
- Fügen Sie System-/Strukturklassen hinzu
- Exportieren Sie aus dem Amoco Tree (libclang c-to-structs)
- Fügen Sie EBPF -Anweisungen Semantik hinzu
- Fügen Sie Unterstützung für (alte) BPF -Anweisungsspezifikationen hinzu
- Fügen Sie Unterstützung für das HEX/SREC -Binärformat hinzu
- MemoryMap 'Merge' -Methode hinzufügen
- Fügen Sie die Methode 'Step_instruction' in CoreExec (Emulator) hinzu.
- Fügen Sie Unterstützung für UFS -Strukturen hinzu
- Signale Signale Dispatcher für die Benutzeroberfläche zusammenführen
- Verbesserung der setuptools Unterstützung
- Gift entfernen und nur auf Travis verlassen
- Verbesserung der ARMV7 -Anweisungen Semantik und Codehelfer
- Verbessern Sie die Spezifikationen und Formate der ARMV7 -Anweisungen
- Fügen Sie Spec Tree Debugg Level -Protokollierung hinzu
- Fix Decodierer für Bogens mit Bigendian Variable Länge Anweisung
- Verbesserung der Decoder -Effizzität mit Indikator für einen erweiterten Fetcher
- Fügen Sie Pygmente Support für SPARC, MSP430 -Anweisungsformatier
- Ausdrücke erweitern
- Konfigurationsmodul verbessern
- v2.5.3
- Vollständige Fix von Ausgabe Nr. 77 (Typischer X64 Wahnsinn)
- v2.5.2
- Partielle Lösung von Ausgabe Nr. 77 (GitHub) bezieht sich auf die Semantik der LEA -Anweisungen auf X64 Arch.
- v2.5.1
- Fügen Sie die RISC-V-Architektur hinzu
- Fügen Sie EBPF -Architektur hinzu
- Verwenden Sie Unicode -Ausgänge mit Unicode -Symbolen für die meisten Bediener, wenn sie unterstützt werden
- Fügen Sie weniger als ungeschriebene (LTU) und mehr oder gleichwertige (GEU) -Personal hinzu, die von der RISCV-Architektur benötigt werden
- Fix vereinfachen Sie die Methode für Comp -Ausdrücke
- Verbessern Sie die vereinfachten Methoden mit einem "Bitslice" optionalen Parameter
- Verbesserung der Mapper -Speicherschnittstelle
- Fix SMT model_to_mapper Methode
- Fügen Sie CFG 'DOT' -Format (elementar) Ausgang hinzu
- Fügen Sie die Methode "getFileOffset" in ELF- und PE -Klassen hinzu
- Entfernen Sie die Global Endiangness Flagge
- Aktualisieren Sie X86/X64 -Formate, die mit GNU AS und Clang kompatibel sind
- Fügen Sie einige x86/x64 -Anweisungen Semantik hinzu (Movnti, Wbinvd, Div, ...)
- Beheben Sie einige x86/x64 seltene Anweisungen (PMOVMSKB, ...)
- v2.5.0
- Unterstützen Sie Python3 (> = 3,5)
- Das Laden mehrerer CPU -Bögen zulassen (Fix Problem Nr. 21 und Nr. 64)
- Aktualisieren Sie Readme und Sphinx -Dokumente
- v2.4.6
- Fügen Sie die Sphinx -Dokumentation hinzu (RST -Dateien und Docstrings)
- Fügen Sie Funktionen für Hauptklassen hinzu
- ELF ERF ERHALTEN DRUCKEN
- DB -Modul geändert, um SQLalchemy und nicht ZODB zu verwenden
- Machen Sie alle Objekte wählbar (mit höchstem Protokoll)
- Fügen Sie neue X86 & X64 -Formatter hinzu
- Beheben Sie viele X64 -Spezifikationen und Semantik
- Einige Leistungsverbesserungen
- Verbessern Sie die Vereinfachung von MEM (VEC) und SLC (VEC)
- Beheben
- v2.4.5
- Fügen Sie X86/X64 -Innenmodus -Selektor hinzu
- Fügen Sie den Ausdruck "Labor" für Etiketten hinzu
- Verbessern Sie die Memoryzone/Map mit einer "Grep" -Methode
- Verbesseren Sie die Memoryzone, damit das "Verschieben" einer Adresse "verschoben" werden kann
- Verbessern Sie den X86 AT & T -Formatierer
- Fügen Sie X64 -Decoder -Tests hinzu
- Beheben Sie den X64-Rip-Relativ-Adressierungsmodus
- Fix viele x64 -Spezifikationen
- Fügen Sie die Semantik von X64 gepackte Instruktionen hinzu
- Beheben Sie verschiedene X86 SSE -Anweisungen
- Beheben Sie verschiedene X86 -Probleme (FISTTP/SETCC/PUSH IMM8/MOVQ)
- v2.4.4
- Fügen Sie einige SSE -Anweisungssemantik hinzu
- Fügen Sie UI.Graphics QT -Paket mit Block/Func/Xfunc -Elementenklassen hinzu
- Fügen Sie das erste UI.Graphics GTK -Paket hinzu
- Verschieben Sie VLTable in der Klasse ui.views.blockview
- Beheben Sie verschiedene X86/64 -Dekodierung/Formatierung/Semantik
- v2.4.3
- Fügen Sie UI.Graphics -Pakete hinzu (geleert)
- Fügen Sie das UI.Views -Modul mit Unterstützung für Block/Func/Xfunc hinzu
- Fügen Sie ui.render.vltable Klasse zu hübschen Drucktabellen hinzu
- Verbesserung der Anweisungsformatierklasse, um auf PP -Token zuzugreifen
- Reiniger iterercfg- und lbackward -Algorithmen
- Fügen Sie die VECW -Expressionsklasse hinzu, um "erweiterte" VEC -Ausdrücke darzustellen
- Verbesserung des Speicherschreibens von VEC -Ausdrücken
- Verbesserung der Erweiterung und Fixpoint in func.makemap () verbessern
- Hinzufügen von 'Typ' Attribut (STD/PC/Flags/Stack/Other)
- Definieren Sie den Registertyp für x86 Arch
- Beheben Sie einige X86/64 -Dekodierung/Formatierung/Semantik
- Aktualisieren Sie die Travis -Konfiguration, beheben Sie PyTest vs. Token.
- v2.4.2
- Unterstützung für Pygmente hübsche Druckmethoden (im UI. -Render -Modul)
- Fügen Sie x86 Hilighted Syntax Formatierer hinzu (in arch.x86.formats)
- Entdecken Sie die hübsche Druckschnittstelle von Expression (exp.pp (), exp.toks ())
- Entfernen Sie die Standardkonfigurationsklasse Fallback (configParser ist Standard)
- Führen Sie einige Proben und Tests zusammen, die zum PyTest -Paket portiert sind
- Verwenden Sie Setuptools, fügen Sie Tox.ini und Travis-CI-Konfiguration hinzu
- Beheben Sie einige x86/x64 -Semantik
- Verbesserung der SPARC V8 -Formate
- Fügen Sie Sparc Coprozessor -Register hinzu
- Update Readme
- v2.4.1
- Fügen Sie lbackward Analysis und Func.Makemap () -implementierungen hinzu
- Fügen Sie die VEC -Expressionsklasse hinzu, um eine Reihe von Ausdrücken darzustellen
- Fügen Sie Mapper Merge- und Erweiterungsfunktionen hinzu
- Erlauben Sie, die SMT -Solver -Instanz in exp.to_smtlib () zu übergeben)
- Fügen Sie Funchelpers-Methoden in X86-basierten Systemklassen hinzu
- Fügen Sie Sitzungs-/DB-Klassen und gurplespezifische Methoden hinzu
- Fügen Sie "Fortschritt" -Methode in die Protokollklasse hinzu, um Feedback bereitzustellen
- Fügen Sie die erforderlichen externen Pakete in Setup.py hinzu
- Beheben Sie einige x86/x64 -Semantik
- Verbesserung der SPARC V8 -Formate
- Update Readme
- v2.4.0
- Merge Z3 Solver Interface, siehe SMT.PY und SMTLIB () EXP -Methode
- Fusionsfunktionsanalyse und Code -Func -Klasse zusammenführen.
- Ausdrücke verbessern: getrennte unäre und binäre OPs, "normalisieren" Ausdrücke
- Verbesseren Sie Mapper mit der Memory () -Methode und aliasing-resistenten Zusammensetzungsoperatoren
- Verbesserung der Memoryzone -Klasse: Geben Sie Teile der oberen Expression zurück, anstatt MemoryError zu erhöhen.
- Hinzufügen von RAWExec-Klasse für Shellcode-ähnliche Eingabe
- Unterstützen Sie die String -Eingabe in ELF/PE -Klassen.
- Beheben Sie verschiedene x86/x64 -Fehler
- schützen vor der Änderung der Umweltregister
- Fügen Sie Win64 Loader hinzu
- Passen Sie die Protokollebenen und die optionale Datei von Conf an
- Update Readme
- v2.3.5
- Fügen Sie x64 Arch + Full x86/64 SSE -Decoder hinzu
- Hotfix x86/x64 Inversion von {88}/{8a} MOV -Anweisungen
- Fix verschiedene X86 -Decoder und Semantik
- Codekosmetik
- v2.3.4
- Fusion ARMV7/Daumen feste Semantik verschmelzen
- Fügen Sie x86 FPU -Decoder hinzu
- Fügen Sie die Lokalisierungsfunktion in MemoryMap hinzu
- Fix Core Read_instruction an der Kartengrenze
- Fix Pe Import -Parsing- und TLS -Tabellenbauer beheben
- schnellerer generischer Decoder
- Hotfix Verschiedene X86 -Decoder
- Fügen Sie einige x86 SSE -Decoder hinzu
- v2.3.3
- Unterstützung für MSP430- und PIC18 -Mikrocontroller
- Fix SPARC Rett, UDIV/SDIV und Formate
- Beheben Sie die X86 JCXZ -Befehlskodierung
- v2.3.2
- Merge Z80/GB Architecture, Fix Sparc gemeldete Probleme
- Fügen Sie Beispiel für SSE2 -Dekodierung hinzu (fest)
- v2.3.1
- Lizenzdatei hinzufügen
- Fix SPARC Architecture
- Vermeiden Sie den PTR -Ausdruck, wenn die Adresse nicht Deref ist
- Beheben Sie EQN_HELPERS -Simplifier -Regeln
- Readme aktualisiert
- Neue PE -Klasse (getestet auf cost.exe) + Unterstützung für mehrere Einstiegspunkte.