unc4nny Postado Março 22, 2020 em 17:11 Compartilhar Postado Março 22, 2020 em 17:11 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? Link para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Março 22, 2020 em 17:48 Compartilhar Postado Março 22, 2020 em 17:48 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 More sharing options...
unc4nny Postado Março 22, 2020 em 17:55 Autor Compartilhar Postado Março 22, 2020 em 17:55 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 More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.