Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Binvariants — Framework de fuzzing guiado por invariantes a nível de registo para binários de código fechado, aproveitando prováveis violações de invariantes para descobrir crashes e bugs em executáveis binários. | Kitploit
Ferramentas/GitHubGitHub/futureslab/binvariants
Análise de VulnerabilidadesExploraçãoFuzzingAnálise de Binários
GitHubfutureslab/binvariants

Binvariants

Framework de fuzzing guiado por invariantes a nível de registo para binários de código fechado, aproveitando prováveis violações de invariantes para descobrir crashes e bugs em executáveis binários.

Ver Repositório
51há 1 mêsAinda não revisado

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

Binvariants: Fuzzing Guiado por Invariantes em Nível de Registro para Binários

Logotipo do Binvariants

Este repositório fornece o código-fonte para o Binvariants: um protótipo de framework de fuzzing que utiliza violações de invariantes prováveis em nível de registro para fuzzing de binários.

Este trabalho é apresentado em nosso artigo Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants, a ser publicado na ACM International Conference on the Foundations of Software Engineering (FSE’26) de 2026.

  • Instalando o Binvariants
  • Usando o Binvariants
  • Notas Adicionais
  • Galeria de Bugs


Fluxo de trabalho do Binvariants
Fluxo de trabalho do Binvariants

Citação deste repositório: @inproceedings{yang:binvariants, title = {Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants}, author = {Zao Yang and Stefan Nagy}, year = {2026}, issue_date = {July 2026}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, volume = {3}, number = {FSE}, journal = {Proc. ACM Softw. Eng.}}
Desenvolvedores:Zao Yang ([email protected]) e Stefan Nagy ([email protected])
Licença:Licença MIT
Aviso legal:Este software é fornecido "como está", sem nenhuma garantia.

Instalando o Binvariants

O Binvariants é construído sobre o AFL++ e o QEMU-AFL. Instale as dependências exigidas por esses projetos antes de configurar o Binvariants:

root@kitploit:~
sudo apt-get update
sudo apt-get install -y build-essential python3-dev automake cmake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools cargo libgtk-3-dev
# tente instalar o llvm-18 e instale o padrão da distribuição se falhar
sudo apt-get install -y lld-18 llvm-18 llvm-18-dev clang-18 || sudo apt-get install -y lld llvm llvm-dev clang
sudo apt-get install -y gcc-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-plugin-dev libstdc++-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-dev
sudo apt-get install -y meson ninja-build # para modo QEMU

O Binvariants inclui dois componentes:

  • 1-Invariant_Learner/
  • 2-Fuzzer/

Para compilar cada um, navegue até o diretório correspondente e execute os seguintes comandos:

root@kitploit:~
./1_patch.sh
./2_build.sh

Usando o Binvariants

Example/ contém scripts de exemplo e casos de teste para usar o Binvariants no fuzzing do binário nconvert. Você pode modificar os scripts para fazer fuzzing em outros binários.

Configuração

Antes de usar o Binvariants, desabilite o ASLR, pois ele precisa de endereços de blocos básicos consistentes entre o aprendizado de invariantes e o fuzzing:

root@kitploit:~
sudo sysctl -w kernel.randomize_va_space=0

Aprendendo Invariantes Prováveis em Nível de Registro (RLIs)

Para aprender invariantes, execute:

root@kitploit:~
./Example/1-learn_invs.sh [Binvariants_Root]

Os RLIs inferidos serão salvos no diretório especificado por BINV_TRACES_DIR em 1-learn_invs.sh, com o nome: [PROGRAM]_trace_qemu_invs.

Fuzzing com RLIs

Para iniciar o fuzzing com o Binvariants, execute:

root@kitploit:~
./Example/2-fuzz.sh [Binvariants_Root] [Fuzz_Time] [Trial_Number]

Por exemplo, execute a 1ª tentativa de uma campanha de fuzzing de 48 horas a partir do diretório raiz do Binvariants:

root@kitploit:~
./Example/2-fuzz.sh $PWD 48h 1

Notas Adicionais

Abaixo estão possíveis melhorias para o Binvariants.

Aprendendo Invariantes Adaptativamente

Atualmente, o Binvariants aprende invariantes antes do fuzzing e depois executa o fuzzing separadamente. Uma melhoria possível é aprender invariantes durante o fuzzing e atualizá-los à medida que violações ocorrem, permitindo que o feedback evolua com o tempo.

Possíveis considerações de design:

  1. Se os invariantes forem atualizados durante a execução de um caso de teste que posteriormente falhar ou exceder o tempo limite, a atualização pode precisar ser revertida. Uma solução prática é aplicar as atualizações a uma cópia dos invariantes e confirmá-las apenas se o caso de teste for concluído normalmente (ou seja, FSRV_RUN_OK).
  2. À medida que o fuzzing é executado e os invariantes são atualizados, as violações naturalmente se tornarão menos frequentes. Isso corre o risco de o AFL++ selecionar repetidamente casos de teste de estágios iniciais (que disparam mais violações, mas representam estados do programa menos evoluídos). Um ajuste de weight/perf_score/top_rated no lado do AFL++ pode ser necessário para garantir que casos de teste posteriores e mais representativos sejam selecionados.

Invariantes entre Blocos Básicos

O Binvariants atualmente foca em invariantes de bloco único. Uma melhoria potencial é suportar invariantes entre blocos. Isso exigiria novas estruturas de dados para rastrear valores de registros através dos limites dos blocos, bem como instrumentação adicional para verificar violações quando o controle é transferido entre blocos.

Galeria de Bugs

Se você encontrar outros bugs usando o Binvariants, por favor nos avise!

Agradecimentos

Este material é baseado em trabalho apoiado pela National Science Foundation (NSF) sob o Prêmio No. 2419798, e pela Defense Advanced Research Projects Agency (DARPA) sob o Prêmio No. FA8750-24-2-0002, Subprêmio No. GR105409-SUB00001384.

Baixar ferramenta
ProgramasBugs Relatados
nconverthttps://newsgroup.xnview.com/viewtopic.php?t=49598
xls2csvhttps://github.com/vbwagner/catdoc/issues/6, https://github.com/vbwagner/catdoc/issues/7, https://github.com/vbwagner/catdoc/issues/8, https://github.com/vbwagner/catdoc/issues/9, https://github.com/vbwagner/catdoc/issues/10, https://github.com/vbwagner/catdoc/issues/11, https://github.com/vbwagner/catdoc/issues/12, https://github.com/vbwagner/catdoc/issues/13
gpmfhttps://github.com/gopro/gpmf-parser/issues/201, https://github.com/gopro/gpmf-parser/issues/202, https://github.com/gopro/gpmf-parser/issues/203
hdf5https://github.com/HDFGroup/hdf5/issues/5831, https://github.com/HDFGroup/hdf5/issues/5832, https://github.com/HDFGroup/hdf5/issues/5834
stormhttps://github.com/ladislav-zezula/StormLib/issues/397, https://github.com/ladislav-zezula/StormLib/issues/398
mp4splithttps://github.com/axiomatic-systems/Bento4/issues/1038, https://github.com/axiomatic-systems/Bento4/issues/1039
cpdfhttps://github.com/johnwhitington/camlpdf/issues/75
sfconverthttps://github.com/mpruett/audiofile/issues/73