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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
ida_kernelcache — Un kit de herramientas de IDA para analizar kernelcaches de iOS. | Kitploit
Herramientas/GitHubGitHub/cellebrite-labs/ida_kernelcache
Análisis EstáticoSeguridad iOSAnálisis de VulnerabilidadesExplotaciónIngeniería InversaDepuradoresSeguridad MóvilAnálisis de Binarios
GitHubcellebrite-labs/ida_kernelcache

ida_kernelcache

Un kit de herramientas de IDA para analizar kernelcaches de iOS.

Ver Repositorio
1492914hace 1 mesRevisado 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_kernelcache: Un kit de herramientas de IDA para analizar kernelcaches de iOS

Fork de Cellebrite

Este fork se actualizó para funcionar con IDA 9.x / Python 3 / iOS 27.0 beta 1

README original

ida_kernelcache es un módulo de IDAPython para IDA Pro que facilita el trabajo con kernelcaches de iOS. El módulo proporciona funciones para:

  • Convertir los nuevos punteros etiquetados estáticos de iOS 12 en punteros de kernel normales.
  • Analizar el segmento __PRELINK_INFO del kernel y convertirlo en un diccionario de Python.
  • Renombrar los segmentos en IDA según el nombre de la extensión del kernel, el segmento Mach-O y la sección Mach-O.
  • Convertir punteros identificables en algunos segmentos en offsets de IDA.
  • Reconstruir la jerarquía de clases de C++ basándose en la información de OSMetaClass.
  • Simbolizar las tablas de métodos virtuales de C++ (tanto la propia vtable como sus métodos).
  • Simbolizar los offsets de las secciones __got y las funciones stub de las secciones __stubs.
  • Autogenerar estructuras de IDA que representen las tablas de métodos virtuales de C++.
  • Autogenerar estructuras de IDA que representen las clases de C++ del kernelcache basándose en los patrones de acceso observados.

La función de procesamiento principal está diseñada para ejecutarse antes de cualquier análisis manual o ingeniería inversa. Con la configuración predeterminada, IDA tiende a pasar por alto mucha información útil en el kernelcache. Estos scripts ayudan a IDA aprovechando la estructura conocida del kernelcache para propagar automáticamente información útil.

Además de la funcionalidad estándar del módulo, ida_kernelcache contiene varios scripts para facilitar el análisis del kernelcache de iOS. Por ejemplo, puedes usar los scripts para autogenerar estructuras de C utilizadas por una función.

Muchas de las técnicas utilizadas en ida_kernelcache fueron desarrolladas para y tomadas directamente de memctl.

Versiones

ida_kernelcache ha sido probado con IDA Pro 6.95 en kernelcaches de las versiones de iOS 10.1.1, 11.0, 11.2, 11.3.1 y 12.0 beta. Actualmente solo se admiten kernelcaches Arm64 de iOS 10 y posteriores.

Primeros pasos

Ya debes tener un archivo de kernelcache descomprimido cargado en IDA. Puedes encontrar la URL para descargar un IPSW concreto de Apple en línea, y hay una serie de herramientas públicas (incluido memctl) capaces de descomprimir el kernelcache.

En IDA, selecciona "File" -> "Script file..." en la barra de menú y luego elige el script ida_kernelcache.py del directorio principal. Esto cargará el módulo ida_kernelcache en el intérprete de IDAPython con los nombres ida_kernelcache y kc. En el prompt de IDAPython, escribe kc.kernelcache_process() y pulsa Enter para comenzar a analizar el kernelcache. Esta función realiza todos los análisis principales compatibles con ida_kernelcache. La función se ejecutará durante varios minutos mientras IDA identifica y analiza funciones nuevas.

ida_kernelcache intentará no sobrescribir los nombres de usuario de las direcciones. Esto significa que si el kernelcache ha sido analizado manualmente antes de la inicialización con kernelcache_process, los resultados pueden no ser tan exhaustivos porque los nombres especificados por el usuario pueden bloquear la propagación automática de nombres. Sin embargo, tampoco hay garantía de que ida_kernelcache no altere análisis previos, así que si decides ejecutar kernelcache_process en un archivo de kernelcache que ya hayas analizado, haz una copia de seguridad primero.

El módulo ida_kernelcache

ida_kernelcache está pensado para cargarse mediante ida_kernelcache.py; los submódulos del directorio ida_kernelcache no están pensados para cargarse directamente. Sin embargo, ida_kernelcache expone la funcionalidad de muchos de estos submódulos. Esto es lo que hace cada uno:

  • ida_utilities: Este módulo envuelve algunas de las funciones de IDA para ofrecer una API más fácil de usar. Particularmente útiles son is_mapped, read_word, read_struct, force_function y ReadWords. is_mapped comprueba si una dirección está mapeada y, opcionalmente, si contiene un valor conocido. read_word lee una palabra de tamaño variable desde una dirección. read_struct lee un tipo de estructura en un diccionario de Python o en un objeto de acceso de Python, lo que facilita mucho el análisis de estructuras de datos. force_function intenta varios trucos para convertir una dirección en el inicio de una función en IDA. ReadWords es un generador para iterar sobre palabras de datos y sus direcciones en un rango.

  • build_struct: Este módulo interno contiene utilidades para completar automáticamente una estructura de IDA basándose en una secuencia de accesos a la estructura.

  • class_struct: Este módulo proporciona funciones para generar estructuras de IDA que representan tablas de métodos virtuales de C++ y clases. initialize_vtable_structs escanea las tablas de métodos virtuales (simbolizadas) y crea estructuras de IDA para contener punteros a métodos virtuales. initialize_class_structs realiza un análisis de flujo de datos sobre los métodos virtuales para identificar accesos a los campos de cada clase y luego construye estructuras de IDA para representar las clases. Las instrucciones que parecen hacer referencia a un campo también se convierten en referencias de offset de estructura. Consulta la docstring del módulo para más detalles.

  • classes: Este módulo define el tipo ClassInfo que contiene información sobre las clases de C++ del kernelcache y proporciona la función collect_class_info para escanear el kernelcache en busca de clases y poblar el diccionario global class_info con un mapa de nombres de clase a objetos ClassInfo. El tipo ClassInfo registra el nombre de la clase, la instancia de OSMetaClass, la tabla de métodos virtuales y el nombre de la superclase para cada clase de C++. Además, cada objeto ClassInfo almacena referencias al ClassInfo de la superclase y al ClassInfo de todas las subclases directas, lo que facilita examinar y recorrer la jerarquía de clases. collect_class_info también almacena el conjunto de todas las tablas de métodos virtuales en el conjunto global vtables.

  • data_flow: Este módulo interno contiene operaciones de flujo de datos utilizadas por el resto de ida_kernelcache.

  • kernel: Este módulo proporciona las variables globales base y prelink_info. base es la dirección base de la imagen del kernel (el inicio del encabezado Mach-O del kernel). prelink_info es el diccionario __PRELINK_INFO analizado.

  • kplist: Este módulo proporciona la función kplist_parse para analizar plists de estilo kernel.

  • metaclass: Este módulo proporciona la función initialize_metaclass_symbols, que añade un símbolo para cada instancia de OSMetaClass conocida.

  • offset: Este módulo proporciona las funciones initialize_data_offsets e initialize_offset_symbols. La primera recorre los segmentos buscando punteros que puedan convertirse en offsets. La segunda simboliza los offsets de la sección __got de cada kext si el destino del offset tiene un símbolo.

Descargar herramienta