
Triton ist eine dynamische Binäranalyse-Bibliothek. Erstellen Sie Ihre eigenen Programmanalysetools, automatisieren Sie Ihr Reverse Engineering, führen Sie Softwareverifikation durch oder emulieren Sie einfach Code.

Triton ist eine dynamische Binäranalyse-Bibliothek. Sie bietet interne Komponenten, mit denen Sie Ihre Programmanalysewerkzeuge erstellen, Reverse Engineering automatisieren, Softwareverifikation durchführen oder einfach Code emulieren können.
Da Triton eine Art Teilzeitprojekt ist, macht uns bitte keine Vorwürfe, wenn es nicht vollständig zuverlässig ist. Issues oder Pull Requests zu eröffnen ist immer besser als Trolling =). Sie können die Entwicklung jedoch auf Twitter unter @qb_triton verfolgen.
from triton import *
Create the Triton context with a defined architecture
ctx = TritonContext(ARCH.X86_64)
Define concrete values (optional)
ctx.setConcreteRegisterValue(ctx.registers.rip, 0x40000)
Symbolize data (optional)
ctx.symbolizeRegister(ctx.registers.rax, 'my_rax')
Execute instructions
ctx.processing(Instruction(b"\x48\x35\x34\x12\x00\x00")) # xor rax, 0x1234 ctx.processing(Instruction(b"\x48\x89\xc1")) # mov rcx, rax
Get the symbolic expression
rcx_expr = ctx.getSymbolicRegister(ctx.registers.rcx) print(rcx_expr) (define-fun ref!8 () (_ BitVec 64) ref!1) ; MOV operation - 0x40006: mov rcx, rax
Solve constraint
ctx.getModel(rcx_expr.getAst() == 0xdead) {0: my_rax:64 = 0xcc99}
0xcc99 XOR 0x1234 is indeed equal to 0xdead
hex(0xcc99 ^ 0x1234) '0xdead'
## Installieren mit pip
Triton kann mit `pip` installiert werden:```console
pip install triton-library
Triton benötigt die folgenden Abhängigkeiten:```
### Linux und MacOS```console
$ git clone https://github.com/JonathanSalwan/Triton
$ cd Triton
$ mkdir build ; cd build
$ cmake ..
$ make -j3
$ sudo make install
Standardmäßig werden LLVM und Bitwuzla nicht kompiliert. Wenn Sie die volle Leistungsfähigkeit von Triton nutzen möchten, lautet der cmake-Befehl:```console $ cmake -DLLVM_INTERFACE=ON -DCMAKE_PREFIX_PATH=$(llvm-config --prefix) -DBITWUZLA_INTERFACE=ON ..
#### MacOS M1 Hinweis:
Falls Sie Kompilierungsfehler wie:```
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
Versuchen Sie, PYTHON_EXECUTABLE, PYTHON_LIBRARIES und PYTHON_INCLUDE_DIRS für Ihre spezifische Python-Version anzugeben:```console
cmake -DCMAKE_INSTALL_PREFIX=/opt/homebrew/
-DPYTHON_EXECUTABLE=/opt/homebrew/bin/python3
-DPYTHON_LIBRARIES=/opt/homebrew/Cellar/[email protected]/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib
-DPYTHON_INCLUDE_DIRS=/opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.10/include/python3.10/
..
Diese Informationen können Sie aus diesem Ausschnitt entnehmen:```python
from sysconfig import get_paths
info = get_paths()
print(info)
Falls die Python-Autovervollständigung nicht funktioniert, führen Sie folgende Schritte aus:
/usr/lib/python3.13/).Ihre IDE muss das Parsen von .pyi-Dateien unterstützen.
Sie können cmake verwenden, um die .sln-Datei von libTriton zu generieren.```console
git clone https://github.com/JonathanSalwan/Triton.git cd Triton mkdir build cd build cmake -G "Visual Studio 14 2015 Win64"
-DBOOST_ROOT="C:/Users/jonathan/Works/Tools/boost_1_61_0"
-DPYTHON_INCLUDE_DIRS="C:/Python36/include"
-DPYTHON_LIBRARIES="C:/Python36/libs/python36.lib"
-DZ3_INCLUDE_DIRS="C:/Users/jonathan/Works/Tools/z3-4.6.0-x64-win/include"
-DZ3_LIBRARIES="C:/Users/jonathan/Works/Tools/z3-4.6.0-x64-win/bin/libz3.lib"
-DCAPSTONE_INCLUDE_DIRS="C:/Users/jonathan/Works/Tools/capstone-5.0.1-win64/include"
-DCAPSTONE_LIBRARIES="C:/Users/jonathan/Works/Tools/capstone-5.0.1-win64/capstone.lib" ..
Sie können setup.py verwenden, um die Debug-Version von triton.pyd unter Windows zu erstellen.```console
> git clone https://github.com/JonathanSalwan/Triton.git
> cd Triton
> $env:COMPILER_DIR="C:/deps/llvm/llvm2116r/bin"
> $env:CMAKE_PREFIX_PATH="C:/deps/llvm/llvm-project-21.1.6.src/install/lib/cmake/llvm;C:/code/cxx-common-cmake/build/install"
> python_d -m build --wheel
> python_d -m pip install (Get-ChildItem .\dist\triton_library*)
Falls Sie es vorziehen, die vorkompilierte Bibliothek direkt herunterzuladen, schauen Sie sich unsere AppVeyor-Artefakte an. Beachten Sie, dass Sie bei Verwendung der AppVeyor-Artefakte wahrscheinlich die Visual C++ Redistributable-Pakete für Visual Studio 2012 installieren müssen.
Der Triton-Port in vcpkg wird von Microsoft-Teammitgliedern und Community-Mitwirkenden auf dem neuesten Stand gehalten. Die URL von vcpkg ist: https://github.com/Microsoft/vcpkg. Sie können Triton mit dem vcpkg-Paketmanager herunterladen und installieren:```console $ git clone https://github.com/Microsoft/vcpkg.git $ cd vcpkg $ ./bootstrap-vcpkg.sh # ./bootstrap-vcpkg.bat for Windows $ ./vcpkg integrate install $ ./vcpkg install triton
Wenn die Version veraltet ist, erstellen Sie bitte [ein Issue oder einen Pull-Request](https://github.com/Microsoft/vcpkg) im vcpkg-Repository.
# Mitwirkende
* [**Alberto Garcia Illera**](https://twitter.com/algillera) - Cruise Automation
* [**Alexey Vishnyakov**](https://vishnya.xyz/) - ISP RAS
* [**Black Binary**](https://github.com/black-binary) - n/a
* [**Christian Heitman**](https://github.com/cnheitman) - Quarkslab
* [**Daniil Kuts**](https://github.com/apach301) - ISP RAS
* [**Jessy Campos**](https://github.com/ek0) - n/a
* [**Matteo F.**](https://twitter.com/fvrmatteo) - n/a
* [**Pierrick Brunet**](https://github.com/pbrunet) - Quarkslab
* [**PixelRick**](https://github.com/PixelRick) - n/a
* [**Romain Thomas**](https://twitter.com/rh0main) - Quarkslab
* [**Und viele weitere**](https://github.com/JonathanSalwan/Triton/graphs/contributors)
## Bereits genutzte Triton-Anwendungen
### Werkzeuge
* [Exrop](https://github.com/d4em0n/exrop): Automatische ROPChain-Generierung.
* [Pimp](https://github.com/kamou/pimp): Triton-basiertes R2-Plugin für concolic Execution und totale Kontrolle.
* [Ponce](https://github.com/illera88/Ponce): IDA 2016 Plugin Contest Gewinner! Symbolic Execution nur einen Klick entfernt!
* [QSynthesis](https://github.com/quarkslab/qsynthesis): Greybox-Synthesizer für die Deobfuskation von Assembler-Anweisungen.
* [TritonDSE](https://github.com/quarkslab/tritondse): Triton-basierte DSE-Bibliothek mit Lade- und Erkundungsfunktionen.
* [Titan](https://github.com/archercreat/titan): Titan ist ein VMProtect-Devirtualizer unter Verwendung von Triton.
### Paper und Konferenzen<ul dir="auto">
<li>
<b>Sydr-Fuzz: Kontinuierliches Hybrid-Fuzzing und dynamische Analyse für den Security Development Lifecycle</b><br />
<b>Vortrag auf</b>: Ivannikov ISP RAS Open Conference, Moskau, Russland, 2022. [<a href="publications/ISPOPEN2022-sydr-fuzz.pdf">Paper</a>] [<a href="publications/ISPOPEN2022-slide-sydr-fuzz-vishnyakov.pdf">Folien</a>]<br />
<b>Autoren</b>: Vishnyakov A., Kuts D., Logunova V., Parygina D., Kobrin E., Savidov G., Fedotov A.<br />
<b>Abstract</b>: <em>Automatisierte dynamische Analyse-Frameworks für kontinuierliches Testen sind heutzutage stark gefragt, um die Softwaresicherheit zu gewährleisten und die Anforderungen des Security Development Lifecycle (SDL) zu erfüllen. Die Effizienz der Jagd nach Sicherheitsfehlern mit modernen Hybrid-Fuzzing-Techniken übertrifft weit verbreitete coverage-gesteuerte Fuzzing-Verfahren. Wir schlagen eine verbesserte dynamische Analyse-Pipeline vor, um die Produktivität der automatischen Fehlererkennung auf Basis von Hybrid-Fuzzing zu steigern. Wir implementieren die vorgeschlagene Pipeline in dem kontinuierlichen Fuzzing-Toolset Sydr-Fuzz, das von einem Hybrid-Fuzzing-Orchestrator angetrieben wird und unser DSE-Tool Sydr mit libFuzzer und AFL++ integriert. Sydr-Fuzz enthält auch Sicherheitsprädikatsprüfer, das Crash-Triaging-Tool Casr sowie Hilfsprogramme zur Corpus-Minimierung und Coverage-Erfassung. Das Benchmarking unseres Hybrid-Fuzzers gegenüber alternativen State-of-the-Art-Lösungen zeigt seine Überlegenheit gegenüber coverage-gesteuerten Fuzzern, während es auf dem gleichen Niveau wie fortschrittliche Hybrid-Fuzzer bleibt. Darüber hinaus bestätigen wir die Relevanz unseres Ansatzes durch die Entdeckung von 85 neuen realen Softwarefehlern im Rahmen des OSS-Sydr-Fuzz-Projekts. Schließlich veröffentlichen wir den Quellcode von Casr für die Community, um die Untersuchung bestehender Abstürze zu erleichtern.</em>
</li><br/>
<li>
<b>Strong Optimistic Solving for Dynamic Symbolic Execution</b><br />
<b>Vortrag auf</b>: Ivannikov Memorial Workshop, Kasan, Russland, 2022. [<a href="publications/IVMEM2022-strong-optimistic-parygina.pdf">Paper</a>] [<a href="publications/IVMEM2022-slide-strong-optimistic-parygina.pdf">Folien</a>]<br />
<b>Autoren</b>: Parygina D., Vishnyakov A., Fedotov A.<br />
<b>Abstract</b>: <em>Dynamic Symbolic Execution (DSE) ist eine effektive Methode für automatisiertes Programmtesten und die Fehlererkennung. Sie erhöht die Codeabdeckung durch die Erkundung komplexer Verzweigungen während des Hybrid-Fuzzings. DSE-Werkzeuge invertieren die Verzweigungen entlang eines Ausführungspfades und helfen dem Fuzzer, bisher unzugängliche Programmteile zu untersuchen. DSE steht oft vor Über- und Unterbeschränkungsproblemen. Ersteres führt zu einer erheblichen Analysekomplikation, während Letzteres eine ungenaue symbolische Ausführung verursacht. Wir schlagen eine stark optimistische Lösungsmethode vor, die irrelevante Pfadprädikatsbeschränkungen für die Zielverzweigungsinversion eliminiert. Wir entfernen solche symbolischen Einschränkungen, von denen die Zielverzweigung nicht kontrollabhängig ist. Darüber hinaus behandeln wir separat symbolische Verzweigungen, die verschachtelte Kontrolltransferanweisungen enthalten, die die Kontrolle über den Bereich der übergeordneten Verzweigung hinaus weitergeben, z. B. return, goto, break usw. Wir implementieren die vorgeschlagene Methode in unserem Tool zur dynamischen symbolischen Ausführung Sydr. Wir evaluieren die stark optimistische Strategie, die optimistische Strategie, die nur die letzte Einschränkungsnegation enthält, und ihre Kombination. Die Ergebnisse zeigen, dass die Strategiekombination hilft, entweder die Codeabdeckung oder die durchschnittliche Anzahl korrekt invertierter Verzweigungen pro Minute zu erhöhen. Es ist optimal, beide Strategien gemeinsam anzuwenden, im Gegensatz zu anderen Konfigurationen.</em>
</li><br/>
<li>
<b>Greybox Program Synthesis: A New Approach to Attack Dataflow Obfuscation</b><br />
<b>Vortrag auf</b>: Blackhat USA, Las Vegas, Nevada, 2021. [<a href="publications/BHUSA2021-David-Greybox-Program-Synthesis.pdf">Folien</a>]<br />
<b>Autoren</b>: Robin David<br />
<b>Abstract</b>: <em>Dieser Vortrag stellt die neuesten Fortschritte in der Programmsynthese vor, die zur Deobfuskation eingesetzt wird. Er zielt darauf ab, diese Analysetechnik zu entmystifizieren, indem gezeigt wird, wie sie auf Obfuskation angewendet werden kann. Insbesondere die für diesen Vortrag veröffentlichte Implementierung Qsynthesis zeigt einen vollständigen End-to-End-Workflow zur Deobfuskation von Assembler-Anweisungen zurück in optimierte (deobfuskierte) Anweisungen, die wieder in die Binärdatei eingefügt werden.</em>
</li><br/>
<li>
<b>From source code to crash test-case through software testing automation</b><br />
<b>Vortrag auf</b>: C&ESAR, Rennes, Frankreich, 2021. [<a href="publications/CESAR2021_robin-david-paper.pdf">Paper</a>] [<a href="publications/CESAR2021_robin-david-slide.pdf">Folien</a>]<br />
<b>Autoren</b>: Robin David, Jonathan Salwan, Justin Bourroux<br />
<b>Abstract</b>: <em>Dieses Paper stellt einen Ansatz vor, der den Softwaretestprozess vom Quellcode bis zum dynamischen Test des kompilierten Programms automatisiert. Genauer gesagt, ermöglicht es ausgehend von einem statischen Analysebericht, der Warnungen zu Quellcodezeilen anzeigt, diese Zeilen dynamisch zu testen und opportunistisch zu prüfen, ob sie einen Absturz auslösen können. Das Ergebnis ist ein Testkorpus, der es erlaubt, Warnungen abzudecken und auszulösen, falls es sich um echte Positivmeldungen handelt. In diesem Paper wird die Methodik zur Verfolgung von Warnungen in der kompilierten Binärdatei, der Auswahlprozess der Test-Engines und die Ergebnisse, die an einer TCP/IP-Stack-Implementierung für eingebettete Systeme und IoT-Systeme erzielt wurden, diskutiert.</em>
</li><br/>
<li>
<b>Symbolic Security Predicates: Hunt Program Weaknesses</b><br />
<b>Vortrag auf</b>: Ivannikov ISP RAS Open Conference, Moskau, Russland, 2021. [<a href="publications/ISPOPEN2021-security-predicates-vishnyakov.pdf">Paper</a>] [<a href="publications/ISPOPEN2021-slide-security-predicates-vishnyakov.pdf">Folien</a>]<br />
<b>Autoren</b>: A.Vishnyakov, V.Logunova, E.Kobrin, D.Kuts, D.Parygina, A.Fedotov<br />
<b>Abstract</b>: <em>Dynamic Symbolic Execution (DSE) ist eine leistungsstarke Methode zur Pfaderkundung während des Hybrid-Fuzzings und zur automatischen Fehlererkennung. Wir schlagen Sicherheitsprädikate vor, um undefiniertes Verhalten und Speicherzugriffsverletzungsfehler effektiv zu erkennen. Zunächst führen wir das Programm symbolisch auf Pfaden aus, die keine Fehler auslösen (Hybrid-Fuzzing kann diese Pfade erkunden). Dann konstruieren wir ein symbolisches Sicherheitsprädikat, um eine Fehlerbedingung zu verifizieren. Auf diese Weise können wir den Programm-Datenfluss ändern, um Schwachstellen wie Nullzeiger-Dereferenzierung, Division durch Null, Zugriff außerhalb der Grenzen oder Integer-Überlauf zu verursachen. Im Gegensatz zur statischen Analyse meldet die dynamische symbolische Ausführung nicht nur Fehler, sondern generiert auch neue Eingabedaten, um sie zu reproduzieren. Darüber hinaus führen wir eine Funktionssemantik-Modellierung für gängige C/C++-Standardbibliotheksfunktionen ein. Wir zielen darauf ab, den Kontrollfluss innerhalb einer Funktion mit einer einzigen symbolischen Formel zu modellieren. Dies unterstützt die Fehlererkennung, beschleunigt die Pfaderkundung und überwindet Überbeschränkungen im Pfadprädikat. Wir implementieren die vorgeschlagenen Techniken in unserem Tool zur dynamischen symbolischen Ausführung Sydr. So nutzen wir leistungsstarke Methoden aus Sydr wie das Path Predicate Slicing, das irrelevante Einschränkungen eliminiert. Wir präsentieren Juliet Dynamic, um die Genauigkeit von dynamischen Fehlererkennungswerkzeugen zu messen. Das Testsystem verifiziert auch, dass die generierten Eingaben Sanitizer auslösen. Wir evaluieren die Genauigkeit von Sydr für 11 CWEs aus dem Juliet-Testsuite. Sydr zeigt eine Gesamtgenauigkeit von 95,59 %. Wir stellen die Evaluierungsartefakte von Sydr öffentlich zur Verfügung, um die Reproduzierbarkeit der Ergebnisse zu erleichtern.</em>
</li><br/>
<li>
<b>Towards Symbolic Pointers Reasoning in Dynamic Symbolic Execution</b><br />
<b>Vortrag auf</b>: Ivannikov Memorial Workshop, Nischni Nowgorod, Russland, 2021. [<a href="publications/IVMEM2021-symbolic-pointers-kuts.pdf">Paper</a>] [<a href="publications/IVMEM2021-slide-symbolic-pointers-kuts.pdf">Folien</a>]<br />
<b>Autoren</b>: Daniil Kuts<br />
<b>Abstract</b>: <em>Dynamic Symbolic Execution ist eine weit verbreitete Technik für automatisierte Softwaretests, die für die Erkundung von Ausführungspfaden und die Erkennung von Programmfehlern entwickelt wurde. In letzter Zeit hat sich ein hybrider Ansatz verbreitet, bei dem das Hauptziel der symbolischen Ausführung darin besteht, dem Fuzzer bei der Erhöhung der Programmabdeckung zu helfen. Je mehr Verzweigungen der symbolische Ausführer invertieren kann, desto nützlicher ist er für den Fuzzer. Der Programm-Kontrollfluss hängt oft von Speicherwerten ab, die durch die Berechnung von Adressindizes aus Benutzereingaben gewonnen werden. Die meisten DSE-Tools unterstützen jedoch solche Abhängigkeiten nicht, so dass sie einige gewünschte Programmverzweigungen übersehen. Wir implementieren symbolische Adressenlogik bei Speicherlesevorgängen in unserem Tool zur dynamischen symbolischen Ausführung Sydr. Mögliche Speicherzugriffsbereiche werden entweder durch die Analyse symbolischer Ausdrücke der Speicheradresse oder durch binäre Suche mit einem SMT-Solver bestimmt. Wir schlagen eine verbesserte Linearisierungstechnik vor, um Speicherzugriffe zu modellieren. Verschiedene Speichermodellierungsmethoden werden anhand einer Reihe von Programmen verglichen. Unsere Evaluierung zeigt, dass die Behandlung symbolischer Adressen es erlaubt, neue symbolische Verzweigungen zu entdecken und die Programmabdeckung zu erhöhen.</em>
</li><br/>
<li>
<b>QSynth: A Program Synthesis based Approach for Binary Code Deobfuscation</b><br />
<b>Vortrag auf</b>: BAR, San Diego, Kalifornien, 2020. [<a href="publications/BAR2020-qsynth-robin-david.pdf">Paper</a>]<br />
<b>Autoren</b>: Robin David, Luigi Coniglio, Mariano Ceccato<br />
<b>Abstract</b>: <em>Wir stellen einen generischen Ansatz vor, der sowohl DSE als auch Programmsynthese nutzt, um Programme, die mit Mixed-Boolean-Arithmetic, Data-Encoding oder Virtualisierung obfuskiert wurden, erfolgreich zu synthetisieren. Der vorgeschlagene Synthesealgorithmus ist eine Offline-Enumerate-Synthese-Primitive, die von einer Top-Down-Breitensuche gesteuert wird. Wir zeigen seine Wirksamkeit gegen einen State-of-the-Art-Obfuskator und seine Skalierbarkeit, da er andere ähnliche Ansätze auf Synthesebasis übertrifft. Wir zeigen auch seine Wirksamkeit bei Vorhandensein von zusammengesetzter Obfuskation (Kombination verschiedener Techniken). Diese laufende Arbeit beleuchtet die Wirksamkeit der Synthese für bestimmte Arten von Obfuskation und ebnet den Weg für robustere Algorithmen und Vereinfachungsstrategien.</em>
</li><br/>
<li>
<b>Sydr: Cutting Edge Dynamic Symbolic Execution</b><br />
<b>Vortrag auf</b>: Ivannikov ISP RAS Open Conference, Moskau, Russland, 2020. [<a href="publications/ISPRAS2020-sydr.pdf">Paper</a>] [<a href="publications/ISPOPEN2020-slide-sydr-vishnyakov.pdf">Folien</a>] [<a href="https://www.ispras.ru/conf/2020/video/compiler-technology-11-december.mp4#t=6021">Video</a>]<br />
<b>Autoren</b>: A.Vishnyakov, A.Fedotov, D.Kuts, A.Novikov, D.Parygina, E.Kobrin, V.Logunova, P.Belecky, S.Kurmangaleev<br />
<b>Abstract</b>: <em>Dynamic Symbolic Execution (DSE) hat eine enorme Anzahl von Anwendungen in der Computersicherheit (Fuzzing, Schwachstellenfindung, Reverse Engineering usw.). Wir schlagen mehrere Verbesserungen der Leistung und Genauigkeit für die dynamische symbolische Ausführung vor. Das Überspringen nicht-symbolischer Anweisungen erlaubt es, ein Pfadprädikat 1,2- bis 3,5-mal schneller zu erstellen. Die symbolische Engine vereinfacht Formeln während der symbolischen Ausführung. Path Predicate Slicing eliminiert irrelevante Konjunkte aus Solver-Anfragen. Wir behandeln jede Sprungtabelle (switch-Anweisung) als mehrere Verzweigungen und beschreiben die Methode für die symbolische Ausführung von Multithread-Programmen. Die vorgeschlagenen Lösungen wurden im Sydr-Tool implementiert. Sydr führt die Inversion von Verzweigungen im Pfadprädikat durch. Sydr kombiniert das dynamische Binärinstrumentierungswerkzeug DynamoRIO mit der symbolischen Engine Triton.</em>
</li><br/>
<li>
<b>Symbolic Deobfuscation: From Virtualized Code Back to the Original</b><br />
<b>Vortrag auf</b>: DIMVA, Paris-Saclay, Frankreich, 2018. [<a href="publications/DIMVA2018-deobfuscation-salwan-bardin-potet.pdf">Paper</a>] [<a href="publications/DIMVA2018-slide-deobfuscation-salwan-bardin-potet.pdf">Folien</a>]<br />
<b>Autoren</b>: Jonathan Salwan, Sébastien Bardin, Marie-Laure Potet<br />
<b>Abstract</b>: <em>Softwareschutz hat im letzten Jahrzehnt einen wichtigen Platz eingenommen, um legitime Software vor Reverse Engineering oder Manipulation zu schützen. Virtualisierung gilt als eine der besten Verteidigungen gegen solche Angriffe. Wir stellen einen generischen Ansatz vor, der auf symbolischer Pfaderkundung, Taint und Rekompilierung basiert und es erlaubt, aus einem virtualisierten Code einen devirtualisierten Code zu gewinnen, der semantisch identisch mit dem Original und in der Größe ähnlich ist. Wir definieren Kriterien und Metriken, um die Relevanz der deobfuskierten Ergebnisse in Bezug auf Korrektheit und Präzision zu bewerten. Schließlich schlagen wir ein Open-Source-Setup vor, das es erlaubt, den vorgeschlagenen Ansatz gegen mehrere Formen der Virtualisierung zu evaluieren.</em>
</li><br/>
<li>
<b>Deobfuscation of VM based software protection</b><br />
<b>Vortrag auf</b>: SSTIC, Rennes, Frankreich, 2017. [<a href="publications/SSTIC2017-French-Article-desobfuscation_binaire_reconstruction_de_fonctions_virtualisees-salwan_potet_bardin.pdf">Französisches Paper</a>] [<a href="publications/SSTIC2017_Deobfuscation_of_VM_based_software_protection.pdf">Englische Folien</a>] [<a href="https://static.sstic.org/videos2017/SSTIC_2017-06-07_P08.mp4">Französisches Video</a>]<br />
<b>Autoren</b>: Jonathan Salwan, Sébastien Bardin, Marie-Laure Potet<br />
<b>Abstract</b>: <em>In dieser Präsentation beschreiben wir einen Ansatz, der darin besteht, virtualisierungsbasierte Softwareschutzmechanismen automatisch zu analysieren und eine neue Version der Binärdatei ohne solche Schutzmaßnahmen zu rekompilieren. Dieser automatisierte Ansatz stützt sich auf eine symbolische Ausführung, die von einer Taint-Analyse und einigen Konkretisierungsstrategien geleitet wird, sowie auf eine binäre Umschreibung unter Verwendung von LLVM-Übergängen.</em>
</li><br/>
<li>
<b>How Triton can help to reverse virtual machine based software protections</b><br />
<b>Vortrag auf</b>: CSAW SOS, NYC, New York, 2016. [<a href="publications/CSAW2016-SOS-Virtual-Machine-Deobfuscation-RThomas_JSalwan.pdf">Folien</a>]<br />
<b>Autoren</b>: Jonathan Salwan, Romain Thomas<br />
<b>Abstract</b>: <em>Der erste Teil des Vortrags wird eine Einführung in das Triton-Framework sein, um seine Komponenten vorzustellen und zu erklären, wie sie zusammenarbeiten. Der zweite Teil wird dann Demonstrationen enthalten, wie es möglich ist, virtualisierungsbasierte Schutzmechanismen mit Taint-Analyse, symbolischer Ausführung, SMT-Vereinfachungen und LLVM-IR-Optimierungen zu reverse-engineeren.</em>
</li><br/>
<li>
<b>Dynamic Binary Analysis and Obfuscated Codes</b><br />
<b>Vortrag auf</b>: St'Hack, Bordeaux, Frankreich, 2016. [<a href="publications/StHack2016_Dynamic_Binary_Analysis_and_Obfuscated_Codes_RThomas_JSalwan.pdf">Folien</a>]<br />
<b>Autoren</b>: Jonathan Salwan, Romain Thomas<br />
<b>Abstract</b>: <em>In dieser Präsentation werden wir darüber sprechen, wie eine DBA (Dynamic Binary Analysis) einem Reverse Engineer helfen kann, obfuskierte Code zu reverse-engineeren. Wir werden zunächst einige grundlegende Obfuskationstechniken vorstellen und dann zeigen, wie es möglich ist, verschiedene Dinge zu knacken (unter Verwendung unseres Open-Source-DBA-Frameworks - Triton), wie z. B. undurchsichtige Prädikate zu erkennen, das CFG zu rekonstruieren, den ursprünglichen Algorithmus zu finden, sensible Daten zu isolieren und vieles mehr... Dann werden wir mit einer Demo und einigen Worten zu unserer zukünftigen Arbeit abschließen.</em>
</li><br/>
<li>
<b>How Triton may help to analyse obfuscated binaries</b><br />
<b>Veröffentlichung in</b>: MISC Magazin 82, 2015. [<a href="publications/MISC-82_French_Paper_How_Triton_may_help_to_analyse_obfuscated_binaries_RThomas_JSalwan.pdf">Französischer Artikel</a>]<br />
<b>Autoren</b>: Jonathan Salwan, Romain Thomas<br />
<b>Abstract</b>: <em>Binärobfuskation wird verwendet, um das geistige Eigentum von Software zu schützen. Es gibt verschiedene Arten von Obfuskation, aber grob gesagt transformiert sie eine Binärstruktur in eine andere Binärstruktur, wobei dieselbe Semantik erhalten bleibt. Das Ziel der Obfuskation ist es, sicherzustellen, dass die ursprüngliche Information in nutzlosen Informationen "ertränkt" wird, die das Reverse Engineering erschweren. In diesem Artikel werden wir zeigen, wie wir ein obfuskiertes Programm analysieren und einige Obfuskationen mit dem Triton-Framework knacken können.</em>
</li><br/>
<li>
<b>Triton: A Concolic Execution Framework</b><br />
<b>Vortrag auf</b>: SSTIC, Rennes, Frankreich, 2015. [<a href="publications/SSTIC2015_French_Paper_Triton_Framework_dexecution_Concolique_FSaudel_JSalwan.pdf">Französisches Paper</a>] [<a href="publications/SSTIC2015_English_slide_detailed_version_Triton_Concolic_Execution_FrameWork_FSaudel_JSalwan.pdf">Ausführliche englische Folien</a>] <br />
<b>Autoren</b>: Jonathan Salwan, Florent Saudel<br />
<b>Abstract</b>: <em>Dieser Vortrag handelt von der Veröffentlichung von Triton, einem Concolic-Execution-Framework auf Basis von Pin. Es bietet Komponenten wie eine Taint-Engine, eine Engine für dynamische symbolische Ausführung, eine Snapshot-Engine, die Übersetzung von x64-Anweisungen in SMT2, eine Z3-Schnittstelle zur Lösung von Constraints und Python-Bindungen. Basierend auf diesen Komponenten bietet Triton die Möglichkeit, Werkzeuge für die Schwachstellenforschung oder die Unterstützung beim Reverse Engineering zu erstellen.</em>
</li><br/>
<li>
<b>Dynamic Behavior Analysis Using Binary Instrumentation</b><br />
<b>Vortrag auf</b>: St'Hack, Bordeaux, Frankreich, 2015. [<a href="publications/StHack2015_Dynamic_Behavior_Analysis_using_Binary_Instrumentation_Jonathan_Salwan.pdf">Folien</a>]<br />
<b>Autoren</b>: Jonathan Salwan<br />
<b>Abstract</b>: <em>Dieser Vortrag kann als Teil 2 unseres Vortrags auf dem SecurityDay betrachtet werden. Im vorherigen Teil haben wir darüber gesprochen, wie es möglich ist, eine bestimmte Funktion im Speicher mit dem DSE-Ansatz (Dynamic Symbolic Execution) abzudecken. Eine Funktion (oder ihre Zustände) abzudecken bedeutet nicht, alle Schwachstellen zu finden; manche Schwachstellen führen nicht zu einem Programmabsturz. Deshalb müssen wir spezifische Analysen implementieren, um bestimmte Fehler zu finden. Diese Analysen basieren auf der binären Instrumentierung und der Laufzeitverhaltensanalyse des Programms. In diesem Vortrag werden wir sehen, wie es möglich ist, die folgenden Fehlerarten zu finden: Off-by-One, Stack/Heap-Überlauf, Use-After-Free, Format-String und {write, read}-what-where.</em>
</li><br/>
<li>
<b>Covering a function using a Dynamic Symbolic Execution approach</b><br />
<b>Vortrag auf</b>: Security Day, Lille, Frankreich, 2015. [<a href="publications/SecurityDay2015_dynamic_symbolic_execution_Jonathan_Salwan.pdf">Folien</a>]<br />
<b>Autoren</b>: Jonathan Salwan<br />
<b>Abstract</b>: <em>Dieser Vortrag behandelt Binäranalyse und Instrumentierung. Wir werden sehen, wie es möglich ist, eine bestimmte Funktion zu targetieren, den Kontext (Speicher/Register) vor der Funktion zu snapshotieren, die Instrumentierung in eine Zwischendarstellung zu übersetzen, eine Taint-Analyse basierend auf dieser IR anzuwenden, Formeln für eine Dynamic Symbolic Execution (DSE) zu erstellen/zu speichern, einen konkreten Wert zu generieren, um einen bestimmten Pfad zu durchlaufen, den Kontext (Speicher/Register) wiederherzustellen und einen weiteren konkreten Wert zu generieren, um einen anderen Pfad zu durchlaufen, und diesen Vorgang zu wiederholen, bis die Zielfunktion abgedeckt ist.</em>
</li>
</ul>
## Triton zitieren```latex
@inproceedings{SSTIC2015-Saudel-Salwan,
author = {Saudel, Florent and Salwan, Jonathan},
title = {Triton: A Dynamic Symbolic Execution Framework},
booktitle = {Symposium sur la s{\'{e}}curit{\'{e}} des technologies de l'information
et des communications},
series = {SSTIC},
pages = {31--54},
address = {Rennes, France},
month = jun,
year = {2015},
}