Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
frida-fuzzer — Questo fuzzer sperimentale è destinato al fuzzing in-memory delle API. | Kitploit
Strumenti/GitHubGitHub/andreafioraldi/frida-fuzzer
Analisi Dinamica (Sandboxing)ExploitTest di Sicurezza delle APIFuzzingSicurezza MobileAnalisi di BinariArchived
GitHubandreafioraldi/frida-fuzzer

frida-fuzzer

Questo fuzzer sperimentale è destinato al fuzzing in-memory delle API.

Vedi Repository
577906 anni 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 →
Condividi

Frida API Fuzzer

v1.4 Copyright (C) 2020 Andrea Fioraldi [email protected]

Rilasciato sotto la Licenza Apache v2.0

Questo fuzzer sperimentale è pensato per essere usato per il fuzzing in-memory di API.

Il design è fortemente ispirato e basato su AFL/AFL++.

Al momento il mutatore è piuttosto semplice, solo gli stadi havoc e splice di AFL.

Ho testato solo gli esempi in tests/, questo è un progetto WIP ma è noto che funziona almeno su GNU/Linux x86_64 e Android x86_64.

Hai bisogno di Frida >= 12.8.1 per eseguirlo (pip3 install -U frida) e frida-tools per compilare l'harness.

Utilizzo

La libreria fuzz deve essere importata in un harness personalizzato e poi compilata con frida-compile per generare l'agente che frida-fuzzer inietterà nell'app target.

La maggior parte della logica del fuzzer è nell'agente.

Un harness ha il seguente 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 è obbligatorio. Se non specifichi fuzz.target_module, tutto il codice eseguito verrà instrumentato.

Puoi anche impostare fuzz.manual_loop_start = true per dire al fuzzer che chiamerai fuzz.fuzzing_loop() in un callback e quindi non deve chiamarlo per te (ad esempio per avviare il fuzzing quando viene cliccato un pulsante nell'app Android).

Il callback fuzz.init_callback può essere impostato per eseguire codice quando il fuzzer è pronto per iniziare. Vedi tests/test_java.js per un esempio.

fuzz.dictionary è un dizionario classico del fuzzer, un array in cui puoi aggiungere elementi (i tipi accettati sono Array, ArrayBuffer, Uint8Array, String) che vengono utilizzati come valori aggiuntivi nel mutatore. Vedi tests/test_libxml2.js per un esempio.

frida-fuzzer accetta i seguenti argomenti:

Se non specifichi la cartella di output, viene creata una cartella temporanea in /tmp. Se non specifichi la cartella con il seme iniziale, viene utilizzato un seme non informato 0000 come seme di partenza.

Se stai facendo fuzzing di un'applicazione locale, potresti voler eseguire system-config prima di frida-fuzzer per regolare i parametri del tuo sistema e velocizzare le cose.

Eseguendo ./frida-fuzzer -spawn ./tests/test_linux64 vedrai qualcosa come la seguente schermata di stato sul tuo terminale:

screen

Puoi anche facilmente aggiungere uno stage personalizzato in fuzz/fuzzer.js e aggiungerlo alla lista degli stage in fuzz/index.js.

Per personalizzare il fuzzer, modifica fuzz/config.js. Le variabili che potresti voler cambiare sono MAP_SIZE (Se il codice che stai fuzzando è piccolo puoi ridurlo e guadagnare un po' di velocità), MAX_FILE (la dimensione massima dell'input generato) e QUEUE_CACHE_MAX_SIZE (aumenta la dimensione della cache della coda per più velocità, specialmente su Android).

Esempio

Fuzziamo la libreria condivisa nativa nell'app Android di esempio in tests.

Assicurati di avere i permessi di root sul tuo dispositivo virtuale:

root@kitploit:~
host$ adb root

Scarica il frida-server Android x86_64 dalla pagina di rilascio del repository e copialo sul dispositivo in /data/local/tmp (usa adb push).

Avvia una shell ed esegui il frida-server:

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

Ora installa l'app di test tests/app-debug.apk usando il drag & drop nella finestra dell'emulatore.

Poi, apri l'app.

Compila lo script dell'agente con frida-compile:

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

Apri l'app nell'emulatore.

Fuzza la funzione test_func della libreria libnative-lib.so fornita con l'app di test con il comando:

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

I testcase interessanti e i crash vengono entrambi salvati in output_folder.

Buon divertimento.

screen1

TODO

Ehi community OSS, ci sono molti TODO se qualcuno vuole contribuire.

  • Fuzzing del codice Java (in attesa di ulteriori metodi esposti in frida-java-bridge, dovrebbe essere facile, quasi finito)
  • stage splice (unire due testcase in coda e applicare havoc su di esso)
  • supporto dizionari (e quindi modificare anche havoc)
  • selezione dei semi
  • strumentazione inline per arm64
  • scoring delle prestazioni (esplorare la schedulazione di AFL)
  • mutatore strutturale (mutare i byte basandosi su una grammatica scritta in JSON)
  • CompareCoverage (profilazione a livello di sotto-istruzione per bypassare i blocchi del fuzzing)
  • riscrivere frida-fuzzer in C con frida-core per poter eseguire tutto sul dispositivo mobile

Se hai dubbi su una di queste funzionalità, sentiti libero di scrivermi in DM su Twitter.

Per proposte di funzionalità, c'è la sezione Issues.

Scarica lo strumento
-i FOLDERCartella con i semi iniziali
-o FOLDERCartella di output con semi e crash intermedi
-UConnetti via USB
-spawnAvvia e collega invece di semplicemente collegare
-script SCRIPTNome del file script (predefinito è fuzzer-agent.js)