Jump to content
unc4nny

Acesso de dados na secao .data em binarios ELF

 Read less than a minute

Recommended Posts

 Read less than a minute

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

Share this post


Link to post
Share on other sites
 Read 1 minute

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!

Share this post


Link to post
Share on other sites
 Read less than a minute

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!

  • Curtir 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...