Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
ida_kcpp — Ein IDAPython-Modul zur Verbesserung der C++-Unterstützung auf Basis von ida_kernelcache | Kitploit
Tools/GitHubGitHub/cellebrite-labs/ida_kcpp
Statische AnalyseiOS-SicherheitReverse EngineeringMobile SicherheitBinäranalyse
GitHubcellebrite-labs/ida_kcpp

ida_kcpp

Ein IDAPython-Modul zur Verbesserung der C++-Unterstützung auf Basis von ida_kernelcache

Repository anzeigen
1421535vor 2 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

ida_kcpp

Ein IDAPython-Modul für eine deutlich komfortablere Art des Reverse Engineering von iOS-Kernelcaches.

Ein großer Teil des iOS-Kernelcaches ist in C++ geschrieben, das zu kompliziertem Binärcode kompiliert wird, der viele Virtual-Table-Dereferenzierungen anstelle von expliziten direkten Aufrufen verwendet. ida_kcpp nutzt die Rekonstruktion der Klassenhierarchie von ida_kernelcache. Es bildet die IDB ab und synchronisiert die Binärfunktionen mit den ursprünglichen virtuellen Methoden. Es ermöglicht die Navigation durch den iOS-Kernelcache per Doppelklick auf einen C++-Virtual-Method-Aufruf, das Auffinden ihrer Xrefs und hält all dies während der Live-Recherche synchronisiert.

ida_kcpp ist von ida_medigate inspiriert, profitiert jedoch von der einzigartigen Struktur des iOS-Kernelcaches und bietet eine leistungsfähigere und komfortablere Rechercheumgebung.

general_view

Installation

  • Installiere ida_kernelcache (Cellebrite's fork)
  • Optional, aber sehr empfehlenswert: Installiere ida-referee (Cellebrite's fork) für die Verfolgung von Xrefs auf Struct-Felder aus dem Decompiler-Zugriff

Keines der beiden ist auf PyPI verfügbar, daher folge den Installationsanweisungen in ihren Repos.

Mit ida-setup:

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

Oder manuell:

  1. Installiere ida-netnode
  2. Stelle sicher, dass ida_kernelcache und ida_kcpp im IDA-Python-Pfad liegen.

Kann auch durch Hinzufügen in ~/.idapro/idapythonrc.py ergänzt werden:

import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
  1. Symlink ~/.idapro/plugins/ida_kcpp_plugin.py auf ida_kcpp_plugin.py

Verwendung

Vorläufige Analyse

  1. Öffne den analysierten kernelcache. Falls ida_kernelcache noch nicht ausgeführt wurde, bitte ausführen über edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernel
  2. Führe Edit >> Plugins >> Kernel Cache CPP >> Perform Initial sync... aus (Es können einige Warnungs-Messageboxen erscheinen, diese können vorerst ignoriert werden). Dieser Schritt benennt die Namen der virtuellen Funktionen um, indem deren Präfix auf die Klasse gesetzt wird, zu der sie gehören. Dieser Schritt dekompiliert außerdem alle virtuellen Funktionen, setzt deren this-Argument und ändert das relevante ::vmethods-Member in einen Funktionszeiger auf den dekompilierten Typ. Dieser Schritt kann eine Weile dauern...
  3. Nun gibt es eine "Synced IDB", aber Achtung – das Plugin ist noch nicht aktiviert.

Plugin-Aktivierung für eine synced IDB

ida_kcpp propagiert automatisch Namen und Prototypen und ändert außerdem einige Aspekte der Navigation in IDA, daher wird es nicht automatisch aktiviert, kann aber jederzeit aktiviert oder deaktiviert werden.

Aktiviere ida_kcpp durch Klicken auf edit >> Plugins >> Kernel Cache CPP >> Activate Plugin (Dies installiert die Hexrays-Hooks und führt außerdem ida_kernelcache.collect_class_info() aus)

Plugin deaktivieren

Klicken auf Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin

Funktionsübersicht

Synchronisierer für virtuelle Funktionen

Umbenennen virtueller Funktionen

Beim Umbenennen einer virtuellen Funktion kann man den mangled Namen bearbeiten (zum Beispiel __ZNK10AppleA7IOP9method_86Ev_99) oder ihn in menschenlesbare Namen ändern (AppleA7IOP::method_86), die automatisch gemangelt werden. Das relevante ANCESTOR::vmethods-Member wird ebenfalls umbenannt, und auch alle virtuellen Funktionen, die dieselbe virtuelle Methode implementieren, werden umbenannt.

Aktualisieren von Prototypen virtueller Funktionen

Dasselbe gilt für das Ändern von Prototypen virtueller Funktionen. In diesem Fall wird der Prototyp des relevanten ANCESTOR::vmethods-Members in einen Funktionszeiger auf den gerade gesetzten Typ geändert, wobei this als ANCESTOR * gesetzt wird. Außerdem werden die Prototypen aller relevanten Implementierungen der virtuellen Methode der DESCENDANTS von ANCESTOR geändert, wobei deren this auf DESCENTANT * gesetzt wird.

Verbesserte XREFS

  • Wir fügen einen xref von jeder virtuellen Funktion zu ihrem abstrakten ::vmethods-Member hinzu.
  • Mit ida_referee können wir die Verwendungen jedes Feldes verfolgen, insbesondere des ::vmethods-Members (virtuelle Aufrufe) im Dekompiler.
    • Wir haben außerdem den Hotkey CTRL+SHIFT+Y von einer virtuellen Funktion hinzugefügt, um direkt das xrefs-Fenster für ihr relevantes ::vmethod-Member zu öffnen. IDA hat einen Bug, und dies funktioniert nur aus dem Disassembly-Fenster und nicht aus dem Dekompiler.

Verbesserte Navigation

  • Dekompiler: Ein Doppelklick auf einen Aufruf einer virtuellen Funktion öffnet ein Fenster, das es dem Benutzer ermöglicht, die Implementierung der virtuellen Methode auszuwählen.

    image-20220707161129479

  • Local Types-Ansicht (Shift+F1):

    • Ein Doppelklick auf eine virtuelle Methode navigiert zur Implementierung (Hinweis: IDA 9 zeigt außerdem einen Umbenennen-Dialog an, der geschlossen werden kann)
    • Cmd+Enter auf einer virtuellen Methode navigiert ebenfalls zur Implementierung (sauberere Alternative zum Doppelklick)
    • Ein IDA-Bug wurde behoben, bei dem ein Doppelklick auf einen Strukturnamen, der :: enthält, nicht springt.

Zukünftige Verbesserungen

  1. Unterstützung für die Kompatibilität mit C++-Klassen in IDA 7.2 hinzufügen. Erfordert eine Änderung des Layouts der ida_kernelcache-Strukturen, was wir aus Legacy-Gründen noch nicht getan haben
  2. Eine Schnittstelle zur Namens-/Prototypauflösung für Konflikte hinzufügen.

Meta

Verfasst von Uriel Malin, Ievgen Solodovnykov und Omer Porzecanski von Cellebrite Labs. Entwickelt und getestet für IDA 9.2 auf macOS mit Python 3.13

Tool herunterladen