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
ida_kcpp — Un modulo IDAPython per migliorare il supporto c++ basato su ida_kernelcache | Kitploit
Strumenti/GitHubGitHub/cellebrite-labs/ida_kcpp
Analisi StaticaSicurezza iOSReverse EngineeringSicurezza MobileAnalisi di Binari
GitHubcellebrite-labs/ida_kcpp

ida_kcpp

Un modulo IDAPython per migliorare il supporto c++ basato su ida_kernelcache

Vedi Repository
14215352 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

ida_kcpp

Un modulo IDAPython per un modo molto più comodo di fare Reverse Engineering dei kernelcache di iOS.

Gran parte del kernelcache di iOS è scritta in C++, che compilato in codice binario complicato utilizza molti dereferenziamenti di tabelle virtuali anziché chiamate dirette esplicite. ida_kcpp sfrutta la ricostruzione della gerarchia delle classi di ida_kernelcache. Mappa l'IDB e sincronizza le funzioni binarie e i metodi virtuali originali. Consente la navigazione attraverso il kernelcache di iOS facendo doppio clic sulla chiamata ai metodi virtuali C++, trovando i loro xref e mantenendo tutto sincronizzato durante la ricerca live.

ida_kcpp è ispirato a ida_medigate ma beneficia della struttura unica del kernelcache di iOS e fornisce un ambiente di ricerca più potente e conveniente.

general_view

Installazione

  • Installa ida_kernelcache (fork di Cellebrite)
  • Opzionale, ma altamente raccomandato: installa ida-referee (fork di Cellebrite) per il tracciamento degli xref dei campi delle struct dall'accesso del decompilatore

Nessuno dei due è su PyPI, quindi segui le istruzioni di installazione nei loro repository.

Con ida-setup:

ida-setup plugin install -e /path/to/ida-kcpp

Oppure manualmente:

  1. Installa ida-netnode
  2. Assicurati che ida_kernelcache e ida_kcpp siano nel path di IDA python.

Potrebbe anche essere aggiunto inserendolo in ~/.idapro/idapythonrc.py:

import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
  1. creare un symlink da ~/.idapro/plugins/ida_kcpp_plugin.py a ida_kcpp_plugin.py

Utilizzo

Analisi preliminare

  1. Aprire il kernelcache analizzato. Se ida_kernelcache non è ancora stato eseguito, eseguirlo tramite edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernel
  2. Eseguire Edit >> Plugins >> Kernel Cache CPP >> Perform Initial sync... (potrebbero comparire alcune finestre di avviso, per ora è possibile ignorarle). Questo passaggio rinomina i nomi delle funzioni virtuali impostando il loro prefisso alla classe a cui appartengono. Questo passaggio decompila inoltre tutte le funzioni virtuali, imposta il loro argomento this e modifica il relativo membro ::vmethods in modo che sia un puntatore a funzione del tipo decompilato. Questo passaggio può richiedere un po' di tempo...
  3. Ora è presente un "Synced IDB", ma attenzione - il plugin non è ancora attivato.

Attivazione del plugin per un IDB sincronizzato

ida_kcpp propaga automaticamente nomi e prototipi, e modifica anche alcuni aspetti della navigazione in IDA, pertanto non viene attivato automaticamente ma può essere attivato o disattivato in qualsiasi momento.

Attivare ida_kcpp facendo clic su edit >> Plugins >> Kernel Cache CPP >> Activate Plugin (questo installerà gli hook di Hexrays ed eseguirà anche ida_kernelcache.collect_class_info())

Disattivare il plugin

facendo clic su Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin

Panoramica delle funzionalità

Sincronizzatore delle funzioni virtuali

Ridenominazione delle funzioni virtuali

Quando si rinomina una funzione virtuale è possibile modificare il nome con mangling (ad esempio __ZNK10AppleA7IOP9method_86Ev_99), oppure cambiarlo con nomi leggibili (AppleA7IOP::method_86) che verranno sottoposti a mangling automaticamente. Il relativo membro ANCESTOR::vmethods verrà rinominato anch'esso, e anche tutte le funzioni virtuali che implementano lo stesso metodo virtuale verranno rinominate.

Aggiornamento del prototipo delle funzioni virtuali

Lo stesso vale per la modifica del prototipo di una funzione virtuale. In questo caso, il prototipo del relativo membro ANCESTOR::vmethods verrà modificato in un puntatore a funzione del tipo appena impostato, impostando this come ANCESTOR *. Inoltre, i prototipi di tutte le relative implementazioni del metodo virtuale dei DISCENDENTI di ANCESTOR verranno modificati, impostando il loro this come DESCENTANT *.

XREFS migliorati

  • Aggiungiamo un xref da ogni funzione virtuale al suo membro astratto ::vmethods.
  • Usando ida_referee possiamo tracciare gli utilizzi di ogni campo, e in particolare del membro ::vmethods (chiamate virtuali) nel decompilatore.
    • Abbiamo anche aggiunto la scorciatoia CTRL+SHIFT+Y dalla funzione virtuale, per aprire direttamente la finestra degli xref al relativo membro ::vmethod. IDA ha un bug e questo funziona solo dalla finestra di disassembly e non dal decompilatore.

Navigazione migliorata

  • Decompilatore: il doppio clic su una chiamata a funzione virtuale apre una finestra che consente all'utente di scegliere l'implementazione del metodo virtuale.

    image-20220707161129479

  • Vista Local Types (Shift+F1):

    • Il doppio clic su un metodo virtuale naviga verso l'implementazione (nota: IDA 9 mostra anche una finestra di ridenominazione che può essere chiusa)
    • Cmd+Enter su un metodo virtuale naviga anch'esso verso l'implementazione (alternativa più pulita al doppio clic)
    • Corretto un bug di IDA per cui il doppio clic sul nome di una struct che contiene :: non effettuava il salto.

Miglioramenti futuri

  1. Aggiunta del supporto per la compatibilità con le classi C++ di IDA 7.2. Richiede la modifica del layout delle struct di ida_kernelcache, cosa che non abbiamo ancora fatto per ragioni di compatibilità legacy
  2. Aggiunta di un'interfaccia di risoluzione di nomi/prototipi per i conflitti.

Meta

Realizzato da Uriel Malin, Ievgen Solodovnykov e Omer Porzecanski di Cellebrite Labs. Sviluppato e testato per IDA 9.2 su macOS con Python 3.13

Scarica lo strumento