
Triton è una libreria di analisi binaria dinamica. Costruisci i tuoi strumenti di analisi dei programmi, automatizza il reverse engineering, esegui la verifica del software o semplicemente emula codice.

Triton è una libreria di analisi binaria dinamica. Fornisce componenti interni che ti permettono di costruire i tuoi strumenti di analisi dei programmi, automatizzare il reverse engineering, eseguire la verifica del software o semplicemente emulare codice.
Poiché Triton è una specie di progetto part-time, per favore, non incolparci se non è completamente affidabile. Aprire issue o pull request è sempre meglio che trollare =). Comunque, puoi seguire lo sviluppo su Twitter @qb_triton.
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'
## Installazione tramite pip
Triton può essere installato usando `pip`:```console
pip install triton-library
Triton dipende dalle seguenti dipendenze:```
### Linux e MacOS```console
$ git clone https://github.com/JonathanSalwan/Triton
$ cd Triton
$ mkdir build ; cd build
$ cmake ..
$ make -j3
$ sudo make install
Per impostazione predefinita, LLVM e Bitwuzla non vengono compilati. Se vuoi godere appieno della potenza di Triton, la compilazione cmake è:```console $ cmake -DLLVM_INTERFACE=ON -DCMAKE_PREFIX_PATH=$(llvm-config --prefix) -DBITWUZLA_INTERFACE=ON ..
#### Nota per MacOS M1:
Nel caso in cui si riscontrino errori di compilazione come:```
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
Prova a specificare PYTHON_EXECUTABLE, PYTHON_LIBRARIES e PYTHON_INCLUDE_DIRS per la tua versione specifica di Python:```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/
..
Puoi ottenere queste informazioni da questo snippet:```python
from sysconfig import get_paths
info = get_paths()
print(info)
Se l'auto completamento di Python non funziona, segui questi passaggi:
/usr/lib/python3.13/).Il tuo IDE deve supportare il parsing dei file .pyi.
Puoi utilizzare cmake per generare il file .sln di libTriton.```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" ..
È possibile utilizzare setup.py per generare la versione debug di triton.pyd su Windows.```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*)
Tuttavia, se preferisci scaricare direttamente la libreria precompilata, dai un'occhiata ai nostri artefatti di AppVeyor. Nota che se utilizzi gli artefatti di AppVeyor, probabilmente devi installare i pacchetti Visual C++ Redistributable per Visual Studio 2012.
La porta di Triton in vcpkg è tenuta aggiornata dai membri del team Microsoft e dai contributori della community. L'url di vcpkg è: https://github.com/Microsoft/vcpkg. Puoi scaricare e installare Triton usando il gestore di dipendenze vcpkg:```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
Se la versione non è aggiornata, per favore [crea un issue o una pull request](https://github.com/Microsoft/vcpkg) sul repository vcpkg.
# Contributors
* [**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
* [**And many more**](https://github.com/JonathanSalwan/Triton/graphs/contributors)
## Hanno già usato Triton
### Strumenti
* [Exrop](https://github.com/d4em0n/exrop): Generazione automatica di ROPChain.
* [Pimp](https://github.com/kamou/pimp): Plugin R2 basato su Triton per esecuzione concolica e controllo totale.
* [Ponce](https://github.com/illera88/Ponce): Vincitore del contest plugin IDA 2016! Esecuzione simbolica a un solo clic!
* [QSynthesis](https://github.com/quarkslab/qsynthesis): Sintetizzatore Greybox orientato alla deoffuscazione delle istruzioni assembly.
* [TritonDSE](https://github.com/quarkslab/tritondse): Libreria DSE basata su Triton con capacità di caricamento ed esplorazione.
* [Titan](https://github.com/archercreat/titan): Titan è un devirtualizzatore VMProtect che utilizza Triton.
### Articoli e conferenze<ul dir="auto">
<li>
<b>Sydr-Fuzz: Hybrid Fuzzing Continuo e Analisi Dinamica per il Ciclo di Vita dello Sviluppo della Sicurezza</b><br />
<b>Talk at</b>: Ivannikov ISP RAS Open Conference, Moscow, Russia, 2022. [<a href="publications/ISPOPEN2022-sydr-fuzz.pdf">paper</a>] [<a href="publications/ISPOPEN2022-slide-sydr-fuzz-vishnyakov.pdf">slide</a>]<br />
<b>Autori</b>: Vishnyakov A., Kuts D., Logunova V., Parygina D., Kobrin E., Savidov G., Fedotov A.<br />
<b>Abstract</b>: <em>Oggigiorno i framework di analisi dinamica automatizzata per
test continui sono molto richiesti per garantire la sicurezza del software e soddisfare i
requisiti del ciclo di vita dello sviluppo della sicurezza (SDL). L'efficienza della caccia ai bug di sicurezza
delle tecniche di hybrid fuzzing all'avanguardia supera ampiamente
i fuzzing guidati dalla copertura. Proponiamo una pipeline di analisi dinamica
migliorata per sfruttare la produttività del rilevamento automatico dei bug basato su hybrid
fuzzing. Implementiamo la pipeline proposta nel toolset di fuzzing continuo
Sydr-Fuzz, basato sull'orchestratore di hybrid fuzzing, che integra il nostro strumento DSE
Sydr con libFuzzer e AFL++. Sydr-Fuzz incorpora anche controllori di predicati di sicurezza,
lo strumento di triage dei crash Casr e utility per la minimizzazione del corpus
e la raccolta della copertura. Il benchmarking del nostro hybrid fuzzer
rispetto ad altre soluzioni all'avanguardia dimostra la sua superiorità
rispetto ai fuzzer guidati dalla copertura, rimanendo allo stesso livello degli avanzati
hybrid fuzzer. Inoltre, approviamo la rilevanza del nostro approccio
scoprendo 85 nuovi difetti software reali all'interno del progetto OSS-Sydr-Fuzz.
Infine, apriamo il codice sorgente di Casr alla comunità per facilitare l'esame di
crash esistenti.</em>
</li><br/>
<li>
<b>Strong Optimistic Solving for Dynamic Symbolic Execution</b><br />
<b>Talk at</b>: Ivannikov Memorial Workshop, Kazan, Russia, 2022. [<a href="publications/IVMEM2022-strong-optimistic-parygina.pdf">paper</a>] [<a href="publications/IVMEM2022-slide-strong-optimistic-parygina.pdf">slide</a>]<br />
<b>Autori</b>: Parygina D., Vishnyakov A., Fedotov A.<br />
<b>Abstract</b>: <em>L'esecuzione simbolica dinamica (DSE) è un metodo efficace
per il test automatico dei programmi e il rilevamento dei bug. Aumenta la
copertura del codice esplorando rami complessi durante l'hybrid fuzzing. Gli strumenti DSE
invertono i rami lungo un percorso di esecuzione e aiutano il fuzzer a esaminare
parti del programma precedentemente non disponibili. La DSE affronta spesso problemi di sovra- e
sottovincolo. Il primo porta a una significativa complicazione dell'analisi, mentre il
secondo causa un'esecuzione simbolica imprecisa.
Proponiamo un metodo di risoluzione forte ottimistico che elimina i vincoli del predicato di percorso
irrilevanti per l'inversione del ramo target. Eliminiamo quei vincoli simbolici
da cui il ramo target non dipende a livello di controllo. Inoltre, gestiamo
separatamente i rami simbolici che hanno istruzioni di trasferimento del controllo annidate
che passano il controllo al di là dell'ambito del ramo genitore, ad esempio return,
goto, break, ecc. Implementiamo il metodo proposto nel nostro strumento di esecuzione simbolica
dinamica Sydr.
Valutiamo la strategia forte ottimistica, la strategia ottimistica che
contiene solo la negazione dell'ultimo vincolo, e la loro combinazione. I risultati
mostrano che la combinazione delle strategie aiuta ad aumentare sia la copertura del codice che
il numero medio di rami correttamente invertiti al minuto. È ottimale
applicare entrambe le strategie insieme in contrasto con altre configurazioni.</em>
</li><br/>
<li>
<b>Greybox Program Synthesis: A New Approach to Attack Dataflow Obfuscation</b><br />
<b>Talk at</b>: Blackhat USA, Las Vegas, Nevada, 2021. [<a href="publications/BHUSA2021-David-Greybox-Program-Synthesis.pdf">slide</a>]<br />
<b>Autori</b>: Robin David<br />
<b>Abstract</b>: <em>Questo talk presenta i più recenti progressi nella sintesi di programmi applicata alla deoffuscazione. Mira a demistificare questa tecnica di analisi,
mostrando come può essere messa in azione sull'offuscazione. In particolare, l'implementazione Qsynthesis rilasciata per questo talk mostra un flusso di lavoro completo
end-to-end per deoffuscare istruzioni assembly in istruzioni ottimizzate (deoffuscate) riassemblate nel binario.</em>
</li><br/>
<li>
<b>Dal codice sorgente al test-case di crash attraverso l'automazione del test software</b><br />
<b>Talk at</b>: C&ESAR, Rennes, France, 2021. [<a href="publications/CESAR2021_robin-david-paper.pdf">paper</a>] [<a href="publications/CESAR2021_robin-david-slide.pdf">slide</a>]<br />
<b>Autori</b>: Robin David, Jonathan Salwan, Justin Bourroux<br />
<b>Abstract</b>: <em>Questo articolo presenta un approccio che automatizza il processo di test software dal codice sorgente al test dinamico del programma compilato. Più specificamente, da un
rapporto di analisi statica che indica allarmi su righe di codice sorgente, consente di testare per coprire dinamicamente queste righe e verificare opportunisticamente se possono o meno innescare
un crash. Il risultato è un corpus di test che permette di coprire gli allarmi e di innescarli se si rivelano veri positivi. Questo articolo discute la metodologia impiegata per tracciare
gli allarmi nel binario compilato, il processo di selezione dei motori di test e i risultati ottenuti su un'implementazione dello stack TCP/IP per sistemi embedded e IoT.</em>
</li><br/>
<li>
<b>Predicati di Sicurezza Simbolici: Caccia alle Debolezze del Programma</b><br />
<b>Talk at</b>: Ivannikov ISP RAS Open Conference, Moscow, Russia, 2021. [<a href="publications/ISPOPEN2021-security-predicates-vishnyakov.pdf">paper</a>] [<a href="publications/ISPOPEN2021-slide-security-predicates-vishnyakov.pdf">slide</a>]<br />
<b>Autori</b>: A.Vishnyakov, V.Logunova, E.Kobrin, D.Kuts, D.Parygina, A.Fedotov<br />
<b>Abstract</b>: <em>L'esecuzione simbolica dinamica (DSE) è un potente metodo per
l'esplorazione dei percorsi durante l'hybrid fuzzing e il rilevamento automatico dei bug. Proponiamo
predicati di sicurezza per rilevare efficacemente comportamento indefinito ed errori di accesso alla memoria.
Inizialmente, eseguiamo simbolicamente il programma su percorsi che non innescano alcun errore (l'hybrid fuzzing può esplorare questi percorsi). Poi
costruiamo un predicato di sicurezza simbolico per verificare qualche condizione di errore. Così,
possiamo modificare il flusso di dati del programma per provocare dereferenze di puntatore nullo, divisioni
per zero, accessi fuori dai limiti o overflow di interi. A differenza dell'analisi
statica, l'esecuzione simbolica dinamica non solo segnala errori ma genera anche nuovi dati di input per riprodurli.
Inoltre, introduciamo la modellazione della semantica delle funzioni per funzioni comuni della libreria standard C/C++. Miriamo a modellare
il flusso di controllo all'interno di una funzione con una singola formula simbolica. Questo aiuta
il rilevamento dei bug, accelera l'esplorazione dei percorsi e supera i sovra-vincoli nel
predicato di percorso. Implementiamo le tecniche proposte nel nostro strumento di esecuzione simbolica
dinamica Sydr. Così, utilizziamo metodi potenti da Sydr come lo slicing del predicato di percorso
che elimina i vincoli irrilevanti.
Presentiamo Juliet Dynamic per misurare l'accuratezza degli strumenti di rilevamento dinamico dei bug. Il
sistema di test verifica anche che gli input generati inneschino i sanitizer. Valutiamo
l'accuratezza di Sydr per 11 CWE dalla suite di test Juliet. Sydr mostra un'accuratezza complessiva del 95,59%.
Mettiamo a disposizione pubblicamente gli artefatti di valutazione di Sydr per facilitare la riproducibilità dei risultati.</em>
</li><br/>
<li>
<b>Verso il Ragionamento sui Puntatori Simbolici nell'Esecuzione Simbolica Dinamica</b><br />
<b>Talk at</b>: Ivannikov Memorial Workshop, Nizhny Novgorod, Russia, 2021. [<a href="publications/IVMEM2021-symbolic-pointers-kuts.pdf">paper</a>] [<a href="publications/IVMEM2021-slide-symbolic-pointers-kuts.pdf">slide</a>]<br />
<b>Autori</b>: Daniil Kuts<br />
<b>Abstract</b>: <em>L'esecuzione simbolica dinamica è una tecnica ampiamente utilizzata per
il test automatico del software, progettata per l'esplorazione dei percorsi di esecuzione e il
rilevamento degli errori del programma. Un approccio ibrido è recentemente diventato diffuso,
quando l'obiettivo principale dell'esecuzione simbolica è aiutare il fuzzer ad aumentare la copertura del programma. Più rami l'esecutore simbolico può invertire, più è utile
per il fuzzer. Il flusso di controllo di un programma spesso dipende dai valori di memoria, che vengono
ottenuti calcolando indici di indirizzo dall'input dell'utente. Tuttavia, la maggior parte degli strumenti DSE
non supporta tali dipendenze, quindi perdono alcuni rami del programma desiderati. Implementiamo
il ragionamento sugli indirizzi simbolici nelle letture di memoria nel nostro strumento di esecuzione simbolica
dinamica Sydr. Le possibili regioni di accesso alla memoria sono determinate
analizzando le espressioni simboliche dell'indirizzo di memoria o mediante ricerca binaria con
SMT-solver. Proponiamo una tecnica di linearizzazione migliorata per modellare gli accessi
alla memoria. Diversi metodi di modellazione della memoria vengono confrontati su un insieme di
programmi. La nostra valutazione mostra che la gestione degli indirizzi simbolici permette di
scoprire nuovi rami simbolici e aumentare la copertura del programma.</em>
</li><br/>
<li>
<b>QSynth: Un Approccio basato sulla Sintesi di Programmi per la Deoffuscazione del Codice Binario</b><br />
<b>Talk at</b>: BAR, San Diego, California, 2020. [<a href="publications/BAR2020-qsynth-robin-david.pdf">paper</a>]<br />
<b>Autori</b>: Robin David, Luigi Coniglio, Mariano Ceccato<br />
<b>Abstract</b>: <em>Presentiamo un approccio generico che sfrutta sia la DSE che la sintesi di programmi per sintetizzare con successo programmi offuscati con Mixed-Boolean-Arithmetic, Data-Encoding
o Virtualizzazione. L'algoritmo di sintesi proposto è una primitiva di sintesi enumerativa offline guidata da una ricerca breadth-first top-down. Mostriamo la sua efficacia
contro un offuscatore all'avanguardia e la sua scalabilità poiché supera altri approcci simili basati sulla sintesi. Mostriamo anche la sua efficacia in presenza di
offuscazione composita (combinazione di varie tecniche). Questo lavoro in corso illumina l'efficacia della sintesi nel colpire certi tipi di offuscazione e
apre la strada ad algoritmi più robusti e strategie di semplificazione.</em>
</li><br/>
<li>
<b>Sydr: Esecuzione Simbolica Dinamica all'Avanguardia</b><br />
<b>Talk at</b>: Ivannikov ISP RAS Open Conference, Moscow, Russia, 2020. [<a href="publications/ISPRAS2020-sydr.pdf">paper</a>] [<a href="publications/ISPOPEN2020-slide-sydr-vishnyakov.pdf">slide</a>] [<a href="https://www.ispras.ru/conf/2020/video/compiler-technology-11-december.mp4#t=6021">video</a>]<br />
<b>Autori</b>: A.Vishnyakov, A.Fedotov, D.Kuts, A.Novikov, D.Parygina, E.Kobrin, V.Logunova, P.Belecky, S.Kurmangaleev<br />
<b>Abstract</b>: <em>L'esecuzione simbolica dinamica (DSE) ha un'enorme quantità di applicazioni nella sicurezza informatica (fuzzing, scoperta di vulnerabilità, reverse engineering, ecc.). Proponiamo
diversi miglioramenti delle prestazioni e dell'accuratezza per l'esecuzione simbolica dinamica. Saltare le istruzioni non simboliche permette di costruire un predicato di percorso 1,2–3,5 volte più velocemente.
Il motore simbolico semplifica le formule durante l'esecuzione simbolica. Lo slicing del predicato di
percorso elimina i congiunti irrilevanti dalle richieste del risolutore. Gestiamo ogni tabella di salto
(istruzione switch) come rami multipli e descriviamo il metodo per l'esecuzione simbolica di programmi multi-thread. Le soluzioni proposte sono state implementate nello strumento Sydr.
Sydr esegue l'inversione dei rami nel predicato di percorso. Sydr combina lo strumento di instrumentazione binaria dinamica DynamoRIO con il motore simbolico Triton.</em>
</li><br/>
<li>
<b>Deoffuscazione Simbolica: Dal Codice Virtualizzato di Nuovo all'Originale</b><br />
<b>Talk at</b>: DIMVA, Paris-Saclay, France, 2018. [<a href="publications/DIMVA2018-deobfuscation-salwan-bardin-potet.pdf">paper</a>] [<a href="publications/DIMVA2018-slide-deobfuscation-salwan-bardin-potet.pdf">slide</a>]<br />
<b>Autori</b>: Jonathan Salwan, Sébastien Bardin, Marie-Laure Potet<br />
<b>Abstract</b>: <em>La protezione del software ha assunto un ruolo importante nell'ultimo decennio per proteggere il software legittimo dal reverse engineering o dalla manomissione.
La virtualizzazione è considerata una delle migliori difese contro tali attacchi. Presentiamo un approccio generico basato su esplorazione simbolica del percorso, taint e
ricompilazione che consente di recuperare, da un codice virtualizzato, un codice devirtualizzato semanticamente identico a quello originale e di dimensioni simili. Definiamo criteri
e metriche per valutare la rilevanza dei risultati deoffuscati in termini di correttezza e precisione. Infine proponiamo un setup open-source che consente di valutare
l'approccio proposto contro diverse forme di virtualizzazione.</em>
</li><br/>
<li>
<b>Deoffuscazione della protezione software basata su VM</b><br />
<b>Talk at</b>: SSTIC, Rennes, France, 2017. [<a href="publications/SSTIC2017-French-Article-desobfuscation_binaire_reconstruction_de_fonctions_virtualisees-salwan_potet_bardin.pdf">paper francese</a>] [<a href="publications/SSTIC2017_Deobfuscation_of_VM_based_software_protection.pdf">slide inglese</a>] [<a href="https://static.sstic.org/videos2017/SSTIC_2017-06-07_P08.mp4">video francese</a>]<br />
<b>Autori</b>: Jonathan Salwan, Sébastien Bardin, Marie-Laure Potet<br />
<b>Abstract</b>: <em>In questa presentazione descriviamo un approccio che consiste nell'analizzare automaticamente le protezioni software basate su macchina virtuale e che ricompila una nuova
versione del binario senza tali protezioni. Questo approccio automatizzato si basa su un'esecuzione simbolica guidata da un'analisi del taint e alcune politiche di concretizzazione, quindi
su una riscrittura binaria utilizzando la transizione LLVM.</em>
</li><br/>
<li>
<b>Come Triton può aiutare a fare reverse engineering delle protezioni software basate su macchina virtuale</b><br />
<b>Talk at</b>: CSAW SOS, NYC, New York, 2016. [<a href="publications/CSAW2016-SOS-Virtual-Machine-Deobfuscation-RThomas_JSalwan.pdf">slide</a>]<br />
<b>Autori</b>: Jonathan Salwan, Romain Thomas<br />
<b>Abstract</b>: <em>La prima parte del talk sarà un'introduzione al framework Triton per esporre i suoi componenti e spiegare come lavorano insieme.
Poi, la seconda parte includerà dimostrazioni su come è possibile fare reverse engineering delle protezioni basate su macchina virtuale utilizzando analisi del taint, esecuzione simbolica, semplificazioni
SMT e ottimizzazioni LLVM-IR.</em>
</li><br/>
<li>
<b>Analisi Binaria Dinamica e Codici Offuscati</b><br />
<b>Talk at</b>: St'Hack, Bordeaux, France, 2016. [<a href="publications/StHack2016_Dynamic_Binary_Analysis_and_Obfuscated_Codes_RThomas_JSalwan.pdf">slide</a>]<br />
<b>Autori</b>: Jonathan Salwan, Romain Thomas<br />
<b>Abstract</b>: <em>In questa presentazione parleremo di come un DBA (Analisi Binaria Dinamica) può aiutare un reverse engineer a fare reverse engineering del codice offuscato. Per prima cosa
introdurremo alcune tecniche di base di offuscazione e poi esporremo come sia possibile rompere alcune cose (usando il nostro framework DBA open-source - Triton) come rilevare
predicati opachi, ricostruire il CFG, trovare l'algoritmo originale, isolare dati sensibili e molto altro... Poi, concluderemo con una demo e qualche parola sul nostro lavoro futuro.</em>
</li><br/>
<li>
<b>Come Triton può aiutare ad analizzare binari offuscati</b><br />
<b>Pubblicazione su</b>: MISC magazine 82, 2015. [<a href="publications/MISC-82_French_Paper_How_Triton_may_help_to_analyse_obfuscated_binaries_RThomas_JSalwan.pdf">articolo francese</a>]<br />
<b>Autori</b>: Jonathan Salwan, Romain Thomas<br />
<b>Abstract</b>: <em>L'offuscazione binaria viene utilizzata per proteggere la proprietà intellettuale del software. Esistono diversi tipi di offuscazione ma, in generale, trasforma una struttura
binaria in un'altra struttura binaria preservando la stessa semantica. Lo scopo dell'offuscazione è garantire che l'informazione originale sia "annegata" in informazioni inutili
che renderanno più difficile il reverse engineering. In questo articolo mostreremo come possiamo analizzare un programma offuscato e rompere alcune offuscazioni usando il framework Triton.</em>
</li><br/>
<li>
<b>Triton: Un Framework di Esecuzione Concolica</b><br />
<b>Talk at</b>: SSTIC, Rennes, France, 2015. [<a href="publications/SSTIC2015_French_Paper_Triton_Framework_dexecution_Concolique_FSaudel_JSalwan.pdf">paper francese</a>] [<a href="publications/SSTIC2015_English_slide_detailed_version_Triton_Concolic_Execution_FrameWork_FSaudel_JSalwan.pdf">slide inglese dettagliato</a>] <br />
<b>Autori</b>: Jonathan Salwan, Florent Saudel<br />
<b>Abstract</b>: <em>Questo talk riguarda il rilascio di Triton, un framework di esecuzione concolica basato su Pin. Fornisce componenti come un motore di taint, un motore di esecuzione simbolica dinamica,
un motore di snapshot, traduzione delle istruzioni x64 in SMT2, un'interfaccia Z3 per risolvere vincoli e binding Python. Basato su questi componenti, Triton offre la possibilità
di costruire strumenti per la ricerca di vulnerabilità o assistenza al reverse engineering.</em>
</li><br/>
<li>
<b>Analisi del Comportamento Dinamico tramite Instrumentazione Binaria</b><br />
<b>Talk at</b>: St'Hack, Bordeaux, France, 2015. [<a href="publications/StHack2015_Dynamic_Behavior_Analysis_using_Binary_Instrumentation_Jonathan_Salwan.pdf">slide</a>]<br />
<b>Autori</b>: Jonathan Salwan<br />
<b>Abstract</b>: <em>Questo talk può essere considerato come la parte 2 del nostro talk a SecurityDay. Nella parte precedente, abbiamo parlato di come fosse possibile coprire una funzione target
in memoria usando l'approccio DSE (Esecuzione Simbolica Dinamica). Coprire una funzione (o i suoi stati) non significa trovare tutte le vulnerabilità, alcune vulnerabilità non causano il crash del programma.
Ecco perché dobbiamo implementare analisi specifiche per trovare bug specifici. Queste analisi si basano sull'instrumentazione binaria e sull'analisi del comportamento runtime del programma. In questo
talk, vedremo come è possibile trovare questi tipi di bug: off-by-one, stack / heap overflow, use-after-free, format string e {write, read}-what-where.</em>
</li><br/>
<li>
<b>Coprire una funzione utilizzando un approccio di Esecuzione Simbolica Dinamica</b><br />
<b>Talk at</b>: Security Day, Lille, France, 2015. [<a href="publications/SecurityDay2015_dynamic_symbolic_execution_Jonathan_Salwan.pdf">slide</a>]<br />
<b>Autori</b>: Jonathan Salwan<br />
<b>Abstract</b>: <em>Questo talk riguarda l'analisi binaria e l'instrumentazione. Vedremo come è possibile individuare una funzione specifica, fare snapshot del contesto memoria/registri prima della
funzione, tradurre l'instrumentazione in una rappresentazione intermedia, applicare un'analisi del taint basata su questa IR, costruire/mantenere formule per un'Esecuzione Simbolica Dinamica (DSE), generare
un valore concreto per percorrere un percorso specifico, ripristinare il contesto memoria/registri e generare un altro valore concreto per percorrere un altro percorso, poi ripetere questa operazione fino a
quando la funzione target è coperta.</em>
</li>
</ul>
## Cita Triton```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},
}