
Un módulo de IDAPython para mejorar el soporte de c++ sobre ida_kernelcache
Un módulo de IDAPython para una forma mucho más conveniente de hacer ingeniería inversa de kernelcaches de iOS.
Una gran parte del kernelcache de iOS está escrita en C++, que se compila en código binario complicado y utiliza muchas desreferencias de tablas virtuales en lugar de llamadas directas explícitas. ida_kcpp aprovecha la reconstrucción de la jerarquía de clases de ida_kernelcache. Mapea el IDB y sincroniza las funciones binarias con los métodos virtuales originales. Permite la navegación a través del kernelcache de iOS haciendo doble clic en la llamada a un método virtual de C++, encontrando sus xrefs y manteniendo todo sincronizado durante la investigación en vivo.
ida_kcpp está inspirado en ida_medigate, pero se beneficia de la estructura única del kernelcache de iOS y proporciona un entorno de investigación más potente y conveniente.

Ninguno está en PyPI, así que sigue las instrucciones de instalación en sus repositorios.
Con ida-setup:
ida-setup plugin install -e /path/to/ida-kcpp
O manualmente:
ida_kernelcache e ida_kcpp estén en la ruta de python de IDA.También se puede añadir agregándolo en ~/.idapro/idapythonrc.py:
import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
~/.idapro/plugins/ida_kcpp_plugin.py a ida_kcpp_plugin.pyida_kernelcache aún no se ha ejecutado, ejecútelo en edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernelEdit >> Plugins >> Kernel Cache CPP >> Perform Initial sync... (Pueden aparecer algunos cuadros de mensaje de advertencia; por ahora puede ignorarlos). Este paso renombra los nombres de las funciones virtuales estableciendo su prefijo a la clase a la que pertenecen. Este paso también descompila todas las funciones virtuales, establece su argumento this y cambia el miembro ::vmethods correspondiente para que sea un puntero a función del tipo descompilado. Este paso puede tardar un rato...ida_kcpp propaga automáticamente nombres y prototipos, y también cambia algunos aspectos de la navegación en IDA, por lo que no se activa automáticamente, sino que en cualquier momento puede activarse o desactivarse.
Active ida_kcpp haciendo clic en edit >> Plugins >> Kernel Cache CPP >> Activate Plugin (Esto instalará los hooks de Hexrays y también ejecutará ida_kernelcache.collect_class_info())
haciendo clic en Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin
Al renombrar una función virtual se puede editar el nombre mangled (por ejemplo __ZNK10AppleA7IOP9method_86Ev_99), o cambiarlo a nombres legibles para humanos (AppleA7IOP::method_86) que se manglearán automáticamente. El miembro ANCESTOR::vmethods correspondiente también se renombrará, y también se renombrarán todas las funciones virtuales que implementan el mismo método virtual.
Lo mismo ocurre con el cambio del prototipo de una función virtual. En este caso, el prototipo del miembro ANCESTOR::vmethods correspondiente se cambiará a un puntero a función del tipo que se acaba de establecer, estableciendo this como ANCESTOR *. Además, los prototipos de todas las implementaciones relevantes del método virtual de los DESCENDIENTES de ANCESTOR se cambiarán, estableciendo su this como DESCENTANT *.
::vmethods.ida_referee podemos rastrear los usos de cada campo, y especialmente del miembro ::vmethods (llamadas virtuales) en el descompilador.
CTRL+SHIFT+Y desde una función virtual, para abrir directamente la ventana de xrefs a su miembro ::vmethod correspondiente. IDA tiene un bug y esto solo funciona desde la ventana de desensamblado y no desde el descompilador.Descompilador: Hacer doble clic en una llamada a función virtual abre una ventana que permite al usuario elegir la implementación del método virtual.

Vista de tipos locales (Shift+F1):
Cmd+Enter en un método virtual también navega a la implementación (alternativa más limpia al doble clic):: no saltaba.Creado por Uriel Malin, Ievgen Solodovnykov y Omer Porzecanski de Cellebrite Labs. Desarrollado y probado para IDA 9.2 en macOS con Python 3.13