Ghidra + IDA não consegue detectar uma string, mas Radare2 pode
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
Não sei o comprimento exato da corda. Mas, algumas coisas a serem observadas aqui são as seguintes:
- 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).
- 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.
Strings
comando 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.- strings são geralmente definidas na
.rodata
seçã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". - 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?