Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
ida_kcpp — Un módulo de IDAPython para mejorar el soporte de c++ sobre ida_kernelcache | Kitploit
Herramientas/GitHubGitHub/cellebrite-labs/ida_kcpp
Análisis EstáticoSeguridad iOSIngeniería InversaSeguridad MóvilAnálisis de Binarios
GitHubcellebrite-labs/ida_kcpp

ida_kcpp

Un módulo de IDAPython para mejorar el soporte de c++ sobre ida_kernelcache

Ver Repositorio
1421536hace 2 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

ida_kcpp

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.

general_view

Instalación

  • Instalar ida_kernelcache (fork de Cellebrite)
  • Opcional, pero muy recomendado: instalar ida-referee (fork de Cellebrite) para el seguimiento de xrefs de campos de structs desde el acceso del decompilador

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:

  1. Instala ida-netnode
  2. Asegúrate de que 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)
  1. crear un enlace simbólico de ~/.idapro/plugins/ida_kcpp_plugin.py a ida_kcpp_plugin.py

Uso

Análisis preliminar

  1. Abra el kernelcache analizado. Si ida_kernelcache aún no se ha ejecutado, ejecútelo en edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernel
  2. Ejecute Edit >> 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...
  3. Ahora hay un "IDB sincronizado", pero preste atención: el plugin aún no está activado.

Activación del plugin para un IDB sincronizado

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())

Desactivar el plugin

haciendo clic en Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin

Descripción general de las funciones

Sincronizador de funciones virtuales

Renombrado de funciones virtuales

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.

Actualización del prototipo de funciones virtuales

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 *.

XREFS mejoradas

  • Añadimos una xref desde cada función virtual a su miembro abstracto ::vmethods.
  • Usando ida_referee podemos rastrear los usos de cada campo, y especialmente del miembro ::vmethods (llamadas virtuales) en el descompilador.
    • También añadimos el atajo 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.

Navegación mejorada

  • 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.

    image-20220707161129479

  • Vista de tipos locales (Shift+F1):

    • Hacer doble clic en un método virtual navega a la implementación (nota: IDA 9 también muestra un diálogo de renombrado que se puede descartar)
    • Cmd+Enter en un método virtual también navega a la implementación (alternativa más limpia al doble clic)
    • Se corrigió un bug de IDA por el cual el doble clic en el nombre de una estructura que contiene :: no saltaba.

Mejoras futuras

  1. Añadir compatibilidad con las clases de C++ de IDA7.2. Requiere cambiar el diseño de las estructuras de ida_kernelcache, lo cual aún no hemos hecho por razones de legado
  2. Añadir una interfaz de resolución de nombres/prototipos para conflictos.

Meta

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

Descargar herramienta