Ir para conteúdo

Acesso de dados na secao .data em binarios ELF


unc4nny

Posts Recomendados

Ola, estou tentando resolver um crackme, e nele existe uma funcao que compara um valor de um vetor que esta contigo na secao .data. Queria saber se ha algum modo de:

  • Coletar o conteudo desse vetor sem precisar esperar o loop rodar ate o final, ja que o loop demora para terminar
  • Caso eu consiga coletar o conteudo desse vetor, identificar o tipo dele com correteza
  • Caso eu consiga identificar o tipo dele, como eu faco para o Ghidra passar a identificar ele pelo tipo correto?

Obs: O vetor eh uma variavel global, entao ele nao eh passado na stack, por isso que eu sei que ele esta na secao .data, segue o print da funcao em questao
Obs2: Pelo modo que o Ghidra esta manipulando esse vetor, eu imagino que ele seja de inteiros (ele converte ele em um ponteiro e e pega o conteudo dele, alem de trabalhar com 4 bytes, e o arquivo eh 64 bits, entao me parece um chute plausivel), mas como saber se estou correto?

screenshot_20200322_140541.png

Link para o comentário
Compartilhar em outros sites

Opa!

37 minutos atrás, unc4nny disse:

existe uma funcao que compara um valor de um vetor

Na verdade a função compara o argumento recebido (char param_1) com os elementos de um array (eu prefiro chamar assim, pra não confundir com os tipos vector em algumas lingaugens). Só pra ficar mais preciso, pois não é "um valor de um vetor". Mas eu entendi o que você quis dizer. ?

37 minutos atrás, unc4nny disse:

Coletar o conteudo desse vetor sem precisar esperar o loop rodar ate o final

O array tem que estar pronto quando essa função é chamada. Logo, basta colocar um breakpoint logo no início dessa função e olhar o conteúdo do array. Não lembro se o Ghidra já tem debugger, mas você pode usar o gdb.

37 minutos atrás, unc4nny disse:

Caso eu consiga coletar o conteudo desse vetor, identificar o tipo dele com correteza

Na real, podemos assumir que não existem muitos "tipos" em baixo nível.  É tudo número mesmo e o tamanho é que importa. Se o Ghidra usou (int) e o tamanho do elemento é 4, é isso, estamos diante de um array de elementos do tipo int32 (4 bytes).

37 minutos atrás, unc4nny disse:

O vetor eh uma variavel global, entao ele nao eh passado na stack, por isso que eu sei que ele esta na secao .data

É uma boa dedução, mas dá pra ver isso rápido porque o Ghidra já nomeou o vetor como DAT_. Este prefixo é para variáveis na seção .data (ou numa seção com as mesmas propriedades, já que o nome da seção em si não vale de muita coisa). A distância do endereço dele (301020) para a função (1007fa), que tá numa seção de código - normalmente a .text), também sugere que ele está em outra seção e se você for no "memory map" do Ghidra (entre aspas porque não lembro como o Ghidra chama), vai ver que 301020 está no range da seção .data (entre seu início e fim).

37 minutos atrás, unc4nny disse:

Pelo modo que o Ghidra esta manipulando esse vetor, eu imagino que ele seja de inteiros (ele converte ele em um ponteiro e e pega o conteudo dele, alem de trabalhar com 4 bytes, e o arquivo eh 64 bits, entao me parece um chute plausivel), mas como saber se estou correto?

Se você desconfiar das suposições do Ghidra, pode sempre checar o Assembly. De novo, o que vai definir o tipo é como o conteúdo é lido. Se são 4 bytes, é int32. Se as instruções de comparação são as que consideram sinal, então é signed. Do contrário, unsigned. E por aí vai.

Ótimas perguntas!

Abraço!

Link para o comentário
Compartilhar em outros sites

Opa, cara, valeu pela resposta, admiro muito seu trabalho! Eu comentei no video que vc postou sobre o curso de analise de malware, que se tudo der certo esse ano eu comeco um projeto na facul e vou ganhar bolsa, e certamente vou me tornar um apoiador!

5 minutes ago, Fernando Mercês said:

O array tem que estar pronto quando essa função é chamada. Logo, basta colocar um breakpoint logo no início dessa função e olhar o conteúdo do array. Não lembro se o Ghidra já tem debugger, mas você pode usar o gdb.

Acho que ta na hora de eu passar pra analise dinamica entao! Mto obrigado cara, vc eh foda, juro q ate hj nunca achei nenhum conteudo igual a de vcs, vcs tem meu eterno respeito, serio!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...