Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
ropr — Un buscador de ROP Gadgets multihilo extremadamente rápido™. Alternativa a ropper/ropgadget (actualmente solo para x86) | Kitploit
Herramientas/GitHubGitHub/ben-lichtman/ropr
ExplotaciónIngeniería InversaShellcodeAnálisis de Binarios
GitHubben-lichtman/ropr

ropr

Un buscador de ROP Gadgets multihilo extremadamente rápido™. Alternativa a ropper/ropgadget (actualmente solo para x86)

Ver Repositorio
55530hace 3 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

ropr

ropr es un buscador de gadgets ROP ultrarrápido y multihilo

¿Qué es un ROP Gadget?

Los ROP (Return Oriented Programming) Gadgets son pequeños fragmentos de unas pocas instrucciones de ensamblador que típicamente terminan en una instrucción ret y que ya existen como código ejecutable dentro de cada binario o biblioteca. Estos gadgets pueden utilizarse para la explotación de binarios y para subvertir ejecutables vulnerables.

Cuando las direcciones de muchos ROP Gadgets se escriben en un búfer, formamos una ROP Chain. Si un atacante puede mover el puntero de pila hacia esta ROP Chain, entonces el control puede transferirse completamente al atacante.

La mayoría de los ejecutables contienen suficientes gadgets para escribir una ROP Chain Turing-completa. Para aquellos que no, siempre se pueden usar bibliotecas dinámicas contenidas en el mismo espacio de direcciones, como libc, una vez que conocemos sus direcciones.

La belleza de usar ROP Gadgets es que no es necesario escribir nuevo código ejecutable en ninguna parte: un atacante puede lograr su objetivo utilizando solo el código que ya existe en el programa.

¿Cómo uso un ROP Gadget?

Por lo general, el primer requisito para usar ROP Gadgets es tener un lugar donde escribir tu ROP Chain: puede ser cualquier búfer legible. Simplemente escribe las direcciones de cada gadget que quieras usar en ese búfer. Si el búfer es demasiado pequeño, puede que no haya suficiente espacio para escribir una ROP Chain larga, por lo que un atacante debe tener cuidado de diseñar su ROP Chain de manera que sea lo suficientemente eficiente para caber en el espacio disponible.

El siguiente requisito es poder controlar la pila. Esto puede ser en forma de un desbordamiento de pila, que permite escribir la ROP Chain directamente debajo del puntero de pila, o un "stack pivot", que suele ser un único gadget que mueve el puntero de pila al resto de la ROP Chain.

Una vez que el puntero de pila está al inicio de tu ROP Chain, la siguiente instrucción ret hará que los gadgets se ejecuten en secuencia, usando cada uno el siguiente como su dirección de retorno en su propio marco de pila.

También es posible agregar punteros a funciones en una ROP Chain, teniendo cuidado de que los argumentos de la función se suministren después del siguiente elemento de la ROP Chain. Esto suele combinarse con un "pop gadget", que extrae los argumentos de la pila para transicionar suavemente al siguiente gadget después de los argumentos de la función.

¿Cómo instalo ropr?

  • Requiere cargo (el sistema de compilación de Rust)

Instalación fácil:

root@kitploit:~
cargo install ropr
the application will install to `~/.cargo/bin`

Desde el código fuente:

root@kitploit:~
git clone https://github.com/Ben-Lichtman/ropr
cd ropr
cargo build --release

el binario resultante estará ubicado en target/release/ropr

Alternativamente:

root@kitploit:~
git clone https://github.com/Ben-Lichtman/ropr
cd ropr
cargo install --path .

la aplicación se instalará en ~/.cargo/bin

¿Cómo uso ropr?

root@kitploit:~
USAGE:
    ropr [OPTIONS] <BINARY>

ARGS:
    <BINARY>    The path of the file to inspect

OPTIONS:
    -b, --base-pivot               Filters for gadgets which alter the base pointer
    -c, --colour <COLOUR>          Forces output to be in colour or plain text (`true` or `false`)
    -h, --help                     Print help information
    -j, --nojop                    Removes "JOP Gadgets" - these may have a controllable branch,
                                   call, etc. instead of a simple `ret` at the end
    -m, --max-instr <MAX_INSTR>    Maximum number of instructions in a gadget [default: 6]
    -n, --noisy                    Includes potentially low-quality gadgets such as prefixes,
                                   conditional branches, and near branches (will find significantly
                                   more gadgets)
    -p, --stack-pivot              Filters for gadgets which alter the stack pointer
    -r, --norop                    Removes normal "ROP Gadgets"
    -R, --regex <REGEX>            Perform a regex search on the returned gadgets for easy filtering
        --range <RANGE>            Search between address ranges (in hexadecial) eg. `0x1234-0x4567`
        --raw <RAW>                Treats the input file as a blob of code (`true` or `false`)
    -s, --nosys                    Removes syscalls and other interrupts
    -V, --version                  Print version information

Por ejemplo, si estuviera buscando una forma de llenar rax con un valor de otro registro, podría optar por filtrar con la expresión regular ^mov eax, ...;:

root@kitploit:~
❯ ropr /usr/lib/libc.so.6 -R "^mov eax, ...;" > /dev/null

==> Found 197 gadgets in 0.118 seconds

Ahora puedo agregar algunos filtros en la línea de comandos para obtener los resultados de mayor calidad:

root@kitploit:~
❯ ropr /usr/lib/libc.so.6 -m 2 -j -s -R "^mov eax, ...;"
0x000353e7: mov eax, eax; ret;
0x000788c8: mov eax, ecx; ret;
0x00052252: mov eax, edi; ret;
0x0003ae43: mov eax, edx; ret;
0x000353e6: mov eax, r8d; ret;
0x000788c7: mov eax, r9d; ret;

==> Found 6 gadgets in 0.046 seconds

Ahora tengo un buen candidato de gadget mov en la dirección 0x00052252

Descargar herramienta