Ghidra + IDA não consegue detectar uma string, mas Radare2 pode

Jan 15 2021

Eu sou novo na engenharia reversa, e eu estou tentando Ghidra, IDA (Freeware) e Radare2 com um CrackMe simples, o problema é que o Ghidra e o IDA não conseguiram detectar uma string enquanto o Radare2 (usando o Cutter GUI) conseguia descobrir o nome. Usei a análise padrão para todos os 3. Há algo que está faltando? porque até mesmo o comando 'strings' pode realmente encontrar a string que estou procurando.

Ghidra:

IDA:

Radare2 (cortador):

Respostas

6 R4444 Jan 15 2021 at 22:05

Não sei o comprimento exato da corda. Mas, algumas coisas a serem observadas aqui são as seguintes:

  1. Ghidra e IDA têm um limite mínimo no tamanho da string para recuperar o tipo correto (ghidra tem um limite - ou limite inferior de 5).
  2. Isso é necessário para evitar falsos positivos ou tipos conflitantes. E recupere os tipos corretos sem marcar um ponteiro como uma string. Confira esta figura para sua referência. Gerado usando a análise automatizada Ghidra.

No Ghidra, você pode alterar esse limite (o mínimo é 4) na seção de análise.

  1. Stringscomando produz caracteres imprimíveis com tamanho mínimo 4 (além disso, não usa algoritmos de recuperação de tipo sofisticados como ghidra ou Ida). Acredito que você tenha uma string com comprimento inferior a 5 e meu palpite é que deve ser 4 para ser mais preciso.
  2. strings são geralmente definidas na .rodataseção. Se você clicar duas vezes em DAT_xxxx, ele o levará ao local onde a string está definida. Lá, você verá bytes consecutivos agrupados por Ghidra ou IDA (como mostrado na imagem 1). Mas, o tipo não é resolvido como uma "string".
  3. No Ghidra, uma maneira rápida de corrigir isso alterando o tipo de dados do rótulo DAT_xxxx: Clique com o botão direito -> Dados -> Escolha o tipo de dados -> escolha a string

Rereferências:

  • Veja minha pergunta aqui - https://github.com/NationalSecurityAgency/ghidra/issues/2274
  • manual de cordas - https://linux.die.net/man/1/strings
  • ida pro - Como posso fazer o IDA ver uma referência de string?