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
ghidra_kernelcache — un framework de Ghidra para la ingeniería inversa del kernelcache de iOS | Kitploit
Herramientas/GitHubGitHub/0x36/ghidra_kernelcache
Seguridad iOSIngeniería InversaAnálisis de BinariosAnálisis de Firmware
GitHub0x36/ghidra_kernelcache

ghidra_kernelcache

un framework de Ghidra para la ingeniería inversa del kernelcache de iOS

Ver Repositorio
3703728hace 4 añosRevisado 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

ghidra_kernelcache: un framework de Ghidra para el kernelcache de iOS para ingeniería inversa

Este framework es el producto final de mi experiencia en la ingeniería inversa del Kernelcache. Normalmente busco vulnerabilidades auditando manualmente el kernel y sus extensiones, y he automatizado la mayoría de las cosas que realmente quería ver en Ghidra para agilizar el proceso de reversión, lo que ha demostrado ser eficaz y ahorra mucho tiempo. El framework funciona en iOS 12/13/14/15 y en macOS 11/12 (tanto kernelcache como KEXT individual) y se ha hecho público con la intención de ayudar a las personas a comenzar a investigar sobre el kernel de iOS sin la dificultad de preparar su propio entorno. Como creo, este framework (incluyendo el conjunto de herramientas que proporciona y con algunos conocimientos básicos de IOKit) es suficiente para empezar a hackear el Kernelcache.

El framework está completamente escrito en Python y se puede extender para construir otras herramientas; proporciona algunas API básicas que se pueden usar en casi cualquier proyecto y ahorrar tiempo de leer el manual detallado. Eres bienvenido a leer las funcionalidades principales en el directorio utils/.

Ghidra es bueno cuando se trata de analizar Kernelcaches, pero como otras herramientas de RE, requiere cierto trabajo manual; ghidra_kernelcache proporciona un buen punto de entrada para corregir cosas al inicio e incluso mientras se realiza la ingeniería inversa, proporcionando así una salida del descompilador de buen aspecto.

Hay un proyecto similar realizado por @_bazad en IDAPro llamado ida_kernelcache que proporciona un buen punto de entrada para investigadores que quieran trabajar con la imagen del kernel en IDA. Mi framework se parece un poco al trabajo de Brandon y va más allá al proporcionar muchas más características para hacer que el proceso de trabajar con el kernelcache sea menos tedioso.

Características:

  • Simbolización del kernelcache de *OS.
  • Reconstrucción de jerarquías de clases C++ y tablas virtuales.
  • Referencias a llamadas a métodos virtuales.
  • Corrección automática de la tabla de despacho de métodos externos tanto para ::externalMethod() como para ::getTargetAndMethodForIndex().
  • Aplicación de espacios de nombres a métodos de clase.
  • Propagación de nombres de símbolos y tipos sobre argumentos de funciones.
  • Aplicación de firmas de funciones para funciones conocidas del kernel.
  • Importación de estructuras y clases antiguas de un proyecto anterior a un proyecto nuevo.

Estas características se implementan como herramientas separadas que se pueden ejecutar mediante atajos de teclado o haciendo clic en sus iconos en la barra de herramientas.

Instalación

Clona el repositorio:```sh git clone https://github.com/0x36/ghidra_kernelcache.git

**Nota importante**: El proyecto ha sido probado en Ghidra 10.1_PUBLIC y 10.2_DEV y no es compatible con versiones anteriores.

Ve a *`Windows → Script Manager`,* haz clic en *`script Directory` ,* luego agrega *`ghidra_kernelcache`* a la lista de rutas de directorios.
Ve a *`Windows → Script Manager`,* en el listado de *scripts*, ve a la categoría *`iOS→kernel`* y marca los plugins que se ven allí, aparecerán en la Barra de Herramientas de GHIDRA.

En el directorio [logos/](https://github.com/0x36/ghidra_kernelcache/tree/master/logos), puedes poner tus propios logos para cada herramienta.

## Simbolización de iOS kernelcache

`ghidra_kernelcache` requiere en la primera etapa [iometa](https://github.com/Siguza/iometa/) (creado por [@s1guza](https://twitter.com/s1guza)), una herramienta potente que proporciona información de clases C++ en el binario del kernel, lo bueno es que funciona como un binario independiente, por lo que la salida se puede importar a tu framework de RE favorito simplemente analizándola. Mi framework toma la salida de iometa y la analiza para simbolizar y arreglar tablas virtuales.

### Uso

Después de descomprimir el kernel, ejecuta los siguientes comandos :```sh
$ iometa -n -A /tmp/kernel A10-legacy.txt > /tmp/kernel.txt
# if you want also to symbolicate using jtool2
$ jtool2 --analyze /tmp/kernel

Cargue el kernelcache en Ghidra, NO USE IMPORTACIÓN POR LOTES , cárguelo como imagen Mach-O. Después de que el kernelcache se haya cargado y analizado automáticamente, haga clic en el icono mostrado en la barra de herramientas o simplemente presione Meta-Shift-K, luego coloque la ruta completa de la salida de iometa que es /tmp/kernel.txt en nuestro caso.

Si desea usar símbolos de jtool2, puede usar jsymbol.py ubicado en la categoría iOS→kernel.

API de kernelcache de iOS

Ejemplos completos de la API están en ghidra_kernelcache/kc.py

→ Aquí hay algunos ejemplos de manipulación de objetos de clase:```py from utils.helpers import * from utils.class import * from utils.iometa import ParseIOMeta

ff = "/Users/mg/ghidra_ios/kernel.txt" iom = ParseIOMeta(ff) Obj = iom.getObjects() kc = kernelCache(Obj)

symbolicate the kernel

kc.process_all_classes()

symbolicate the classes under com.apple.iokit.IOSurface bundle

kc.process_classes_for_bundle("com.apple.iokit.IOSurface")

symbolicate the classes under kernel bundle

kc.process_classes_for_bundle("kernel")

Process one class (including its parents)

kc.process_class("IOGraphicsAccelerator2")

Clears the content of the class structures (vtables are excluded)

kc.clear_class_structures()

Overwrite the old vtable structure definition and resymbolicate it again

kc.update_classes_vtable()

Reconstructing function call trees by enumerating all pac references and find their corresponding virtual method call

kc.explore_pac()

Como puedes ver, puedes simbolizar completa o parcialmente el kernelcache, si se eligió la simbolización parcial, `ghidra_kernelcache` construirá automáticamente todas las dependencias de clases antes de continuar.
Si ejecutas el script contra todo el kernelcache (simbolización completa), `ghidra_kernelcache` tardará varios minutos en analizar la imagen del kernel.

Una vez terminado, Ghidra proporcionará lo siguiente :

→ Se ha añadido una nueva categoría en el Filtro de Marcadores llamada "iOS": 

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image1.png" alt="image1" width="200"/>
                    
                    
→ Las tablas virtuales de clases IOKit se añaden al Marcador 'iOS' para una búsqueda de tabla virtual más rápida y mejor; puedes buscar una kext o una clase proporcionando letras, palabras o el bundle de la kext en la barra de búsqueda.

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image2.png" alt="image2"/>


→ Corrección de la tabla virtual: desensambla/compila código desconocido, corrige espacios de nombres, resimboliza los métodos de clase y aplica la definición de función a cada método:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image3.png" alt="image3"/>

→  Creación de espacios de nombres de clase y coloca cada método en su propio espacio de nombres correspondiente:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image4.png" alt="image4"/>

→ Creación de la estructura de clase respetando la jerarquía de clases:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image5.png" alt="image5"/>

→ Creación de tablas virtuales de clase, y cada método tiene su propia definición de método para una mejor salida de descompilación: 

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image6.png" alt="image6"/>
Descargar herramienta