Ghidra Downloadguía independiente de descarga e instalación
Español
GUÍA DE BÚSQUEDA EN GHIDRA

Buscar cadenas en Ghidra: direcciones, instrucciones y funciones

La forma más rápida de investigar un programa es convertir una pista vaga en un objetivo de búsqueda preciso. Esta guía explica cuándo usar Defined Strings, Search Program Text, Search Memory, Go To, Symbol Tree y las referencias cruzadas para pasar de una cadena o dirección a la función que la utiliza sin adivinar.

Abrir la documentación oficial de búsqueda de Ghidra
Tarea principalEncontrar evidencias
Mejor inicioCadena o dirección conocida
Vistas útilesListing + XREF + Decompiler
Versión revisadaGhidra 12.1.3
RESPUESTA RÁPIDA

Elige la herramienta según tu pista

Para buscar cadenas en Ghidra, decide primero si buscas datos que Ghidra ya definió, texto visible en el modelo del programa, bytes sin interpretar en memoria cargada o una dirección exacta. Defined Strings sirve como inventario, pero no equivale a una búsqueda completa. Una cadena corta puede no estar definida, un valor Unicode puede usar otra codificación y un valor fuera de los bloques actuales quizá no aparezca en la misma ventana.

Una investigación fiable mantiene Listing como fuente de verdad a nivel de dirección. Usa Decompiler para explicar una función después de localizar la evidencia, no para sustituir la búsqueda. La documentación oficial para principiantes cubre el flujo general de CodeBrowser; esta página se concentra en las decisiones de búsqueda que suelen confundir a quien empieza.

Usa archivos de práctica autorizados

Analiza únicamente software y sistemas que tengas permiso para revisar. Un resultado de búsqueda es evidencia sobre un archivo, no autorización para hacer ingeniería inversa ni una garantía de seguridad.

  • Texto conocido: empieza con Defined Strings o Search for Strings y revisa las referencias.
  • Etiqueta, símbolo, función o comentario: usa Search Program Text o Symbol Tree.
  • Dirección exacta: usa Go To y confirma el bloque y la instrucción cargada.
  • Secuencia de bytes o patrón: usa Search Memory con el ámbito correcto.
  • Función que usa el resultado: sigue XREF y compara Listing, Function Graph y Decompiler.
PASO 1

Busca cadenas antes de adivinar desde el decompilador

Si conoces un mensaje, URL, ruta, comando o fragmento de error, busca el texto antes de leer cientos de funciones. Abre Defined Strings cuando quieras un inventario de las cadenas reconocidas. Si falta el valor, usa la acción de búsqueda de cadenas y revisa codificación, longitud mínima, alineación, terminación nula y bloques de memoria. Un resultado vacío suele indicar que la definición o el alcance son incorrectos, no que el texto no exista.

Un resultado solo es útil cuando verificas su dirección. Ábrelo en Listing, revisa bytes y datos cercanos y confirma que está dentro de un bloque cargado. Si Ghidra muestra texto como datos indefinidos, defínelo después de comprobar la alineación y las referencias próximas. Conserva el proyecto original o trabaja sobre una copia antes de aplicar muchas definiciones.

  1. 1

    Empieza con una pista distintiva

    Una URL completa, un fragmento distintivo o una extensión poco común produce menos falsos positivos que un término genérico o un nombre de inicialización.

    Defined Strings / Search for Strings
  2. 2

    Comprueba codificación y alcance

    Prueba ASCII, UTF-8, UTF-16 u otra codificación adecuada. Confirma si buscas en bloques cargados, todos los bloques o solo la selección.

    Codificación + alcance de memoria
  3. 3

    Abre la dirección en Listing

    Inspecciona bytes, tipo de dato, cadenas cercanas y referencias. Un resaltado no demuestra todavía cuál es la función relevante.

    Open in Listing
  4. 4

    Sigue la primera referencia útil

    Usa referencias o XREF para pasar del dato a una llamada, comparación, formateador o rama que explique su papel.

    References / Show XRefs
Listing de CodeBrowser de Ghidra con direcciones, árbol del programa, bytes y datos decodificados
Captura oficial de Ghidra CodeBrowser: verifica cada coincidencia en Listing antes de interpretarla.
PASO 2

Encuentra dónde se usa la cadena y por qué importa

Encontrar una URL o un mensaje suele ser el punto medio. Selecciona el dato y revisa sus referencias. Una URL puede llegar a una rutina de red, compararse con un valor local o quedar como recurso sin uso. Un mensaje puede pertenecer a un error, una comprobación de licencia, un menú o una rama de depuración. La dirección de referencia muestra dónde se consume el valor; el contexto de llamadas indica qué función cumple.

Cuando una referencia llega a una función compleja, alterna entre Listing y Decompiler. Listing muestra instrucciones y direcciones decodificadas; Decompiler propone un flujo y un modelo de variables. Renombra solo cuando la evidencia lo permita y separa lo observado de lo inferido. Así una coincidencia útil no se convierte en una explicación demasiado segura.

  • Confirma que la referencia es real y no solo una coincidencia de dirección cercana.
  • Lee el bloque básico e identifica comparación, llamada o formateo.
  • Revisa llamadores y llamados antes de asignar un significado de negocio.
  • Usa Function Graph cuando las ramas sean difíciles de seguir en Listing.
  • Consulta la guía de Decompiler si el problema restante es interpretar pseudocódigo.
PASO 3

Encuentra una dirección de memoria, un valor o un patrón de bytes

Una pregunta como «¿dónde está 0x00421A3F?» es primero un problema de navegación. Usa Go To para saltar a la dirección y comprueba el programa, el bloque de memoria, el lenguaje y el espacio de direcciones que muestra Listing. Los offsets de archivo, las direcciones virtuales, la base de imagen y las direcciones reubicadas no son intercambiables. Si una dirección copiada no aparece, confirma si procede de un offset, una traza de depuración, un registro o un módulo reubicado.

Para datos crudos, Search Memory es más adecuado que una búsqueda de texto. Busca bytes en el orden correcto, considera el endianess y limita el bloque o la selección cuando haya demasiados resultados. Un valor puede estar en código, datos, relleno o una estructura sin relación. La búsqueda genera candidatos; los bytes cercanos y las referencias determinan cuál es útil.

Por qué una dirección puede verse distinta

Un depurador, un visor de archivos y Ghidra pueden usar coordenadas diferentes. Conserva el origen de la dirección y tradúcela de forma explícita en lugar de sumar una constante hasta que parezca correcta.

PistaPrimera herramientaQué comprobar después
Dirección cargada exactaGo ToEspacio, bloque e instrucción o dato de destino
Secuencia hexadecimalSearch MemoryEndianess, alineación, bloque y referencias cercanas
URL o mensajeBúsqueda de cadenasCodificación, definición, XREF y función consumidora
Nombre o etiquetaSymbol Tree / Search Program TextEspacio de nombres, tipo y llamadores
Valor de un registro o depuradorGo To + ListingRebase, base del módulo y offset frente a dirección
PASO 4

Busca instrucciones y patrones de instrucciones

Buscar instrucciones exige una pregunta más precisa que «encuentra esta palabra». Puedes buscar un mnemónico, un registro, una constante, una secuencia o los bytes generados por un compilador. Search Program Text ayuda con el texto visible de Listing, mientras que Search Memory es mejor cuando conoces la codificación. La arquitectura y el lenguaje de importación determinan cómo se decodifican los mismos bytes, así que confirma esos valores antes de comparar resultados.

Para instrucciones Java u otros términos específicos, no mezcles vocabulario del lenguaje fuente con la sintaxis de desensamblado. Busca la representación que aparece realmente en Listing y valida una coincidencia leyendo operandos y flujo de control. Si necesitas repetir el patrón, documenta arquitectura, endianess, comodines y si buscas en memoria cargada o en una selección.

  1. 1

    Define el patrón

    Anota mnemónico, operandos, bytes, registros o constantes. Marca qué partes pueden variar entre compilaciones.

    Patrón = mnemónico + operandos + comodines
  2. 2

    Elige texto o bytes

    Usa búsqueda textual cuando la forma decodificada sea estable y bytes cuando la codificación sea la evidencia estable.

    Search Program Text / Search Memory
  3. 3

    Valida la coincidencia

    Abre el resultado, revisa toda la instrucción y el bloque, y compara referencias y llamadores.

    Listing + XREF + Function Graph
Function Graph oficial de Ghidra con bloques básicos y aristas de control
Captura oficial de Function Graph: valida el flujo de control alrededor de una coincidencia de instrucciones.
PASO 5

Encuentra funciones, funciones indefinidas y límites útiles

Cuando una coincidencia apunta a código, usa Symbol Tree, Function Window o el contexto de Listing para comprobar si Ghidra reconoció una función. «Undefined» puede significar que el análisis aún no creó el límite, que la dirección es un dato o que la arquitectura importada necesita revisión. No crees una función solo porque una secuencia cercana parezca familiar: confirma punto de entrada, referencias, convención de llamada y retorno cuando sea posible.

En un flujo guiado por búsquedas, la función organiza la evidencia, pero no demuestra el comportamiento por sí sola. Registra dirección, dato o instrucción coincidente, referencia que los conecta y siguiente función consumidora. El tutorial para principiantes cubre Auto Analysis y Function Graph con más amplitud.

ResultadoInterpretaciónSiguiente paso seguro
Función con nombreExiste un límite simbólicoRevisa llamadores, llamados, firma y referencias
FUN_... o función sin nombreExiste una función, pero se desconoce su papelUsa cadenas, llamadas y flujo antes de renombrar
Dirección indefinidaAún no hay un límite fiableComprueba clasificación código/datos y analiza una copia
Coincidencia en un bloqueLa pista está cerca de código o datosLee el bloque completo y sigue XREF
Sin referenciasUso indirecto o definición incompletaRevisa tablas de punteros, relocación y alcance
PREGUNTAS SOBRE BÚSQUEDA

Preguntas frecuentes sobre buscar en Ghidra

¿Cuál es la forma más sencilla de buscar cadenas en Ghidra?

Empieza con Defined Strings como inventario y usa la acción de búsqueda cuando falte el valor o no conozcas la codificación. Abre el resultado en Listing y sigue XREF antes de interpretar la función.

¿Cómo encuentro una dirección URL en Ghidra?

Busca un fragmento distintivo de la URL, confirma su codificación y dirección en Listing y revisa las referencias hasta la función que la lee o compara. La URL puede estar dividida o construirse en tiempo de ejecución.

¿Cómo busco una dirección de memoria concreta en Ghidra?

Usa Go To y comprueba espacio de direcciones, bloque y contenido decodificado. Traduce offsets de archivo o direcciones del depurador antes de usarlos como direcciones cargadas.

¿Cómo busco instrucciones concretas en Ghidra?

Usa Search Program Text para texto decodificado estable o Search Memory para bytes estables. Confirma arquitectura y endianess y valida cada resultado en Listing y Function Graph.

¿Por qué una búsqueda de cadenas en Ghidra no devuelve nada?

Revisa codificación, longitud mínima, alineación, bloques cargados y si el valor está dividido o se crea en tiempo de ejecución. Amplía una sola condición cada vez.

¿Debo usar Decompiler para buscar una cadena?

Normalmente busca primero la cadena o los bytes y usa Decompiler para entender la función que referencia el resultado. Listing y los bytes son la evidencia más directa de la coincidencia.