Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
qsynthesis — Sintetizador Greybox orientado a la desofuscación de instrucciones de ensamblador. | Kitploit
Herramientas/GitHubGitHub/quarkslab/qsynthesis
Análisis EstáticoAnálisis Dinámico (Sandboxing)Análisis de VulnerabilidadesAnálisis de CódigoIngeniería InversaUtilidades y FrameworksAnálisis de BinariosPapers e Investigación
GitHubquarkslab/qsynthesis

qsynthesis

Sintetizador Greybox orientado a la desofuscación de instrucciones de ensamblador.

Ver Repositorio
178171hace 1 añoRevisado por Kitploit
Sitio web

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Qsynthesis

QSynthesis es una API de Python3 para realizar síntesis de programas basada en E/S de expresiones de vectores de bits. Su objetivo es facilitar la desofuscación de código. El algoritmo es un enfoque de caja gris que combina tanto una síntesis basada en E/S de caja negra como una búsqueda AST de caja blanca para sintetizar subexpresiones (si el nodo raíz no puede sintetizarse).

Este algoritmo fue descrito originalmente en el taller académico BAR:

  • QSynth: A Program Synthesis based Approach for Binary Code Deobfuscation (los benchmarks utilizados están disponibles: aquí)

El código ha sido publicado como parte de la siguiente charla de Black Hat:

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

Aviso: Este framework es experimental y solo debe utilizarse con fines de experimentación. Su objetivo principal es estimular la investigación en esta área.

Documentación

La instalación, los ejemplos y la documentación de la API están disponibles en la documentación dedicada: Documentation

Funcionalidades

La síntesis principal se basa en el motor simbólico Triton sobre el cual se construye todo el framework. Proporciona las siguientes funcionalidades:

  • síntesis de expresiones de vectores de bits
  • capacidad de verificar mediante SMT la equivalencia semántica de las expresiones sintetizadas
  • capacidad de sintetizar constantes (si la expresión codifica una constante)
  • capacidad de mejorar los oráculos (tablas precalculadas) con el tiempo mediante un mecanismo de aprendizaje
  • capacidad de reensamblar la expresión sintetizada de vuelta a ensamblador
  • capacidad de servir oráculos a través de una API REST para facilitar el uso de la síntesis
  • un plugin de IDA que proporciona una integración de la síntesis

Inicio rápido

Instalación

Para que funcione, primero debe instalarse Triton: install documentation. Triton no se instala automáticamente en un virtualenv, cópialo en tu venv o usa --system-site-packages al configurar tu venv.

Luego:

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

El [all] instalará todas las dependencias (consulta la documentación para una instalación ligera).

Generación de tablas

El algoritmo de síntesis requiere generar tablas de oráculos derivadas de una gramática (un conjunto de variables y operadores). La instalación de Qsynthesis proporciona la utilidad qsynthesis-table-manager que permite manipular tablas. El siguiente comando genera una tabla con 3 variables de 64 bits, 5 operadores usando un vector de 16 entradas. Limitamos la generación a 5 millones de entradas.

$ 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: El proceso de generación consume RAM, el --watchdog permite establecer un porcentaje de la RAM por encima del cual se interrumpe la generación.

Sintetizar una expresión de vector de bits

Entonces podemos intentar simplificar una expresión aparentemente ofuscada 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}]")

Limitaciones

  • la precisión de la síntesis está limitada por la exhaustividad de las tablas precalculadas
  • la generación de tablas está limitada por el consumo de RAM
  • el reensamblado no puede involucrar variables de memoria, el destino es necesariamente un registro y la arquitectura depende de llvmlite (por lo tanto, principalmente x86_64)
  • el código hace referencia a la síntesis basada en trazas que está deshabilitada (ya que el framework subyacente aún no es de código abierto)

Autores

  • Robin David (@RobinDavid), Quarkslab

Colaboradores

Un enorme agradecimiento a los colaboradores de esta investigación:

  • Luigi Coniglio
  • Jonathan Salwan
Descargar herramienta