unc4nny Posted March 22, 2020 at 05:11 PM Share Posted March 22, 2020 at 05:11 PM 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 to comment Share on other sites More sharing options...
Fernando Mercês Posted March 22, 2020 at 05:48 PM Share Posted March 22, 2020 at 05:48 PM 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 to comment Share on other sites More sharing options...
unc4nny Posted March 22, 2020 at 05:55 PM Author Share Posted March 22, 2020 at 05:55 PM 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.