Ghidra Downloadguia independente de download e instalação
Português
GUIA DE PESQUISA DO GHIDRA

Pesquisar strings no Ghidra: encontrar endereços, instruções e funções

A forma mais rápida de investigar um programa é transformar uma pista vaga em um alvo de pesquisa preciso. Este guia mostra quando usar Defined Strings, Search Program Text, Search Memory, Go To, Symbol Tree e referências cruzadas para sair de uma string ou endereço e chegar à função que o utiliza.

Abrir a documentação oficial de pesquisa do Ghidra
Tarefa principalEncontrar evidências do programa
Melhor começoString ou endereço conhecido
Visões úteisListing + XREF + Decompiler
Versão verificadaGhidra 12.1.3
RESPOSTA RÁPIDA

Escolha a ferramenta de acordo com a pista

Para pesquisar strings no Ghidra, decida primeiro se você procura dados já definidos pelo Ghidra, texto visível no modelo do programa, bytes brutos na memória carregada ou um endereço exato. Defined Strings é um bom inventário, mas não é uma pesquisa completa. Uma string curta pode ainda não estar definida, um valor Unicode pode usar outra codificação e um bloco fora do escopo atual pode não aparecer na mesma janela.

Para confirmar endereços, mantenha o Listing como fonte principal. Use o Decompiler para explicar uma função depois de encontrar a evidência, não para substituir a pesquisa. A documentação oficial para iniciantes apresenta o fluxo amplo do CodeBrowser; esta página se concentra nas decisões de pesquisa que mais confundem no início.

Use arquivos de prática autorizados

Analise somente software e sistemas que você tem autorização para examinar. Um resultado de pesquisa é uma evidência sobre um arquivo, não uma permissão para engenharia reversa nem uma garantia de segurança.

  • Texto conhecido: comece com Defined Strings ou Search for Strings e confira as referências.
  • Nome, símbolo, função ou comentário: use Search Program Text ou Symbol Tree.
  • Endereço exato: use Go To e confirme o bloco carregado e a instrução.
  • Sequência de bytes ou padrão: use Search Memory com o escopo correto.
  • Função que usa o resultado: siga XREF e compare Listing, Function Graph e Decompiler.
ETAPA 1

Pesquise strings antes de tentar adivinhar no decompilador

Se você conhece uma mensagem, URL, caminho, comando ou trecho de erro, pesquise o texto antes de ler centenas de funções. Abra Defined Strings quando quiser um inventário das strings já reconhecidas. Se o valor não aparecer, use a ação de pesquisa de strings e confira codificação, tamanho mínimo, alinhamento, terminador nulo e escopo dos blocos de memória. Uma busca vazia muitas vezes indica um problema de definição ou de escopo, não a ausência do texto.

Um resultado só é útil depois que o endereço é verificado. Abra-o no Listing, confira os bytes e os dados próximos e confirme que está em um bloco carregado. Se o Ghidra mostrar dados indefinidos, confira alinhamento e referências próximas antes de defini-los. Faça grandes alterações somente em uma cópia do projeto.

  1. 1

    Comece com uma pista específica

    Uma URL completa, um trecho distintivo ou uma extensão rara gera menos falsos positivos do que um termo comum ou um nome de inicialização.

    Defined Strings / Search for Strings
  2. 2

    Confira codificação e escopo

    Teste ASCII, UTF-8, UTF-16 ou a codificação adequada e confirme se a pesquisa cobre blocos carregados, todos os blocos ou apenas a seleção.

    Codificação + escopo de memória
  3. 3

    Abra o endereço no Listing

    Inspecione bytes, tipo de dado, strings próximas e referências. Um destaque não prova qual é a função relevante.

    Open in Listing
  4. 4

    Siga a primeira referência útil

    Use References ou XREF para chegar a uma comparação, chamada, formatação ou ramificação que explique o papel da string.

    References / Show XRefs
Listing oficial do Ghidra CodeBrowser com endereços, árvore do programa, bytes e dados decodificados
Captura oficial do Ghidra CodeBrowser: verifique o resultado no Listing antes de interpretá-lo.
ETAPA 2

Descubra onde a string é usada e por que ela importa

Encontrar uma URL ou mensagem normalmente é apenas o meio da investigação. Selecione o item e examine suas referências. Uma URL pode ser passada para uma rotina de rede, comparada com um valor local ou permanecer como recurso sem uso. Uma mensagem pode pertencer a um erro, uma verificação de licença, um menu ou um ramo de depuração. O endereço da referência mostra onde o valor é consumido; chamadores e chamados ajudam a entender o papel.

Quando a referência levar a uma função complexa, alterne entre Listing e Decompiler. Listing mostra instruções e endereços decodificados; Decompiler propõe um fluxo de controle e um modelo de variáveis. Só renomeie quando houver evidência suficiente e separe o que foi observado do que foi inferido.

  • Confirme que a referência é real, não apenas uma coincidência de endereço próximo.
  • Leia o bloco básico e encontre comparação, chamada ou formatação.
  • Confira chamadores e chamados antes de atribuir um significado ao código.
  • Use Function Graph quando os ramos forem difíceis de seguir no Listing.
  • Consulte o guia do Decompiler quando a dúvida restante for sobre pseudocódigo.
ETAPA 3

Encontre um endereço de memória, valor ou padrão de bytes

Uma pergunta como “onde está 0x00421A3F?” é primeiro um problema de navegação. Use Go To e depois confira programa, bloco de memória, linguagem e espaço de endereços exibidos no Listing. Offsets de arquivo, endereços virtuais, bases de imagem e endereços relocados não são equivalentes. Se um endereço copiado não abrir, descubra se veio de um offset, de uma trace do depurador, de um log ou de um módulo relocável.

Para dados brutos, Search Memory é mais adequado do que uma pesquisa textual. Pesquise os bytes na ordem correta, considere endianness e limite o bloco ou a seleção quando houver muitos resultados. Um valor pode estar em código, dados, preenchimento ou uma estrutura sem relação. A pesquisa cria candidatos; os bytes ao redor e as referências fornecem o contexto.

Por que o mesmo endereço pode parecer diferente

Um depurador, um visualizador de arquivos e o Ghidra podem usar sistemas de coordenadas diferentes. Preserve a origem do endereço e converta-o conscientemente em vez de somar uma constante até obter um valor plausível.

PistaPrimeira ferramentaO que verificar depois
Endereço carregado exatoGo ToEspaço, bloco, instrução ou dado no destino
Sequência hexadecimalSearch MemoryEndianness, alinhamento, escopo e referências
URL ou mensagemPesquisa de stringsCodificação, definição, XREF e função consumidora
Nome ou rótuloSymbol Tree / Search Program TextNamespace, tipo, chamadores e chamados
Valor de log ou depuradorGo To + ListingRebase, base do módulo e offset versus endereço
ETAPA 4

Pesquise instruções e padrões de instruções

Uma pesquisa de instruções precisa de uma pergunta mais precisa do que “encontre esta palavra”. Você pode procurar um mnemônico, registrador, constante, sequência ou bytes produzidos pelo compilador. Search Program Text ajuda quando o texto decodificado no Listing é estável; Search Memory é melhor quando a codificação em bytes é a pista estável. A arquitetura e a linguagem escolhidas na importação determinam como os mesmos bytes são decodificados.

Para instruções Java ou termos específicos de uma plataforma, não misture vocabulário da linguagem-fonte com a sintaxe do disassembly. Pesquise a representação que aparece no Listing e valide um resultado pelos operandos e pelo fluxo de controle. Para repetir o padrão em vários arquivos, registre arquitetura, endianness, curingas e escopo de memória.

  1. 1

    Defina o padrão

    Anote mnemônico, operandos, bytes, registradores ou constantes e marque as partes que podem mudar entre compilações.

    Padrão = mnemônico + operandos + curingas
  2. 2

    Escolha texto ou bytes

    Use texto quando a forma decodificada for estável e memória quando a representação em bytes for a evidência estável.

    Search Program Text / Search Memory
  3. 3

    Valide a ocorrência

    Abra o resultado, leia a instrução completa e o bloco e compare referências e chamadores.

    Listing + XREF + Function Graph
Function Graph oficial do Ghidra com blocos básicos e setas de fluxo de controle
Captura oficial do Function Graph: valide o fluxo de controle ao redor de um resultado de instrução.
ETAPA 5

Encontre funções, funções indefinidas e limites úteis

Quando um resultado aponta para código, use Symbol Tree, Function Window ou o contexto atual do Listing para verificar se o Ghidra já reconheceu uma função. “Undefined” pode significar que a análise ainda não criou o limite, que o endereço é dado ou que a arquitetura importada precisa ser revisada. Não crie uma função apenas porque uma sequência parece familiar: confira entrada, referências, convenção de chamada e retorno quando possível.

Em um fluxo guiado por pesquisa, a função organiza as evidências, mas não é uma conclusão sobre o comportamento. Registre endereço, dado ou instrução encontrada, referência que os conecta e próxima função que consome o valor. O tutorial para iniciantes cobre o fluxo maior de Auto Analysis e Function Graph.

ResultadoInterpretaçãoPróximo passo seguro
Função nomeadaExiste um limite simbólicoVerifique chamadores, chamados, assinatura e referências
FUN_... ou função sem nomeA função existe, mas o papel é desconhecidoUse strings, chamadas e fluxo antes de renomear
Endereço indefinidoAinda não há um limite confiávelConfira código/dado e analise uma cópia
Resultado dentro de um blocoA pista está perto de código ou dadosLeia o bloco completo e siga XREF
Sem referênciasUso indireto ou definição incompletaConfira tabelas de ponteiros, relocação e escopo
FAQ DE PESQUISA

Perguntas sobre pesquisa no Ghidra

Qual é a forma mais simples de pesquisar strings no Ghidra?

Comece com Defined Strings para obter um inventário e use a pesquisa de strings quando o valor não aparecer ou a codificação for incerta. Verifique o endereço no Listing e siga XREF.

Como encontro um endereço URL no Ghidra?

Pesquise um trecho distintivo da URL, confirme codificação e endereço no Listing e siga referências até a função que lê, compara, formata ou envia o valor. A URL pode ser montada em tempo de execução.

Como pesquiso um endereço de memória específico no Ghidra?

Use Go To e confirme espaço de endereços, bloco e conteúdo decodificado. Converta offsets de arquivo ou endereços do depurador antes de tratá-los como endereços carregados.

Como pesquiso instruções específicas no Ghidra?

Use Search Program Text para texto decodificado estável ou Search Memory para bytes estáveis. Confirme arquitetura e endianness e valide os resultados no Listing e no Function Graph.

Por que a pesquisa de strings do Ghidra não encontra nada?

Confira codificação, tamanho mínimo, alinhamento, blocos carregados e se o valor está dividido ou é criado em tempo de execução. Amplie uma condição por vez.

Devo usar o Decompiler para pesquisar uma string?

Normalmente pesquise primeiro a string ou os bytes e use o Decompiler para entender a função que referencia o resultado. Listing e bytes são a evidência direta da ocorrência.