Volver a actualizaciones
Nuevo releaseAug 20, 2026

rhabdomancer v0.10.0

Asistente de investigación de vulnerabilidades que localiza llamadas a funciones de API potencialmente inseguras en un archivo binario.

Compartir

rhabdomancer

build doc

"El camino hacia los bugs explotables está pavimentado con bugs no explotables."

-- Mark Dowd

Rhabdomancer es un plugin headless de IDA extremadamente rápido que localiza llamadas a funciones de API potencialmente inseguras en un archivo binario. Los auditores pueden hacer un backtrace desde estos puntos candidatos para encontrar rutas que permitan el acceso a entrada no confiable.

Características

  • Experiencia de usuario headless y extremadamente rápida gracias a IDA 9.x y los bindings de Rust idalib-rs.
  • Soporte para objetivos binarios C/C++ compilados para cualquier arquitectura implementada por IDA.
  • Las ubicaciones de llamadas a funciones de API maliciosas se imprimen en stdout y se marcan en el IDB.
    • Las ubicaciones de llamadas en código de biblioteca reconocido por IDA (por ejemplo, un runtime enlazado estáticamente que coincide con firmas FLIRT) se etiquetan como (lib).
    • Las llamadas a través de stubs (por ejemplo, las entradas .plt de binarios ELF o los stubs de importación de binarios PE y Mach-O, listados como thunks) se rastrean hasta sus llamadores.
    • En binarios ELF, una función se lista deliberadamente dos veces con las mismas ubicaciones de llamada: una vez como su stub .plt (marcado como thunk) y otra como su importación. Cada ubicación de llamada se marca solo una vez en el IDB.
  • Las funciones de API maliciosas conocidas se agrupan en niveles de peligrosidad para ayudar a priorizar el trabajo de auditoría.
    • [BAD 0] Prioridad alta - Funciones que generalmente se consideran inseguras.
    • [BAD 1] Prioridad media - Funciones interesantes que deberían revisarse en busca de casos de uso inseguros.
    • [BAD 2] Prioridad baja - Las rutas de código que involucran estas funciones deberían revisarse cuidadosamente.
  • La lista de funciones de API maliciosas conocidas está integrada y puede personalizarse fácilmente con un archivo de configuración basado en conf/rhabdomancer.toml.
  • Los nombres de funciones se comparan sin estas decoraciones: puntos y guiones bajos iniciales (por ejemplo, _strcpy), los prefijos de alias de biblioteca (por ejemplo, __o_malloc en el Universal CRT, __libc_system y __GI___snprintf en glibc) y, solo para stubs y dichos alias, el sufijo numérico que IDA añade a los nombres ya en uso (por ejemplo, memset_0).

[!NOTE] Las funciones fortificadas (por ejemplo, __strcpy_chk, usada en lugar de strcpy al compilar con _FORTIFY_SOURCE) deliberadamente no se comparan, ya que son las variantes verificadas de las funciones listadas. Para marcar también sus llamadas, añádelas explícitamente a una configuración personalizada (por ejemplo, "__strcpy_chk" con la misma prioridad que strcpy).

Artículos

Véase también

Instalación

La forma más sencilla de obtener la última versión es a través de crates.io:

  1. Descargue, instale y configure IDA (consulte https://hex-rays.com/ida-pro).
  2. Instale LLVM/Clang (consulte https://rust-lang.github.io/rust-bindgen/requirements.html).
  3. En Linux/macOS, instale de la siguiente manera:
    export IDADIR=/path/to/ida # if not set, the build script will check common locations
    cargo install rhabdomancer --locked
    
    En Windows, en su lugar, utilice los siguientes comandos:
    $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
    

Compilación

Alternativamente, puedes compilar desde el código fuente:

  1. Descarga, instala y configura IDA (consulta https://hex-rays.com/ida-pro).
  2. Instala LLVM/Clang (consulta https://rust-lang.github.io/rust-bindgen/requirements.html).
  3. En Linux/macOS, compila de la siguiente manera:
    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
    
    En Windows, en su lugar, utilice los siguientes 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" # if not set, the build script will check common locations
    cargo build --release --locked
    

Uso

  1. Asegúrate de que IDA esté configurado correctamente con una licencia válida.
  2. Opcionalmente, personaliza la lista de funciones API maliciosas conocidas: copia conf/rhabdomancer.toml (elige la etiqueta que coincida con tu versión instalada para obtener su lista integrada exacta), edita la copia y establece la variable de entorno RHABDOMANCER_CONFIG con su ruta. El archivo debe definir los arrays high, medium y low, y ninguna otra clave. De lo contrario, se utiliza la lista integrada, que se incrusta en el binario en el momento de la compilación desde conf/rhabdomancer.toml (editar ese archivo requiere recompilar).
  3. Asegúrate de que la variable de entorno IDADIR esté establecida si tu instalación de IDA se encuentra en una ubicación no estándar.
  4. Ejecútalo de la siguiente manera:
    rhabdomancer <binary_file>
    
    Cualquier archivo IDB .i64 existente se actualizará; de lo contrario, se creará un nuevo archivo IDB.
  5. Abra el archivo IDB .i64 resultante con IDA.
  6. Seleccione View > Open subviews > Bookmarks
  7. Disfrute de sus resultados convenientemente recopilados en una ventana de IDA.

[!NOTE] Rhabdomancer también añade comentarios en las ubicaciones de llamadas marcadas. Tanto los marcadores como los comentarios se etiquetan como [BAD n] <function_name>, donde n es el nivel de prioridad (0 = alto, 1 = medio, 2 = bajo), de modo que los scripts puedan buscarlos en los IDB. Este formato es estable entre versiones.

Compatibilidad

Solo se admite oficialmente la última versión de IDA, pero las versiones anteriores también pueden funcionar. La siguiente tabla resume la última versión compatible para cada versión de IDA:

Categorías