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
CodeCut — Un plugin de Ghidra para localizar límites de archivos de objeto. | Kitploit
Herramientas/GitHubGitHub/jhuapl/codecut
Análisis EstáticoIngeniería InversaAnálisis de BinariosAprendizaje Automático
GitHubjhuapl/codecut

CodeCut

Un plugin de Ghidra para localizar límites de archivos de objeto.

Ver Repositorio
13123hace 7 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

Plugin CodeCut para Ghidra

Plugin de Ghidra para la GUI de DeepCut / CodeCut

Teoría de funcionamiento

CodeCut permite al usuario asignar funciones a archivos objeto en Ghidra y, a continuación, interactuar con el binario a nivel de archivo objeto. Las funciones se asignan a archivos objeto estableciendo el campo Namespace en la base de datos de Ghidra. DeepCut intenta establecer los límites iniciales de los archivos objeto, que el usuario puede ajustar después mediante la ventana de la tabla CodeCut.

¿Por qué es útil?

La mayoría de los binarios se originan a partir de múltiples archivos de código fuente. Al realizar ingeniería inversa, los analistas de RE a menudo desarrollan una idea de qué funciones están relacionadas y, por lo tanto, probablemente pertenecían al mismo archivo de código fuente. CodeCut permite al analista formular una hipótesis como "Creo que este bloque de funciones son funciones del OS." Ahora bien, si hay funciones sin explorar en esa región, aparecerán en el desensamblado y la descompilación como OS::FUN_XXXXXXXX en lugar de simplemente FUN_XXXXXXXX. Esto permite comprender más rápidamente para qué podrían utilizarse las funciones cuando se ven en contexto.

Instalación del plugin

Siga los procedimientos normales de instalación de extensiones de Ghidra. Copie el zip de las extensiones CodeCut y DeepCut en $GHIDRA_INSTALL_DIR/Extensions y, a continuación, en la ventana principal de Ghidra seleccione File -> Install Extensions y marque las casillas CodeCut y DeepCut. Ghidra le indicará que necesita reiniciarse. Dado que Ghidra ahora solo exige que los plugins coincidan con la versión major/minor de la versión base y no con las versiones patch, esperamos publicar únicamente versiones major/minor pares.

NOTA: Después de reiniciar y cargar una ventana CodeBrowser, Ghidra le indicará que ha encontrado nuevos plugins y le preguntará si desea configurarlos. Solo CodeCut aparece en esta ventana. Esto se debe a que DeepCut es un analizador "one-shot" (aunque sigue instalado).

Configuración de rutas de Python nativo y dependencias de Python

Tanto CodeCut como DeepCut dependen de la extensión PyGhidra nativa y no son compatibles con Jython. CodeCut utiliza Python nativo para adivinar los nombres de los módulos. La inferencia del modelo de DeepCut se ejecuta en Python nativo.

Dependencias de Python nativo

CodeCut:

  • nltk

DeepCut:

  • torch
  • torch-geometric
  • networkx
  • scipy

Para instalar las dependencias, ejecute:

root@kitploit:~
pip install nltk
pip install torch torch-geometric networkx scipy

usando la instalación de Python vinculada a su PyGhidra.

Ejecución del análisis DeepCut

DeepCut se ejecuta mejor como un analizador one-shot después del autoanálisis inicial. Seleccione Analysis -> One Shot -> Deepcut. Después de que DeepCut se ejecute, puede ver los resultados consultando el campo Namespace en la vista Symbol Table.

Uso de CodeCut

Después de que DeepCut se ejecute, puede interactuar a nivel de archivo objeto con la vista CodeCut Table. Seleccione Window -> CodeCut Table para mostrar la tabla. La tabla CodeCut es esencialmente un conjunto combinado de tablas de símbolos, una para cada módulo.

Puede hacer que CodeCut adivine los nombres de los módulos (basándose en referencias de cadenas) eligiendo Analysis -> Guess Module Names en la ventana de la tabla CodeCut. Esto es útil si su ejecutable objetivo tiene muchas cadenas de depuración. El script de adivinación de nombres intenta encontrar primero los nombres de archivos de código fuente y luego recurre a cadenas (incluidos bigramas y trigramas) que se repiten varias veces.

Puede dividir/combinar archivos objeto haciendo clic derecho en un objeto y eligiendo Split Namespace Here / Combine Namespaces. Puede mover funciones entre archivos objeto (cambiando los límites de los archivos objeto) arrastrándolas y soltándolas.

Exportación a C recompilable

CodeCut contiene dos opciones para exportar un módulo completo o un subrango de un módulo como C recompilable en el menú Export al hacer clic derecho en un módulo de la tabla CodeCut. Esta característica está marcada como EXPERIMENTAL y no está bien probada.

El gráfico de CodeCut

CodeCut ahora tiene una opción de gráfico para ver las interacciones / la jerarquía de los módulos dentro de un binario. Agregue namespaces a la vista de gráfico haciendo clic derecho en una función de la tabla CodeCut y eligiendo Add Namespace to Graph. Puede eliminar módulos del gráfico haciendo clic derecho y eligiendo Show Namespaces in Graph Filter.

Limitaciones

Tenga cuidado con dónde hace clic

Aunque parezca que puede hacer clic derecho en los nombres de los módulos del lado derecho, CodeCut en realidad presta atención a qué función está resaltada en la tabla. Así, por ejemplo, si tiene una función resaltada en object3 y hace clic derecho en el recuadro gris de object2 a la izquierda y hace clic en Combine/Split o Rename Namespaces, CodeCut realizará la operación sobre la función que tiene resaltada en object3.

Peculiaridades del rango de direcciones

CodeCut intenta ordenar los namespaces por su dirección de inicio. CodeCut puede parecer que lista los módulos en desorden; sin embargo, esto suele deberse a irregularidades del desensamblado de Ghidra. Por ejemplo, supongamos que tenemos un mapa de memoria como este:

root@kitploit:~
object2:  0x00010000 - 0x00018000
object3:  0x00018004 - 0x00020000
...
object50: 0x00480000 - 0x00480a00

Supongamos que la función en 0x00480000 hace una bifurcación o salto a una dirección 0x00016008. Debería ser un nuevo punto de entrada de función, pero si solo una función lo utiliza, Ghidra podría no etiquetarlo como punto de entrada de función y simplemente considerarlo parte de FUN_00480000. Esto significa que el rango real de object50 es 0x00016008 - 0x00480a00. Y, por lo tanto, object50 aparecerá entre object2 y object3 en la tabla. CodeCut envía los rangos de los módulos al registro de aplicación de Ghidra para ayudar a depurar este tipo de problemas. En este caso, definir 0x00016008 como función hará que los límites de object50 sean los valores correctos y object50 aparecerá en el lugar correcto de la tabla.

Definir funciones más tarde

Las funciones que se definen después de haber ejecutado el análisis DeepCut se agregan por defecto al namespace Global. En el futuro planeamos añadir una función que las agregue automáticamente al namespace más cercano, o proporcionar un mecanismo para asignar más fácilmente funciones individuales directamente a un namespace específico.

Compilación

Las instrucciones específicas de compilación se proporcionan en las subcarpetas DeepCut y CodeCut.

Descargar herramienta