Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
qsynthesis — Sintetizador Greybox voltado para a desobfuscação de instruções de assembly. | Kitploit
Ferramentas/GitHubGitHub/quarkslab/qsynthesis
Análise EstáticaAnálise Dinâmica (Sandboxing)Análise de VulnerabilidadesAnálise de CódigoEngenharia ReversaUtilitários e FrameworksAnálise de BináriosPapers e Pesquisa
GitHubquarkslab/qsynthesis

qsynthesis

Sintetizador Greybox voltado para a desobfuscação de instruções de assembly.

Ver Repositório
178171há 1 anoRevisado pelo Kitploit
Site

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Qsynthesis

QSynthesis é uma API Python3 para realizar síntese de programas baseada em I/O de expressões de bitvector. Seu objetivo é facilitar a desobfuscação de código. O algoritmo é uma abordagem greybox que combina tanto uma síntese blackbox baseada em I/O quanto uma busca whitebox na AST para sintetizar subexpressões (se o nó raiz não puder ser sintetizado).

Este algoritmo foi originalmente descrito no workshop acadêmico BAR:

  • QSynth: A Program Synthesis based Approach for Binary Code Deobfuscation (os benchmarks utilizados estão disponíveis: aqui)

O código foi disponibilizado como parte da seguinte palestra da Black Hat:

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

Aviso: Este framework é experimental e deve ser usado apenas para fins de experimentação. Seu principal objetivo é estimular a pesquisa nesta área.

Documentação

A instalação, exemplos e documentação da API estão disponíveis na documentação dedicada: Documentation

Funcionalidades

O núcleo da síntese é baseado no motor simbólico Triton, sobre o qual todo o framework é construído. Ele fornece as seguintes funcionalidades:

  • síntese de expressões de bitvector
  • capacidade de verificar via SMT a equivalência semântica de expressões sintetizadas
  • capacidade de sintetizar constantes (se a expressão codificar uma constante)
  • capacidade de melhorar oráculos (tabelas pré-computadas) ao longo do tempo através de um mecanismo de aprendizado
  • capacidade de remontar expressões sintetizadas de volta para assembly
  • capacidade de servir oráculos através de uma API REST para facilitar o uso da síntese
  • um plugin para IDA que fornece uma integração da síntese

Início rápido

Instalação

Para funcionar, o Triton primeiro precisa ser instalado: documentação de instalação. O Triton não se instala automaticamente em um virtualenv; copie-o para o seu venv ou use --system-site-packages ao configurar seu venv.

Em seguida:

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

O [all] instalará todas as dependências (consulte a documentação para uma instalação leve).

Geração de tabelas

O algoritmo de síntese requer a geração de tabelas de oráculo derivadas de uma gramática (um conjunto de variáveis e operadores). A instalação do Qsynthesis fornece o utilitário qsynthesis-table-manager que permite manipular tabelas. O comando a seguir gera uma tabela com 3 variáveis de 64 bits, 5 operadores usando um vetor de 16 entradas. Limitamos a geração a 5 milhões 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: O processo de geração consome RAM; o --watchdog permite definir uma porcentagem da RAM acima da qual a geração é interrompida.

Sintetizando uma expressão de bitvector

Podemos então tentar simplificar uma expressão aparentemente ofuscada com:

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}]")

Limitações

  • precisão da síntese limitada pela exaustividade das tabelas pré-computadas
  • geração de tabelas limitada pelo consumo de RAM
  • a remontagem não pode envolver variável de memória, o destino é necessariamente um registrador e a arquitetura depende do llvmlite (portanto, principalmente x86_64)
  • o código faz referência à síntese baseada em trace, que está desabilitada (já que o framework subjacente ainda não é open-source)

Autores

  • Robin David (@RobinDavid), Quarkslab

Contribuidores

Agradecimentos enormes aos contribuidores desta pesquisa:

  • Luigi Coniglio
  • Jonathan Salwan
Baixar ferramenta