
Un module IDAPython pour améliorer le support du c++ au-dessus de ida_kernelcache.
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.

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 :
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)
~/.idapro/plugins/ida_kcpp_plugin.py vers ida_kcpp_plugin.pyida_kernelcache n'a pas encore été exécuté, veuillez l'exécuter via edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernelEdit >> 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...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())
en cliquant sur Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin
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.
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 *.
::vmethods.ida_referee, nous pouvons suivre les utilisations de chaque champ, et en particulier du membre ::vmethods (appels virtuels) dans le décompilateur.
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.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.

Vue Local Types (Shift+F1) :
Cmd+Enter sur une méthode virtuelle navigue également vers l'implémentation (alternative plus propre au double-clic):: ne sautait pas.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