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_kernelcache — Ein IDA-Toolkit zur Analyse von iOS-Kernelcaches. | Kitploit
Tools/GitHubGitHub/bazad/ida_kernelcache
Embedded-System-SicherheitStatische AnalyseiOS-SicherheitSchwachstellenanalyseReverse EngineeringDebuggerMobile SicherheitBinäranalyseFirmware-Analyse
GitHubbazad/ida_kernelcache

ida_kernelcache

Ein IDA-Toolkit zur Analyse von iOS-Kernelcaches.

3058520vor 7 JahrenVon 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
Repository anzeigen

ida_kernelcache: Ein IDA-Toolkit zur Analyse von iOS-Kernelcaches

ida_kernelcache ist ein IDAPython-Modul für IDA Pro, das die Arbeit mit iOS-Kernelcaches erleichtert. Das Modul bietet Funktionen zum:

  • Konvertieren der neuen statischen getaggten Zeiger von iOS 12 in normale Kernel-Zeiger.
  • Parsen des __PRELINK_INFO-Segments des Kernels in ein Python-Wörterbuch.
  • Umbenennen der Segmente in IDA entsprechend dem Namen der Kernel-Erweiterung, dem Mach-O-Segment und dem Mach-O-Abschnitt.
  • Konvertieren identifizierbarer Zeiger in einigen Segmenten in IDA-Offsets.
  • Rekonstruieren der C++-Klassenhierarchie auf Grundlage der OSMetaClass-Informationen.
  • Symbolisieren von virtuellen C++-Methodentabellen (sowohl der vtable selbst als auch ihrer Methoden).
  • Symbolisieren von Offsets in __got-Abschnitten und Stub-Funktionen in __stubs-Abschnitten.
  • Automatisches Erzeugen von IDA-Strukturen, die die virtuellen C++-Methodentabellen repräsentieren.
  • Automatisches Erzeugen von IDA-Strukturen, die die C++-Klassen im Kernelcache auf der Grundlage beobachteter Zugriffsmuster repräsentieren.

Die Hauptverarbeitungsfunktion ist dafür ausgelegt, vor jeder manuellen Analyse oder jedem Reverse Engineering ausgeführt zu werden. Mit den Standardeinstellungen übersieht IDA im Kernelcache viele nützliche Informationen. Diese Skripte helfen IDA, indem sie die bekannte Struktur des Kernelcaches nutzen, um nützliche Informationen automatisch weiterzugeben.

Zusätzlich zur Standardfunktionalität des Moduls enthält ida_kernelcache mehrere Skripte, die die Analyse des iOS-Kernelcaches erleichtern. So können Sie die Skripte beispielsweise verwenden, um von einer Funktion verwendete C-Strukturen automatisch zu erzeugen.

Viele der in ida_kernelcache verwendeten Techniken wurden für memctl entwickelt und direkt daraus übernommen.

Versionen

ida_kernelcache wurde mit IDA Pro 6.95 an Kernelcaches für die iOS-Versionen 10.1.1, 11.0, 11.2, 11.3.1 und 12.0 Beta getestet. Derzeit werden nur Arm64-Kernelcaches ab iOS 10 unterstützt.

Erste Schritte

Sie benötigen eine bereits dekomprimierte Kernelcache-Datei, die in IDA geladen ist. Die URL zum Herunterladen eines bestimmten IPSW von Apple finden Sie online, und es gibt eine Reihe öffentlicher Tools (einschließlich memctl), die den Kernelcache dekomprimieren können.

Wählen Sie in IDA in der Menüleiste „Datei“ -> „Skript-Datei...“ und dann das Skript ida_kernelcache.py im Hauptverzeichnis. Dadurch wird das Modul ida_kernelcache unter den Namen ida_kernelcache und kc in den IDAPython-Interpreter geladen. Geben Sie in der IDAPython-Eingabeaufforderung kc.kernelcache_process() ein und drücken Sie die Eingabetaste, um die Analyse des Kernelcaches zu starten. Diese Funktion führt alle wichtigen Analysen aus, die von ida_kernelcache unterstützt werden. Die Funktion läuft mehrere Minuten, während IDA neue Funktionen identifiziert und analysiert.

ida_kernelcache versucht, Benutzernamen für Adressen nicht zu überschreiben. Das bedeutet, dass die Ergebnisse möglicherweise nicht so gründlich ausfallen, wenn der Kernelcache vor der Initialisierung mit kernelcache_process manuell analysiert wurde, da benutzerdefinierte Namen die automatische Namensweitergabe blockieren können. Es gibt jedoch auch keine Garantie, dass ida_kernelcache eine frühere Analyse nicht durcheinanderbringt. Wenn Sie sich also entscheiden, kernelcache_process für eine bereits analysierte Kernelcache-Datei auszuführen, erstellen Sie zuerst ein Backup.

Das ida_kernelcache-Modul

ida_kernelcache soll über ida_kernelcache.py geladen werden; die Untermodule im Verzeichnis ida_kernelcache sind nicht für das direkte Laden gedacht. ida_kernelcache stellt jedoch die Funktionalität vieler dieser Untermodule bereit. Hier ist, was jedes von ihnen tut:

  • ida_utilities: Dieses Modul kapselt einige Funktionen von IDA, um eine benutzerfreundlichere API bereitzustellen. Besonders nützlich sind is_mapped, read_word, read_struct, force_function und ReadWords. is_mapped prüft, ob eine Adresse gemappt ist, und optional, ob sie einen bekannten Wert enthält. read_word liest ein Wort variabler Größe von einer Adresse. read_struct liest einen Strukturtyp in ein Python-Wörterbuch oder ein Python-Zugriffsobjekt, was das Parsen von Datenstrukturen erheblich erleichtert. force_function versucht verschiedene Tricks, um eine Adresse in IDA in den Anfang einer Funktion umzuwandeln. ReadWords ist ein Generator, der über Datenwörter und ihre Adressen in einem Bereich iteriert.

  • build_struct: Dieses interne Modul enthält Hilfsmittel, um eine IDA-Struktur automatisch auf der Grundlage einer Sequenz von Zugriffen auf die Struktur zu befüllen.

  • class_struct: Dieses Modul stellt Funktionen zur Erzeugung von IDA-Strukturen bereit, die virtuelle C++-Methodentabellen und -Klassen repräsentieren. initialize_vtable_structs scannt die (symbolisierten) Tabellen virtueller Methoden und erstellt IDA-Strukturen zur Aufnahme von Zeigern auf virtuelle Methoden. initialize_class_structs führt eine Datenflussanalyse der virtuellen Methoden durch, um Zugriffe auf die Felder jeder Klasse zu identifizieren, und erstellt dann IDA-Strukturen, die die Klassen repräsentieren. Anweisungen, die offenbar auf ein Feld verweisen, werden ebenfalls in Strukturoffset-Verweise umgewandelt. Weitere Einzelheiten finden Sie im Docstring des Moduls.

  • classes: Dieses Modul definiert den Typ ClassInfo, der Informationen über C++-Klassen im Kernelcache speichert, und stellt die Funktion collect_class_info bereit, die den Kernelcache nach Klassen durchsucht und das globale Wörterbuch class_info mit einer Zuordnung von Klassennamen zu ClassInfo-Objekten befüllt. Der Typ ClassInfo erfasst für jede C++-Klasse den Klassennamen, die OSMetaClass-Instanz, die Tabelle der virtuellen Methoden und den Namen der Superklasse. Darüber hinaus speichert jedes ClassInfo-Objekt Verweise auf das ClassInfo der Superklasse und das ClassInfo aller direkten Unterklassen, wodurch die Klassenhierarchie leicht untersucht und durchlaufen werden kann. collect_class_info speichert außerdem die Menge aller Tabellen virtueller Methoden in der globalen Menge vtables.

  • data_flow: Dieses interne Modul enthält Datenflussoperationen, die vom Rest von ida_kernelcache verwendet werden.

  • kernel: Dieses Modul stellt die globalen Variablen base und prelink_info bereit. base ist die Basisadresse des Kernel-Images (der Anfang des Mach-O-Headers des Kernels). prelink_info ist das geparste __PRELINK_INFO-Wörterbuch.

  • kplist: Dieses Modul stellt die Funktion kplist_parse zum Parsen von PListen im Kernel-Stil bereit.

  • metaclass: Dieses Modul stellt die Funktion initialize_metaclass_symbols bereit, die für jede bekannte OSMetaClass-Instanz ein Symbol hinzufügt.

  • offset: Dieses Modul stellt die Funktionen initialize_data_offsets und initialize_offset_symbols bereit. Erstere durchsucht die Segmente nach Zeigern, die in Offsets umgewandelt werden können. Letztere symbolisiert Offsets im __got-Abschnitt jedes Kexts, wenn das Ziel des Offsets ein Symbol hat.

Tool herunterladen