Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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
GhidraEmu — Native Pcode emulator | Kitploit
Herramientas/GitHubGitHub/nalen98/ghidraemu
Dynamic Code Analysis (DAST)Reverse EngineeringDebuggersBinary Analysis
GitHubnalen98/ghidraemu

GhidraEmu

Native Pcode emulator

Ver Repositorio
30523hace 2 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

GhidraEmu



Este plugin experimental de Ghidra te permite lidiar fácilmente con la emulación nativa de pcode. Ya no se necesitan scripts, úsalo directamente desde Ghidra. Puede ser especialmente útil para trabajar con una variedad de procesadores exóticos que no son compatibles con los emuladores comunes.

Si el procesador/vm es compatible con Ghidra para ingeniería inversa, ¡puede emularse! Por ejemplo, la emulación de instrucciones eBPF se demuestra a continuación:

GhidraEmu

Qué puede hacer

En esencia, el plugin es un envoltorio extendido alrededor de las clases dentro del paquete ghidra.app.emulator. Esto es lo que se ha implementado:

  • Funciona con todas las arquitecturas que Ghidra soporta, por lo que puedes añadir procesadores exóticos y emularlos
  • Emulación de contexto de CPU, pila y heap
  • Aplicar bytes parcheados a través de la GUI de Ghidra para cambiar el curso de la emulación
  • Puntos de interrupción para controlar el proceso de emulación
  • Mostrar bytes modificados durante la emulación en el ByteViewer
  • Enganche de algunas funciones de libc (aunque esto sigue siendo pobre)

Aunque la emulación de PCode idealmente implica unificación, la mayoría de los procesadores necesitan su propio enfoque. No dudes en informar de cualquier problema que encuentres. Me encantaría probar todos los procesadores, pero es casi imposible.

Qué no puede hacer

  • Entrar en funciones de bibliotecas externas (restricciones de EmulatorHelper)
  • Emulación de syscalls

Todas las ventanas del plugin en un solo conjunto

GhidraEmu

Características

Ventana de menú

Contiene todas las ventanas del plugin: Vista de pila, Registros, Vista de puntos de interrupción y Ventana principal.

Menú de GhidraEmu

Ventana emergente

Contiene atajos de teclado para establecer el inicio y fin de la emulación, puntos de interrupción y aplicar bytes modificados al estado del emulador.

Vista de registros

Cambia los registros como quieras. Establecer el registro de enlace (flecha verde) ayudará al emulador a entender qué registro contiene la dirección de retorno. El plugin sabe cómo funciona a través de la pila, el registro lr, AARCH64 y los registros MIPS. Si tienes uno exótico, selecciona el registro de enlace y pulsa el botón.

Vista de pila

Cuando abres tu programa en el CodeBrowser, GhidraEmu mapeará el espacio de la pila automáticamente. El puntero de pila se establecerá en medio del rango de la pila. Esto te permite establecer valores en la parte superior o inferior de los marcos de pila. Desplázala si experimentas congelaciones al actualizar o restablecer. Durante el proceso de emulación, si el programa necesita más espacio para la pila, el plugin lo asignará automáticamente.

Vista de puntos de interrupción

Vista de RAM

Si algún byte cambia durante la emulación, lo verás en el ByteViewer clásico. No te preocupes, se restablecerán a sus valores originales después de pulsar el botón "Reset".

Aplicar bytes parcheados

Si hiciste cambios, haz que el emulador se entere de los bytes modificados (la pila se actualiza automáticamente, no es necesario). Después de cambiar, selecciónalos (se pondrán en verde) y pulsa esta opción (o usa el atajo de teclado "M").

GhidraEmu aplicar bytes parcheados

Consola

Aquí el plugin imprime información de salida. Por ejemplo, mensajes de error de emulación como este:

Consola de GhidraEmu

Nueva característica - Saltar (Jump Over)

La característica "Jump Over" te permite saltar una instrucción si no quieres emular la actual por alguna razón. Dado que el proceso de emulación se abortará si se detecta un intento de leer memoria no inicializada, esta característica te permite omitirlo. Mira un ejemplo. Esta es una de las primeras instrucciones en muchos programas x86_64, el guardado del canario en la pila:

MOV RAX, qword ptr FS:[0x28]

Solo intentaremos hacer un poco de trampa y saltarla incrementando el valor del PC. Para ello, detente en la instrucción que no quieres emular y pulsa el atajo J. De lo contrario, continuar provocaría un error de lectura de memoria no inicializada.

Jump Over

Nueva característica - Pasar por encima (Step Over)

Si te detienes en una instrucción que conduce a una subrutina (llamada interna) y quieres emular todo hasta la siguiente instrucción (el clásico "step over"), pulsa el atajo F6 y ciertamente sucederá:

Step Over

Antes de comenzar

Algunos puntos importantes a considerar:

  • No olvides analizar tu programa en Ghidra, el emulador depende de ello.
  • Como ya se mencionó, establece el registro de enlace si tienes un procesador/vm exótico.
  • Si el procesador de tu binario necesita ciertos segmentos de memoria según la especificación, no olvides crearlos en la Ventana de MemoryMap de Ghidra e inicializarlos con ceros. De lo contrario, el emulador se quejará de espacios de memoria desconocidos durante las operaciones de lectura/escritura y detendrá el proceso de emulación. Si un bloque de memoria existe pero no está inicializado con ceros y es necesario para el emulador, el plugin intentará inicializarlo para que la emulación continúe.
  • Si has cambiado algún byte a través del ByteViewer, el plugin no los restaurará a sus valores originales al restablecer el estado de la emulación.
  • Antes de cerrar el proyecto en Ghidra, debes pulsar el botón "Reset" y restablecer el estado de la última emulación si aún no se ha hecho. Esto es importante porque en el momento del cierre, las transacciones de repintado de instrucciones trazadas en el Listing no se ejecutarán, así como las transacciones de restauración de bytes del programa después de la emulación. Esto puede llevar no solo a contemplar el "viejo loro amarillo", que es el menor de los problemas, sino también a que los bytes modificados permanezcan como tales y no vuelvan a sus valores originales (a menos que el proyecto se revierta en Ghidra, por supuesto).

Instalación

  1. Usa gradle para compilar la extensión: GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle y usa Ghidra para instalarla: File → Install Extensions...

  2. En el CodeBrowser, ve a File → Configure → Miscellaneous y marca la casilla del plugin GhidraEmu.

Comentarios

¿Encontraste algún error al usar el plugin o tienes ideas para mejoras? No seas tímido, abre un nuevo issue y lo resolveré.

Trabajo futuro

Las restricciones de EmulatorHelper no permiten usar el espacio de programa en otro. Por lo tanto, tu biblioteca compartida externa, por ejemplo, nunca sabrá del espacio de memoria del programa y viceversa. Así que no puedes emularla como un solo proceso con un solo espacio de memoria. Avísame si me estoy perdiendo algo aquí.

Descargar herramienta