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
FindFunc — Plugin per IDA Pro per filtrare funzioni in base a pattern assembly, sequenze di byte, riferimenti a stringhe/nomi e vincoli di dimensione, con ricerca basata su regole e copia binaria avanzata. | Kitploit
Strumenti/GitHubGitHub/felixber/findfunc
Analisi StaticaAnalisi del CodiceReverse EngineeringDebuggerAnalisi di Binari
GitHubfelixber/findfunc

FindFunc

Plugin per IDA Pro per filtrare funzioni in base a pattern assembly, sequenze di byte, riferimenti a stringhe/nomi e vincoli di dimensione, con ricerca basata su regole e copia binaria avanzata.

Vedi Repository
362361710 mesi 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

FindFunc: Filtraggio/Ricerca Avanzata di Funzioni in IDA Pro

FindFunc è un plugin per IDA Pro per trovare funzioni che contengono un determinato pattern assembly o di byte, fanno riferimento a un certo nome o stringa, o soddisfano vari altri vincoli.

FindFunc si è classificato terzo nel 2022 HexRays IDA Pro Plugin Contest!

ffmain

Filtraggio con Regole

La funzionalità principale di FindFunc è permettere all'utente di specificare un insieme di "Regole" o vincoli che una funzione in IDA Pro deve soddisfare. FF troverà e elencherà tutte le funzioni che soddisfano TUTTE le regole (quindi attualmente tutte le Regole sono in congiunzione AND). Eccezione: le regole possono essere "invertite" per diventare corrispondenze negative. Tali regole quindi corrispondono a "AND NOT".

FF pianificherà le regole in un ordine intelligente per minimizzare il tempo di elaborazione. Panoramica delle funzionalità:

  • Attualmente 6 Regole disponibili, vedere sotto
  • Consapevole dei chunk delle funzioni
  • Pianificazione intelligente delle regole per le prestazioni
  • Salvataggio/Caricamento delle regole da/a file in formato ASCII semplice
  • Diverse schede indipendenti per esperimenti
  • Copia delle regole tra schede tramite clipboard (stesso formato del file)
  • Salvataggio dell'intera sessione (tutte le schede) su file
  • Copia avanzata dei byte delle istruzioni (tutti, solo opcode, tutti tranne immediati, ...)
  • Clonazione delle schede per esperimenti rapidi con raffinamento dei risultati
  • La corrispondenza del codice rispetta Addressing-Size-Prefix e Operand-Size-Prefix

Il pulsante "Find Functions" cancella i risultati esistenti e avvia una nuova ricerca, "Refine Results" considera solo i risultati della ricerca precedente.

Copia Binaria Avanzata

Una funzionalità secondaria di FF è l'opzione di copiare la rappresentazione binaria delle istruzioni con le seguenti opzioni:

  • copy all -> copia tutti i byte negli appunti
  • copy without immediates -> cancella (AA ?? BB) qualsiasi valore immediato nei byte dell'istruzione
  • opcode only -> cancella tutto tranne l'opcode effettivo dell'istruzione (e i prefissi)
  • ...

Vedere la sezione "copia avanzata" di seguito per i dettagli. Questa funzionalità si integra perfettamente con la regola Byte Pattern!

Costruzione e Installazione

FindFunc è un plugin Python per IDA Pro senza dipendenze da pacchetti esterni. Può essere installato scaricando il repository e copiando il file 'findfuncmain.py' e la cartella 'findfunc' nella directory dei plugin di IDA Pro. Per IDA 9.0+ il repository può anche essere clonato direttamente nella directory dei plugin. In ogni caso non è richiesta alcuna compilazione.

Requisiti: IDA Pro 8.x (8.3+) con ambiente python3. FindFunc è progettato solo per architettura x86/x64. È stato testato con IDA 8.3 - 9.2, python 3.11 su Windows 10 + 11

Regole Disponibili

Attualmente sono disponibili le seguenti sei regole. Sono ordinate qui dalla più pesante alla più leggera in termini di impatto sulle prestazioni. Con database grandi è una buona idea ridurre prima le funzioni candidate con una regola economica, prima di eseguire corrispondenze pesanti tramite es. Regole di codice. FF pianificherà automaticamente le regole in modo intelligente.

Pattern di Codice

Regola per filtrare le funzioni in base al fatto che contengono un dato snippet di codice assembly. NON è una ricerca testuale della rappresentazione testuale del disassembly di IDA, ma esegue una corrispondenza avanzata dell'istruzione sottostante. Lo snippet può contenere molte istruzioni consecutive, una per riga. I chunk delle funzioni sono supportati. Supporta la corrispondenza con wildcard speciali, oltre all'assembly letterale:

  • "pass" -> corrisponde a qualsiasi istruzione con qualsiasi operando
  • "mov* any,any" -> corrisponde a istruzioni con mnemonico "mov*" (es. mov, movzx, ...) e qualsiasi due argomenti.
  • "mov eax, r32" -> corrisponde a qualsiasi istruzione con mnemonico "mov", primo operando registro eax e secondo operando qualsiasi registro a 32 bit.
    • Analogamente: r per qualsiasi registro, r8/r16/r32/r64 per registro di larghezza specifica, "imm" per qualsiasi immediato
  • "mov r64, imm" -> corrisponde a qualsiasi trasferimento di una costante in un registro a 64 bit
  • "any r64,r64" -> corrisponde a qualsiasi operazione tra due registri a 64 bit
  • mov -> corrisponde a qualsiasi istruzione con mnemonico mov

altri esempi:

mov r64, [r32 * 8 + 0x100]
mov r, [r * 8 - 0x100]
mov r64, [r32 * 8 + imm]
pass
mov r, word [eax + r32 * 8 - 0x100]
any r64, r64
push imm
push any

Attenzione: Fare attenzione quando si copia assembly da IDA. IDA mescola nomi di variabili locali e altre informazioni nell'istruzione, portando al fallimento della corrispondenza. Inoltre, le etichette non sono supportate ("call sub_123456").

Nota che i Pattern di Codice sono la Regola più costosa, e se sono presenti solo Regole di Codice, FF non ha altra scelta che disassemblare l'intero database. Questo può richiedere fino a diversi minuti per binari molto grandi. Vedi note sulle prestazioni di seguito.

Valore Immediato (Costante)

La funzione deve contenere l'immediato dato almeno una volta in qualsiasi posizione. Un valore immediato è un valore fissato nella rappresentazione binaria dell'istruzione. Esempi di istruzioni che corrispondono al valore immediato 0x100:

mov eax, 0x100
mov eax, [0x100]
and al, [eax + ebx*8 + 0x100]
push 0x100

Gli immediati possono essere incollati direttamente dagli appunti nell'elenco delle regole. Nota: IDA esegue una corrispondenza estesa di qualsiasi dimensione e qualsiasi posizione dell'immediato. Se sai che ha una larghezza specifica di 4 o 8 byte, un pattern di byte può essere più veloce (ma può produrre falsi positivi).

Pattern di Byte

La funzione deve contenere il pattern di byte dato almeno una volta. Il pattern è dello stesso formato della ricerca binaria di IDA, e quindi supporta wildcard - la corrispondenza perfetta per la funzione di copia avanzata!

Esempi:

11 22 33 44 aa bb cc
11 22 33 ?? ?? bb cc -> ?? può essere qualsiasi byte

I pattern di byte possono essere incollati direttamente dagli appunti nell'elenco delle regole. Nota: La corrispondenza del pattern è abbastanza veloce e un buon candidato per ridurre rapidamente le corrispondenze!

Riferimento a Stringa

La funzione deve fare riferimento alla stringa data almeno una volta. La stringa viene confrontata secondo il modulo 'fnmatch' di Python, e quindi supporta corrispondenza con wildcard. La corrispondenza è case-insensitive. Vengono considerate stringhe dei seguenti formati: [idaapi.STRTYPE_C, idaapi.STRTYPE_C_16] (questo può essere modificato nella classe Config).

Esempi:

  • "TestString" -> la funzione deve fare riferimento esattamente alla stringa (ignorando maiuscole/minuscole) almeno una volta
  • "TestStr*" -> la funzione deve fare riferimento a una stringa che inizia con 'TestStr' (es. TestString, TestStrong) almeno una volta (ignorando maiuscole/minuscole)

Nota: La corrispondenza delle stringhe è veloce e una buona scelta per ridurre rapidamente i candidati!

Riferimento a Nome

La funzione deve fare riferimento al nome/etichetta dato almeno una volta. Il nome/etichetta viene confrontato secondo il modulo 'fnmatch' di Python, e quindi supporta corrispondenza con wildcard. La corrispondenza è case-insensitive.

Esempi:

  • "memset" -> la funzione deve fare riferimento a un nome "memset" almeno una volta
  • "mem*" -> la funzione deve fare riferimento a un nome che inizia con "mem" (memset, memcpy, memcmp) almeno una volta

Nota: La corrispondenza dei nomi è molto veloce e ideale per ridurre rapidamente i candidati!

Dimensione Funzione

Scarica lo strumento