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
frida-fuzzer — Este fuzzer experimental está diseñado para ser utilizado para fuzzing en memoria de APIs. | Kitploit
Herramientas/GitHubGitHub/andreafioraldi/frida-fuzzer
Análisis Dinámico (Sandboxing)ExplotaciónPruebas de Seguridad de APIsFuzzingSeguridad MóvilAnálisis de BinariosArchived
GitHubandreafioraldi/frida-fuzzer

frida-fuzzer

Este fuzzer experimental está diseñado para ser utilizado para fuzzing en memoria de APIs.

Ver Repositorio
577905hace 6 añosRevisado 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

Fuzzer de API de Frida

v1.4 Derechos de autor (C) 2020 Andrea Fioraldi [email protected]

Publicado bajo la Licencia Apache v2.0

Este fuzzer experimental está diseñado para fuzzing de API en memoria.

El diseño está altamente inspirado y basado en AFL/AFL++.

Por el momento, el mutador es bastante simple, solo las etapas havoc y splice de AFL.

Solo probé los ejemplos en tests/, este es un proyecto en desarrollo pero se sabe que funciona al menos en GNU/Linux x86_64 y Android x86_64.

Necesitas Frida >= 12.8.1 para ejecutar esto (pip3 install -U frida) y frida-tools para compilar el harness.

Uso

La biblioteca fuzz debe importarse en un harness personalizado y luego compilarse con frida-compile para generar el agente que frida-fuzzer inyectará en la aplicación objetivo.

La mayor parte de la lógica del fuzzer está en el agente.

Un harness tiene el siguiente formato:

root@kitploit:~
var fuzz = require("./fuzz");

var TARGET_MODULE = "test_linux64";
var TARGET_FUNCTION = DebugSymbol.fromName("target_func").address;;
var RET_TYPE = "void";
var ARGS_TYPES = ['pointer', 'int'];

var func_handle = new NativeFunction(TARGET_FUNCTION, RET_TYPE, ARGS_TYPES, { traps: 'all' });

fuzz.target_module = TARGET_MODULE;

var payload_mem = Memory.alloc(fuzz.config.MAX_FILE);

fuzz.fuzzer_test_one_input = function (/* Uint8Array */ payload) {

  Memory.writeByteArray(payload_mem, payload, payload.length);

  func_handle(payload_mem, payload.length);

}

fuzz.fuzzer_test_one_input es obligatorio. Si no especificas fuzz.target_module, todo el código ejecutado será instrumentado.

También puedes establecer fuzz.manual_loop_start = true para indicar al fuzzer que llamarás a fuzz.fuzzing_loop() en un callback y que no debe llamarlo por ti (por ejemplo, para iniciar el fuzzing cuando se hace clic en un botón en la aplicación Android).

El callback fuzz.init_callback puede establecerse para ejecutar código cuando el fuzzer esté listo para comenzar. Consulta tests/test_java.js para un ejemplo.

fuzz.dictionary es un diccionario clásico de fuzzer, un array en el que puedes agregar elementos (los tipos aceptados son Array, ArrayBuffer, Uint8Array, String) que se utilizan como valores adicionales en el mutador. Consulta tests/test_libxml2.js para un ejemplo.

frida-fuzzer acepta los siguientes argumentos:

-i FOLDERCarpeta con semillas iniciales
-o FOLDERCarpeta de salida con semillas intermedias y crashes
-UConectarse a USB
-spawnSpawn y attach en lugar de simplemente attach
-script SCRIPTNombre del script (por defecto es fuzzer-agent.js)

Si no especificas la carpeta de salida, se crea una carpeta temporal en /tmp. Si no especificas la carpeta con la semilla inicial, se utiliza una semilla no informada 0000 como semilla inicial.

Si estás fuzzing una aplicación local, puede que quieras ejecutar system-config antes de frida-fuzzer para ajustar los parámetros de tu sistema y acelerar las cosas.

Al ejecutar ./frida-fuzzer -spawn ./tests/test_linux64 verás algo como la siguiente pantalla de estado en tu terminal:

screen

También puedes agregar fácilmente una etapa personalizada en fuzz/fuzzer.js y añadirla a la lista de etapas en fuzz/index.js.

Para personalizar el fuzzer, edita fuzz/config.js. Las variables que quizás quieras cambiar son MAP_SIZE (Si el código que estás fuzzing es pequeño, puedes reducirlo y ganar un poco de velocidad), MAX_FILE (el tamaño máximo de entrada generada) y QUEUE_CACHE_MAX_SIZE (aumenta el tamaño de la caché de la cola para más velocidad, especialmente en Android).

Ejemplo

Vamos a fuzzear la biblioteca compartida nativa en la aplicación Android de ejemplo en tests.

Asegúrate de tener root en tu dispositivo virtual:

root@kitploit:~
host$ adb root

Descarga el frida-server para Android x86_64 desde la página de lanzamiento del repositorio y cópialo en el dispositivo en /data/local/tmp (usa adb push).

Inicia un shell y ejecuta el frida-server:

root@kitploit:~
device# cd /data/local/tmp
device# ./frida-server

Ahora instala la aplicación de prueba tests/app-debug.apk usando arrastrar y soltar en la ventana del emulador.

Luego, abre la aplicación.

Compila el script del agente con frida-compile:

root@kitploit:~
host$ frida-compile -x tests/test_ndk_x64.js -o fuzzer-agent.js

Abre la aplicación en el emulador.

Fuzzear la función test_func de la biblioteca libnative-lib.so incluida en la aplicación de prueba con el comando:

root@kitploit:~
host$ ./frida-fuzzer -U -o output_folder/ com.example.ndktest1

Tanto los casos de prueba interesantes como los crashes se guardan en output_folder.

Disfruta.

screen1

POR HACER

Hey comunidad OSS, hay muchos TODOs si alguien quiere contribuir.

  • Fuzzing de código Java (esperando métodos expuestos adicionales en frida-java-bridge, debería ser fácil, casi listo)
  • etapa splice (fusionar dos casos de prueba en la cola y aplicar havoc en él)
  • soporte para diccionarios (y así modificar también havoc)
  • selección de semillas
  • instrumentación inline para arm64
  • puntuación de rendimiento (explorar el schedule de AFL)
  • mutador estructural (mutar bytes basado en una gramática escrita en JSON)
  • CompareCoverage (perfilado de sub-instrucciones para sortear obstáculos de fuzzing)
  • reescribir frida-fuzzer en C con frida-core para poder ejecutar todo en el dispositivo móvil

Si tienes dudas sobre alguna de estas características, no dudes en enviarme un DM en Twitter.

Para propuestas de funcionalidades, está la sección de Issues.

Descargar herramienta