Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
qsynthesis — Sintetizzatore Greybox orientato alla deoffuscazione delle istruzioni assembly. | Kitploit
Strumenti/GitHubGitHub/quarkslab/qsynthesis
Analisi StaticaAnalisi Dinamica (Sandboxing)Analisi delle VulnerabilitàAnalisi del CodiceReverse EngineeringUtilità e FrameworkAnalisi di BinariPaper e Ricerca
GitHubquarkslab/qsynthesis

qsynthesis

Sintetizzatore Greybox orientato alla deoffuscazione delle istruzioni assembly.

Vedi Repository
1781711 anno faRevisionato da Kitploit
Sito web

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Qsynthesis

QSynthesis è un'API Python3 per eseguire la sintesi di programmi basata su I/O di espressioni bitvector. Il suo scopo è facilitare la deoffuscazione del codice. L'algoritmo è un approccio greybox che combina sia una sintesi blackbox basata su I/O sia una ricerca whitebox sull'AST per sintetizzare sotto-espressioni (se il nodo radice non può essere sintetizzato).

Questo algoritmo è stato originariamente descritto al workshop accademico BAR:

  • QSynth: A Program Synthesis based Approach for Binary Code Deobfuscation (i benchmark utilizzati sono disponibili: qui)

Il codice è stato rilasciato come parte del seguente talk al Black Hat:

  • Greybox Program Synthesis: A New Approach to Attack Dataflow Obfuscation

Disclaimer: Questo framework è sperimentale e deve essere utilizzato solo per scopi di sperimentazione. Il suo scopo principale è stimolare la ricerca in questo ambito.

Documentazione

L'installazione, gli esempi e la documentazione dell'API sono disponibili nella documentazione dedicata: Documentation

Funzionalità

La sintesi principale si basa sul motore simbolico Triton su cui è costruito l'intero framework. Fornisce le seguenti funzionalità:

  • sintesi di espressioni bitvector
  • possibilità di verificare tramite SMT l'equivalenza semantica delle espressioni sintetizzate
  • possibilità di sintetizzare costanti (se l'espressione codifica una costante)
  • possibilità di migliorare gli oracoli (tabelle precalcolate) nel tempo attraverso un meccanismo di apprendimento
  • possibilità di riassemblare le espressioni sintetizzate in assembly
  • possibilità di servire gli oracoli tramite una REST API per facilitare l'uso della sintesi
  • un plugin IDA che fornisce un'integrazione della sintesi

Avvio rapido

Installazione

Per funzionare, Triton deve essere prima installato: install documentation. Triton non si installa automaticamente in un virtualenv, copialo nel tuo venv oppure usa --system-site-packages quando configuri il tuo venv.

Poi:

$ git clone https://github.com/quarkslab/qsynthesis.git
$ cd qsynthesis
$ pip3 install '.[all]'

L'opzione [all] installerà tutte le dipendenze (vedi la documentazione per un'installazione leggera).

Generazione della tabella

L'algoritmo di sintesi richiede la generazione di tabelle oracolo derivate da una grammatica (un insieme di variabili e operatori). L'installazione di Qsynthesis fornisce l'utility qsynthesis-table-manager che consente di manipolare le tabelle. Il seguente comando genera una tabella con 3 variabili da 64 bit, 5 operatori usando un vettore di 16 input. Limitiamo la generazione a 5 milioni di voci.

$ qsynthesis-table-manager generate -bs 64 --var-num 3 --input-num 16 --random-level 5 --ops AND,NEG,MUL,XOR,NOT --watchdog 80 --limit 5000000 my_oracle_table
Generate Table
Watchdog value: 80.0
Depth 2 (size:3) (Time:0m0.23120s)
Depth 3 (size:21) (Time:0m0.23198s)
Depth 4 (size:574) (Time:0m0.26068s)
Depth 5 (size:400858) (Time:0m21.23231s)
Threshold reached, generation interrupted
Stop required
Depth 5 (size:5000002) (Time:4m52.56009s) [RAM:9.52Gb]

Nota: Il processo di generazione consuma RAM; l'opzione --watchdog consente di impostare una percentuale di RAM oltre la quale la generazione viene interrotta.

Sintetizzare un'espressione bitvector

Possiamo quindi provare a semplificare un'espressione apparentemente offuscata con:

from qsynthesis import SimpleSymExec, TopDownSynthesizer, InputOutputOracleLevelDB

blob = b'UH\x89\xe5H\x89}\xf8H\x89u\xf0H\x89U\xe8H\x89M\xe0L\x89E\xd8H\x8bE' \
       b'\xe0H\xf7\xd0H\x0bE\xf8H\x89\xc2H\x8bE\xe0H\x01\xd0H\x8dH\x01H\x8b' \
       b'E\xf8H+E\xe8H\x8bU\xe8H\xf7\xd2H\x0bU\xf8H\x01\xd2H)\xd0H\x83\xe8' \
       b'\x02H!\xc1H\x8bE\xe0H\xf7\xd0H\x0bE\xf8H\x89\xc2H\x8bE\xe0H\x01\xd0' \
       b'H\x8dp\x01H\x8bE\xf8H+E\xe8H\x8bU\xe8H\xf7\xd2H\x0bU\xf8H\x01\xd2' \
       b'H)\xd0H\x83\xe8\x02H\t\xf0H)\xc1H\x89\xc8H\x83\xe8\x01]\xc3'

# Perform symbolic execution of the instructions
symexec = SimpleSymExec("x86_64")
symexec.initialize_register('rip', 0x40B160)  # arbitrary address
symexec.initialize_register('rsp', 0x800000)  # arbitrary stack
symexec.execute_blob(blob, 0x40B160)
rax = symexec.get_register_ast("rax")  # retrieve rax register expressions

# Load lookup tables
ltm = InputOutputOracleLevelDB.load("my_oracle_table")

# Perform Synthesis of the expression
synthesizer = TopDownSynthesizer(ltm)
synt_rax, simp = synthesizer.synthesize(rax)

print(f"expression: {rax.pp_str}")
print(f"synthesized expression: {synt_rax.pp_str} [{simp}]")

Limitazioni

  • accuratezza della sintesi limitata dall'esaustività delle tabelle precalcolate
  • generazione delle tabelle limitata dal consumo di RAM
  • il riassemblaggio non può coinvolgere variabili di memoria, la destinazione è necessariamente un registro e l'architettura dipende da llvmlite (quindi principalmente x86_64)
  • il codice fa riferimento alla sintesi basata su trace che è disabilitata (poiché il framework sottostante non è ancora open-source)

Autori

  • Robin David (@RobinDavid), Quarkslab

Contributori

Un enorme ringraziamento ai contributori di questa ricerca:

  • Luigi Coniglio
  • Jonathan Salwan
Scarica lo strumento