Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
rhabdomancer — Assistente per la ricerca di vulnerabilità che individua le chiamate a funzioni API potenzialmente non sicure in un file binario. | Kitploit
Strumenti/GitHubGitHub/0xdea/rhabdomancer
Analisi StaticaAnalisi delle VulnerabilitàReverse EngineeringAnalisi di Binari
GitHub0xdea/rhabdomancer

rhabdomancer

Assistente per la ricerca di vulnerabilità che individua le chiamate a funzioni API potenzialmente non sicure in un file binario.

Vedi Repository
13115315 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Sito web
Condividi
# 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)

> "La strada verso i bug sfruttabili è lastricata di bug non sfruttabili."
>
> -- Mark Dowd

Rhabdomancer è un plugin headless per IDA estremamente veloce che individua le chiamate a funzioni API potenzialmente
insicure in un file binario. I revisori possono risalire a ritroso da questi punti candidati per trovare percorsi che
consentono l'accesso a input non attendibili.

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

## Funzionalità

- Esperienza utente headless estremamente veloce grazie a IDA 9.x e ai binding Rust idalib-rs.
- Supporto per binari C/C++ compilati per qualsiasi architettura implementata da IDA.
- Le posizioni delle chiamate a funzioni API pericolose vengono stampate su stdout e contrassegnate nell'IDB.
  - Le posizioni delle chiamate nel codice di libreria riconosciuto da IDA (ad esempio, un runtime linkato staticamente
    riconosciuto tramite firme FLIRT) sono etichettate `(lib)`.
  - Le chiamate attraverso stub (ad esempio, le voci `.plt` dei binari ELF o gli stub di importazione dei binari PE e
    Mach-O, elencati come thunk) vengono ricondotte ai loro chiamanti.
  - Nei binari ELF, una funzione viene deliberatamente elencata due volte con le stesse posizioni di chiamata: una volta
    come suo stub `.plt` (contrassegnato come thunk) e una volta come sua importazione. Ogni posizione di chiamata viene
    contrassegnata una sola volta nell'IDB.
- Le funzioni API pericolose note sono raggruppate in livelli di pericolosità per aiutare a dare priorità al lavoro di
  revisione.
  - [BAD 0] Priorità alta - Funzioni generalmente considerate insicure.
  - [BAD 1] Priorità media - Funzioni interessanti che dovrebbero essere verificate per casi d'uso insicuri.
  - [BAD 2] Priorità bassa - I percorsi di codice che coinvolgono queste funzioni dovrebbero essere controllati
    attentamente.
- L'elenco delle funzioni API pericolose note è integrato e può essere facilmente personalizzato con un file di
  configurazione basato su `conf/rhabdomancer.toml`.
- I nomi delle funzioni vengono confrontati senza queste decorazioni: punti e underscore iniziali (ad esempio,
  `_strcpy`), i prefissi degli alias di libreria (ad esempio, `__o_malloc` nella Universal CRT, `__libc_system` e
  `__GI___snprintf` in glibc) e, solo per stub e tali alias, il suffisso numerico che IDA aggiunge ai nomi già in uso
  (ad esempio, `memset_0`).

> [!NOTE]
> Le funzioni fortificate (ad esempio, `__strcpy_chk`, usata al posto di `strcpy` quando si compila con
> `_FORTIFY_SOURCE`) non vengono deliberatamente confrontate, poiché sono le varianti controllate delle funzioni
> elencate. Per contrassegnare anche le loro chiamate, aggiungile esplicitamente a una configurazione personalizzata
> (ad esempio, `"__strcpy_chk"` con la stessa priorità di `strcpy`).

## Articoli

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

## Vedi anche

- <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>

## Installazione

Il modo più semplice per ottenere l'ultima versione è tramite [crates.io](https://crates.io/crates/rhabdomancer):

1. Scarica, installa e configura IDA (vedi <https://hex-rays.com/ida-pro>).
2. Installa LLVM/Clang (vedi <https://rust-lang.github.io/rust-bindgen/requirements.html>).
3. Su Linux/macOS, installa come segue:
   ```sh
   export IDADIR=/path/to/ida # if not set, the build script will check common locations
   cargo install rhabdomancer --locked
   ```
   Su Windows, invece, usa i seguenti comandi:
   ```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
   ```

## Compilazione

In alternativa, puoi compilare dal [sorgente](https://github.com/0xdea/rhabdomancer):

1. Scarica, installa e configura IDA (vedi <https://hex-rays.com/ida-pro>).
2. Installa LLVM/Clang (vedi <https://rust-lang.github.io/rust-bindgen/requirements.html>).
3. Su Linux/macOS, compila come segue:
   ```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
   ```
   Su Windows, invece, usa i seguenti comandi:
   ```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
   ```

## Utilizzo

1. Assicurarsi che IDA sia configurato correttamente con una licenza valida.
2. Facoltativamente, personalizzare l'elenco delle funzioni API note come dannose: copiare
   [`conf/rhabdomancer.toml`](https://github.com/0xdea/rhabdomancer/blob/master/conf/rhabdomancer.toml) (scegliere il tag
   che corrisponde alla versione installata per il suo elenco predefinito esatto), modificare la copia e impostare la variabile
   d'ambiente `RHABDOMANCER_CONFIG` con il suo percorso. Il file deve definire gli array `high`, `medium` e `low`, e nessun'altra chiave.
   In caso contrario, viene utilizzato l'elenco predefinito, che è incorporato nel binario in fase di compilazione da `conf/rhabdomancer.toml`
   (modificare quel file richiede una ricompilazione).
3. Assicurarsi che la variabile d'ambiente `IDADIR` sia impostata se l'installazione di IDA si trova in una posizione non standard.
4. Eseguire come segue:
   ```sh
   rhabdomancer <binary_file>
   ```
   Qualsiasi file IDB `.i64` esistente verrà aggiornato; in caso contrario, verrà creato un nuovo file IDB.
5. Apri il file IDB `.i64` risultante con IDA.
6. Seleziona `View` > `Open subviews` > `Bookmarks`
7. Goditi i tuoi risultati comodamente raccolti in una finestra di IDA.

> [!NOTE]
> Rhabdomancer aggiunge anche commenti nelle posizioni delle chiamate contrassegnate. Sia i segnalibri che i commenti sono etichettati come
> `[BAD n] <function_name>`, dove `n` è il livello di priorità (0 = alto, 1 = medio, 2 = basso), in modo che gli script possano
> cercarli negli IDB. Questo formato è stabile tra le release.

## Compatibilità

È ufficialmente supportata solo l'ultima release di IDA, ma anche le versioni precedenti potrebbero funzionare. La seguente tabella
> riassume l'ultima release compatibile per ciascuna versione di IDA:

| Versione IDA | Ultima release compatibile |
| ----------- | ------------------------- |
| 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 | release corrente          |
| v9.4.260915 | release corrente          |

> [!NOTE]
> Consulta la documentazione di [idalib-rs](https://github.com/idalib-rs/idalib) per ulteriori informazioni.

## Crediti

Lo sviluppo di questo progetto è stato supportato dalle seguenti organizzazioni:

- [HN Security](https://hnsecurity.it)
- [Hex-Rays](https://hex-rays.com) tramite il loro [Contributor Program](https://hex-rays.com/contributor-program)

## Changelog

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

## TODO

- Arricchire ulteriormente la lista delle funzioni API note come malevole (vedi <https://github.com/0xdea/semgrep-rules>).
- Seguire le chiamate attraverso i thunk al di fuori dei segmenti `.plt` (ad es., i thunk `j_` del linking incrementale MSVC).
- Considerare di saltare il contrassegno delle posizioni delle chiamate nel codice di libreria riconosciuto da IDA (ora solo etichettato `(lib)`).
- Implementare l'output serializzato per facilitare l'analisi e il parsing automatizzati.
- Implementare un ruleset di base nello stile di [VulFi](https://github.com/Accenture/VulFi)
  e [VulnFanatic](https://github.com/Martyx00/VulnFanatic).
Scarica lo strumento