Voltar às atualizações
New releaseAug 20, 2026

rhabdomancer v0.10.0

Assistente de pesquisa de vulnerabilidades que localiza chamadas a funções de API potencialmente inseguras em um arquivo binário.

Compartilhar

rhabdomancer

build doc

"O caminho para bugs exploráveis é pavimentado com bugs inexploráveis."

-- Mark Dowd

O Rhabdomancer é um plugin headless extremamente rápido para o IDA que localiza chamadas a funções de API potencialmente inseguras em um arquivo binário. Os auditores podem fazer backtrace a partir desses pontos candidatos para encontrar caminhos que permitam acesso a entradas não confiáveis.

Recursos

  • Experiência de usuário headless extremamente rápida, cortesia do IDA 9.x e das bindings Rust idalib-rs.
  • Suporte a alvos binários C/C++ compilados para qualquer arquitetura implementada pelo IDA.
  • As localizações das chamadas a funções de API ruins são impressas no stdout e marcadas no IDB.
  • As funções de API ruins conhecidas são agrupadas em níveis de periculosidade para ajudar a priorizar o trabalho de auditoria.
    • [BAD 0] Prioridade alta - Funções que geralmente são consideradas inseguras.
    • [BAD 1] Prioridade média - Funções interessantes que devem ser verificadas quanto a casos de uso inseguros.
    • [BAD 2] Prioridade baixa - Os caminhos de código que envolvem essas funções devem ser verificados cuidadosamente.
  • A lista de funções de API ruins conhecidas pode ser facilmente personalizada editando conf/rhabdomancer.toml.

Artigos

Veja também

Instalação

A maneira mais fácil de obter a versão mais recente é via crates.io:

  1. Baixe, instale e configure o IDA (veja https://hex-rays.com/ida-pro).
  2. Instale o LLVM/Clang (veja https://rust-lang.github.io/rust-bindgen/requirements.html).
  3. No Linux/macOS, instale da seguinte forma:
    export IDADIR=/path/to/ida # se não estiver definido, o script de build verificará locais comuns
    cargo install rhabdomancer --locked
    
    No Windows, em vez disso, use os seguintes comandos:
    $env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
    $env:PATH="\path\to\ida;$env:PATH"
    $env:IDADIR="\path\to\ida" # se não estiver definido, o script de build verificará locais comuns
    cargo install rhabdomancer --locked
    

Compilação

Alternativamente, você pode compilar a partir do código-fonte:

  1. Baixe, instale e configure o IDA (veja https://hex-rays.com/ida-pro).
  2. Instale o LLVM/Clang (veja https://rust-lang.github.io/rust-bindgen/requirements.html).
  3. No Linux/macOS, compile da seguinte forma:
    git clone --depth 1 https://github.com/0xdea/rhabdomancer
    cd rhabdomancer
    export IDADIR=/path/to/ida # se não estiver definido, o script de build verificará locais comuns
    cargo build --release --locked
    
    No Windows, em vez disso, use os seguintes comandos:
    git clone --depth 1 https://github.com/0xdea/rhabdomancer
    cd rhabdomancer
    $env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
    $env:PATH="\path\to\ida;$env:PATH"
    $env:IDADIR="\path\to\ida" # se não estiver definido, o script de build verificará locais comuns
    cargo build --release --locked
    

Uso

  1. Certifique-se de que o IDA esteja configurado corretamente com uma licença válida.
  2. Personalize a lista de funções de API ruins conhecidas em conf/rhabdomancer.toml se necessário. Você pode substituir o local padrão do arquivo de configuração definindo a variável de ambiente RHABDOMANCER_CONFIG.
  3. Certifique-se de que a variável de ambiente IDADIR esteja definida se a sua instalação do IDA estiver em um local não padrão.
  4. Execute da seguinte forma:
    rhabdomancer <binary_file>
    
    Qualquer arquivo IDB .i64 existente será atualizado; caso contrário, um novo arquivo IDB será criado.
  5. Abra o arquivo IDB .i64 resultante com o IDA.
  6. Selecione View > Open subviews > Bookmarks
  7. Aproveite seus resultados convenientemente coletados em uma janela do IDA.

[!NOTE] O Rhabdomancer também adiciona comentários nos locais de chamadas marcados.

Compatibilidade

Apenas a versão mais recente do IDA é oficialmente suportada, mas versões mais antigas podem funcionar também. A tabela a seguir resume a versão compatível mais recente para cada versão do IDA:

Versão do IDAVersão compatível mais recente
v9.0.240925v0.2.4
v9.0.241217v0.3.5
v9.1.250226v0.6.2
v9.2.250908v0.7.6
v9.3.260213v0.8.1
v9.3.260327v0.9.0
v9.3.260421v0.9.3
v9.4.260714versão atual

[!NOTE] Consulte a documentação do idalib-rs para obter informações adicionais.

Créditos

O desenvolvimento deste projeto foi apoiado pelas seguintes organizações:

Changelog

TODO

  • Enriquecer ainda mais a lista de funções de API ruins conhecidas (veja https://github.com/0xdea/semgrep-rules).
  • Considerar ampliar o escopo da normalização em normalize_name para cobrir mais casos.
  • Implementar um conjunto de regras básico no estilo do VulFi e do VulnFanatic.

Categorias