Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
ida_kcpp — Un module IDAPython pour améliorer le support du c++ au-dessus de ida_kernelcache. | Kitploit
Outils/GitHubGitHub/cellebrite-labs/ida_kcpp
Analyse StatiqueSécurité iOSRétro-ingénierieSécurité MobileAnalyse de Binaires
GitHubcellebrite-labs/ida_kcpp

ida_kcpp

Un module IDAPython pour améliorer le support du c++ au-dessus de ida_kernelcache.

Voir le dépôt
1421535il y a 2 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

ida_kcpp

Un module IDAPython offrant une façon bien plus pratique de faire de l'ingénierie inverse sur les kernelcaches iOS.

Une grande partie du kernelcache iOS est écrite en C++, qui, une fois compilé en code binaire complexe, utilise de nombreux déréférencements de tables virtuelles plutôt que des appels directs explicites. ida_kcpp tire parti de la reconstruction de la hiérarchie de classes de ida_kernelcache. Il met en correspondance l'IDB et synchronise les fonctions binaires avec les méthodes virtuelles d'origine. Il permet de naviguer dans le kernelcache iOS en double-cliquant sur un appel de méthode virtuelle C++, en trouvant leurs xrefs, et en maintenant le tout synchronisé pendant la recherche en direct.

ida_kcpp est inspiré par ida_medigate mais bénéficie de la structure unique du kernelcache iOS et offre un environnement de recherche plus puissant et plus pratique.

general_view

Installation

  • Installer ida_kernelcache (fork de Cellebrite)
  • Facultatif, mais fortement recommandé : installer ida-referee (fork de Cellebrite) pour le suivi des xrefs des champs de structures depuis les accès du décompilateur

Aucun des deux n'est sur PyPI, donc suivez les instructions d'installation dans leurs dépôts.

Avec ida-setup :

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

Ou manuellement :

  1. Installez ida-netnode
  2. Assurez-vous que ida_kernelcache et ida_kcpp se trouvent dans le chemin Python d'IDA.

Peut également être ajouté en insérant dans ~/.idapro/idapythonrc.py :

import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
  1. créer un lien symbolique de ~/.idapro/plugins/ida_kcpp_plugin.py vers ida_kcpp_plugin.py

Utilisation

Analyse préliminaire

  1. Ouvrir le kernelcache analysé. Si ida_kernelcache n'a pas encore été exécuté, veuillez l'exécuter via edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernel
  2. Exécuter Edit >> Plugins >> Kernel Cache CPP >> Perform Initial sync... (Des boîtes de dialogue d'avertissement peuvent apparaître, vous pouvez les ignorer pour l'instant). Cette étape renomme les noms des fonctions virtuelles en définissant leur préfixe sur la classe à laquelle elles appartiennent. Cette étape décompile également toutes les fonctions virtuelles, définit leur argument this, et modifie le membre ::vmethods concerné pour qu'il soit un pointeur de fonction vers le type décompilé. Cette étape peut prendre un certain temps...
  3. Il existe maintenant un « IDB synchronisé », mais attention - le plugin n'est pas encore activé.

Activation du plugin pour un IDB synchronisé

ida_kcpp propage automatiquement les noms et les prototypes, et modifie également certains aspects de la navigation dans IDA ; il n'est donc pas activé automatiquement mais peut être activé ou désactivé à tout moment.

Activer ida_kcpp en cliquant sur edit >> Plugins >> Kernel Cache CPP >> Activate Plugin (Cela installera les hooks Hexrays et exécutera également ida_kernelcache.collect_class_info())

Désactiver le plugin

en cliquant sur Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin

Aperçu des fonctionnalités

Synchroniseur de fonctions virtuelles

Renommage des fonctions virtuelles

Lors du renommage d'une fonction virtuelle, on peut modifier le nom mangled (par exemple __ZNK10AppleA7IOP9method_86Ev_99), ou le changer en un nom lisible par un humain (AppleA7IOP::method_86) qui sera mangled automatiquement. Le membre ANCESTOR::vmethods concerné sera également renommé, et toutes les fonctions virtuelles qui implémentent la même méthode virtuelle seront aussi renommées.

Mise à jour du prototype des fonctions virtuelles

Il en va de même pour le changement de prototype d'une fonction virtuelle. Dans ce cas, le prototype du membre ANCESTOR::vmethods concerné sera changé en un pointeur de fonction vers le type qui vient d'être défini, en définissant this comme ANCESTOR *. De plus, les prototypes de toutes les implémentations pertinentes de la méthode virtuelle des DESCENDANTS de l'ANCESTOR seront modifiés, en définissant leur this comme DESCENTANT *.

XREFS améliorés

  • Nous ajoutons une xref de chaque fonction virtuelle vers son membre abstrait ::vmethods.
  • En utilisant ida_referee, nous pouvons suivre les utilisations de chaque champ, et en particulier du membre ::vmethods (appels virtuels) dans le décompilateur.
    • Nous avons également ajouté le raccourci CTRL+SHIFT+Y depuis une fonction virtuelle, pour ouvrir directement la fenêtre des xrefs vers son membre ::vmethod concerné. IDA a un bug et cela ne fonctionne que depuis la fenêtre de désassemblage et non depuis le décompilateur.

Navigation améliorée

  • Décompilateur : un double-clic sur un appel de fonction virtuelle fait apparaître une fenêtre permettant à l'utilisateur de choisir l'implémentation de la méthode virtuelle.

    image-20220707161129479

  • Vue Local Types (Shift+F1) :

    • Un double-clic sur une méthode virtuelle navigue vers l'implémentation (remarque : IDA 9 affiche également une boîte de dialogue de renommage qui peut être ignorée)
    • Cmd+Enter sur une méthode virtuelle navigue également vers l'implémentation (alternative plus propre au double-clic)
    • Correction d'un bug d'IDA où un double-clic sur un nom de struct contenant :: ne sautait pas.

Améliorations futures

  1. Ajout de la prise en charge de la compatibilité avec les classes C++ d'IDA 7.2. Nécessite de modifier la disposition des structs d'ida_kernelcache, ce que nous n'avons pas encore fait pour des raisons d'héritage.
  2. Ajout d'une interface de résolution des noms/prototypes pour les conflits.

Méta

Réalisé par Uriel Malin, Ievgen Solodovnykov et Omer Porzecanski de Cellebrite Labs. Développé et testé pour IDA 9.2 sur macOS avec Python 3.13

Télécharger l’outil