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
rhabdomancer — Assistente de pesquisa de vulnerabilidades que localiza chamadas a funções de API potencialmente inseguras em um arquivo binário. | Kitploit
Ferramentas/GitHubGitHub/0xdea/rhabdomancer
Análise EstáticaAnálise de VulnerabilidadesEngenharia ReversaAnálise de Binários
GitHub0xdea/rhabdomancer

rhabdomancer

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

Ver Repositório
1311531há 5 diasRevisado pelo Kitploit

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 →
Site
Compartilhar
# rhabdomancer

[![](https://img.shields.io/github/stars/0xdea/rhabdomancer.svg?style=flat&color=yellow)](https://github.com/0xdea/rhabdomancer)
[![](https://img.shields.io/crates/v/rhabdomancer?style=flat&color=green)](https://crates.io/crates/rhabdomancer)
[![](https://img.shields.io/crates/d/rhabdomancer?style=flat&color=red)](https://crates.io/crates/rhabdomancer)
[![](https://img.shields.io/badge/ida-9.4-violet)](https://hex-rays.com/ida-pro)
[![](https://img.shields.io/badge/[email protected])](https://twitter.com/0xdea)
[![](https://img.shields.io/badge/[email protected])](https://infosec.exchange/@raptor)
[![build](https://github.com/0xdea/rhabdomancer/actions/workflows/build.yml/badge.svg)](https://github.com/0xdea/rhabdomancer/actions/workflows/build.yml)
[![doc](https://github.com/0xdea/rhabdomancer/actions/workflows/doc.yml/badge.svg)](https://github.com/0xdea/rhabdomancer/actions/workflows/doc.yml)

> "O caminho para bugs exploráveis é pavimentado com bugs não exploráveis."
>
> -- Mark Dowd

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

![](https://assets.kitploit.com/production/public/readmes/49813/668212019df8d7b843ca6bcd0e68432321528d6d1a229ce774358fa80fbecfb2.png)

## Recursos

- Experiência de usuário headless extremamente rápida, cortesia do IDA 9.x e dos bindings Rust idalib-rs.
- Suporte a alvos binários C/C++ compilados para qualquer arquitetura implementada pelo IDA.
- Locais de chamadas a funções de API ruins são impressos em stdout e marcados no IDB.
  - Locais de chamada em código de biblioteca reconhecido pelo IDA (por exemplo, um runtime estaticamente vinculado
    correspondido por assinaturas FLIRT) são rotulados como `(lib)`.
  - Chamadas através de stubs (por exemplo, as entradas `.plt` de binários ELF ou os stubs de importação de binários
    PE e Mach-O, listados como thunks) são rastreadas de volta até seus chamadores.
  - Em binários ELF, uma função é deliberadamente listada duas vezes com os mesmos locais de chamada: uma vez como seu
    stub `.plt` (marcado como thunk) e uma vez como sua importação. Cada local de chamada é marcado apenas uma vez no IDB.
- Funções de API ruins conhecidas são agrupadas em níveis de maldade para ajudar a priorizar o trabalho de auditoria.
  - [BAD 0] Alta prioridade - Funções geralmente consideradas inseguras.
  - [BAD 1] Média prioridade - Funções interessantes que devem ser verificadas quanto a casos de uso inseguros.
  - [BAD 2] Baixa prioridade - Caminhos de código envolvendo essas funções devem ser cuidadosamente verificados.
- A lista de funções de API ruins conhecidas é embutida e pode ser facilmente personalizada com um arquivo de
  configuração baseado em `conf/rhabdomancer.toml`.
- Nomes de funções são correspondidos sem estas decorações: pontos e sublinhados iniciais (por exemplo, `_strcpy`), os
  prefixos de aliases de biblioteca (por exemplo, `__o_malloc` no Universal CRT, `__libc_system` e `__GI___snprintf` na
  glibc) e, apenas para stubs e tais aliases, o sufixo numérico que o IDA acrescenta a nomes já em uso (por exemplo,
  `memset_0`).

> [!NOTE]
> Funções fortificadas (por exemplo, `__strcpy_chk`, usada em vez de `strcpy` ao compilar com `_FORTIFY_SOURCE`) são
> deliberadamente não correspondidas, pois são as variantes verificadas das funções listadas. Para também marcar suas
> chamadas, adicione-as explicitamente a uma configuração personalizada (por exemplo, `"__strcpy_chk"` com a mesma
> prioridade que `strcpy`).

## Artigos

- <https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings>
- <https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust>

## Veja também

- <https://github.com/0xdea/ghidra-scripts/blob/main/Rhabdomancer.java>
- <https://docs.hex-rays.com/release-notes/9_0#headless-processing-with-idalib>
- <https://github.com/idalib-rs/idalib>
- <https://books.google.it/books/about/The_Art_of_Software_Security_Assessment.html>

## Instalação

A maneira mais fácil de obter a versão mais recente é via [crates.io](https://crates.io/crates/rhabdomancer):

1. Baixe, instale e configure o IDA (consulte <https://hex-rays.com/ida-pro>).
2. Instale o LLVM/Clang (consulte <https://rust-lang.github.io/rust-bindgen/requirements.html>).
3. No Linux/macOS, instale da seguinte forma:
   ```sh
   export IDADIR=/path/to/ida # if not set, the build script will check common locations
   cargo install rhabdomancer --locked
   ```
   No Windows, em vez disso, use os seguintes comandos:
   ```powershell
   $env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
   $env:PATH="\path\to\ida;$env:PATH"
   $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations
   cargo install rhabdomancer --locked
   ```

## Compilação

Como alternativa, você pode compilar a partir do [código-fonte](https://github.com/0xdea/rhabdomancer):

1. Baixe, instale e configure o IDA (consulte <https://hex-rays.com/ida-pro>).
2. Instale o LLVM/Clang (consulte <https://rust-lang.github.io/rust-bindgen/requirements.html>).
3. No Linux/macOS, compile da seguinte forma:
   ```sh
   git clone --depth 1 https://github.com/0xdea/rhabdomancer
   cd rhabdomancer
   export IDADIR=/path/to/ida # if not set, the build script will check common locations
   cargo build --release --locked
   ```
   No Windows, em vez disso, use os seguintes comandos:
   ```powershell
   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" # if not set, the build script will check common locations
   cargo build --release --locked
   ```

## Uso

1. Certifique-se de que o IDA esteja configurado corretamente com uma licença válida.
2. Opcionalmente, personalize a lista de funções de API maliciosas conhecidas: copie
   [`conf/rhabdomancer.toml`](https://github.com/0xdea/rhabdomancer/blob/master/conf/rhabdomancer.toml) (escolha a tag
   que corresponde à sua versão instalada para obter sua lista interna exata), edite a cópia e defina a variável de ambiente `RHABDOMANCER_CONFIG`
   com o caminho dela. O arquivo deve definir os arrays `high`, `medium` e `low`, e nenhuma outra chave.
   Caso contrário, a lista interna é usada, a qual é incorporada ao binário no momento da compilação a partir de `conf/rhabdomancer.toml`
   (editar esse arquivo requer uma recompilação).
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:
   ```sh
   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 reunidos em uma janela do IDA.

> [!NOTE]
> O Rhabdomancer também adiciona comentários nos locais de chamada marcados. Tanto os marcadores quanto os comentários são etiquetados como
> `[BAD n] <function_name>`, onde `n` é o nível de prioridade (0 = alto, 1 = médio, 2 = baixo), para que os scripts possam
> procurá-los nos IDBs. Este formato é estável entre versões.

## Compatibilidade

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

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

> [!NOTE]
> Consulte a documentação do [idalib-rs](https://github.com/idalib-rs/idalib) para informações adicionais.

## Créditos

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

- [HN Security](https://hnsecurity.it)
- [Hex-Rays](https://hex-rays.com) por meio do seu [Contributor Program](https://hex-rays.com/contributor-program)

## Changelog

- [CHANGELOG.md](https://github.com/0xdea/rhabdomancer/blob/master/CHANGELOG.md)

## TODO

- Enriquecer ainda mais a lista conhecida de funções de API maliciosas (veja <https://github.com/0xdea/semgrep-rules>).
- Seguir chamadas através de thunks fora de segmentos `.plt` (por exemplo, thunks `j_` de vinculação incremental do MSVC).
- Considerar pular a marcação de locais de chamada em código de biblioteca reconhecido pelo IDA (atualmente apenas rotulado como `(lib)`).
- Implementar saída serializada para facilitar a análise e o parsing automatizados.
- Implementar um conjunto de regras básico no estilo de [VulFi](https://github.com/Accenture/VulFi)
  e [VulnFanatic](https://github.com/Martyx00/VulnFanatic).
Baixar ferramenta