Descompilar C, C ++ e DotNet são os princípios básicos da reversão. Resolvendo problemas para reverter com r0ot-mi. Parte 1

imagem

Neste artigo, nas 5 primeiras tarefas, aprenderemos o básico da desmontagem, resolveremos os problemas do nível reverso inicial e também descompilaremos o aplicativo dotNet.

Informações Organizacionais
Especialmente para aqueles que desejam aprender algo novo e se desenvolver em qualquer uma das áreas de segurança da informação e da informática, escreverei e falarei sobre as seguintes categorias:

  • PWN;
  • criptografia (criptografia);
  • tecnologias de rede (rede);
  • reverso (engenharia reversa);
  • esteganografia (estegano);
  • pesquisa e exploração de vulnerabilidades na WEB.

Além disso, compartilharei minha experiência em análise forense de computadores, análise de malware e firmware, ataques a redes sem fio e redes locais, realização de protestos e explorações por escrito.

Para que você possa descobrir sobre novos artigos, software e outras informações, criei um canal no Telegram e um grupo para discutir quaisquer questões no campo da CID. Além disso, considerarei pessoalmente seus pedidos, perguntas, sugestões e recomendações pessoais e responderei a todos .

Todas as informações são fornecidas apenas para fins educacionais. O autor deste documento não se responsabiliza por nenhum dano causado a alguém como resultado do uso dos conhecimentos e métodos obtidos como resultado do estudo deste documento.

C, GCC32


Considere o caso mais simples. Esta é a primeira busca reversa.

imagem

Em tarefas desse tipo, quando a senha é armazenada como uma sequência, ela pode ser encontrada sem o uso de ferramentas especiais. Vamos executar o programa e ver o que ele exibe.

imagem

Ótimo. Temos um convite e uma mensagem sobre a senha errada. Observamos as linhas no arquivo do programa e encontramos entre elas um convite e uma mensagem sobre a senha errada. Deve haver uma senha próxima.

imagem

Assim, nas linhas próximas uma da outra, há uma que se parece com uma senha. Vamos tentar.

imagem

A tarefa está concluída. Damos a senha, obtemos 5 pontos.

imagem

ELFx86, Básico


Somos solicitados a encontrar uma senha.

imagem

Carregamos o programa no depurador IDA Pro (uso a versão 7.0) e pressionamos F5 para descompilar o programa.

imagem

Assim, o nome digitado é comparado com a cadeia john e a senha com o estripador.

imagem

Assim, resolvemos a tarefa corretamente e obtemos nossa senha. Alugamos e ganha mais 5 pontos.

imagem

PEx86, proteção 0


Desta vez, recebemos um exe-shnik.

imagem

Faça o download no IDA Pro.

imagem

O programa não salva as informações de depuração, portanto, não vemos os nomes de funções usuais como main. Vejamos as linhas do programa, para esta imprensa + F12.

imagem

Vemos mensagens sobre como inserir as senhas corretas e incorretas. Agora podemos encontrar o bloco com esta linha no código e ver qual condição o precede. Clique duas vezes na linha.

imagem

Estamos localizados na seção rdata. Vamos encontrar todos os links no código para este endereço. Para fazer isso, pressione X.

imagem

Assim, no código do programa, há apenas uma chamada para a nossa linha. Clicamos duas vezes e vamos para o código.

imagem

Estamos no código principal do programa. Estamos descompilando.

imagem

Aqui, verifica-se algum número a2 e uma linha a1. Vamos traduzir um numérico para um caractere.

imagem

Para fazer isso, pressione R. no número e nosso código mudou.

imagem

Agora sabemos a linha, resta descobrir qual é o número a2. Vamos ver todos os links para esta função.

imagem

É chamado apenas uma vez.

imagem

Como você pode ver, o comprimento da string é passado como o segundo parâmetro. Verifique a senha encontrada.

imagem

Nós desistimos e ganhamos 5 pontos.

imagem

ELF-C ++, proteção 0


Somos oferecidos para resolver um programa em C ++.

imagem

Abrimos no IDA Pro e passamos para o local de uma chamada da mensagem com a senha correta. Vamos colorir de verde.

imagem

Vamos diminuir o gráfico.

imagem

Então, precisamos passar por duas condições. Vamos analisá-los. Na primeira condição, o número de argumentos é comparado a 1. Ou seja, o programa deve ter mais de um argumento (o primeiro é o nome do programa).

imagem

Analisamos a segunda condição.

imagem

A string que inserimos é comparada com a string que é passada como parâmetro para a função plouf. Nós descompilamos.

imagem

Analise o código. Na verdade a2 - é uma string. Assim, o ciclo corre de i = 0, até o i-ésimo elemento da linha a2 ser 0 (ou seja, até atingir o final da linha).

V3 = a2 [i]
V5 = comprimento (a3)
V6 = a3 [i% v5]

Ou seja, a linha no endereço a1 será igual às duas linhas proxy a2 e a3. Vamos voltar à função principal e encontrar essas linhas.

imagem

Então, precisamos definir os parâmetros var_C e var_10. Vamos encontrá-los um pouco mais alto. Essas são as cadeias unk_8048BC4 e unk_8048DCC, respectivamente.

imagem

Encontre o valor das strings.

imagem

Bem, escreveremos um código para procurá-los.

imagem

Nós obtemos a senha.

imagem

PE-DotNet, proteção 0


Nesta tarefa, somos oferecidos para reverter o aplicativo .NET.

imagem

Você pode determiná-lo usando o utilitário de arquivo.

imagem

C # é uma linguagem descompilada, para que possamos obter o projeto original. Isso pode ser feito usando o dnSpy .

imagem

Vamos abrir o projeto CrackMe e encontrar funções e métodos.

imagem

O método Button1_Click verifica a senha com o clique de um botão.

imagem

No código fonte, encontramos a senha. Confira.

imagem

Nós entregamos.

imagem

Por enquanto é tudo. Para continuar ... Você pode se juntar a nós no Telegram . Lá, você pode propor seus próprios tópicos e votar na escolha de tópicos para os seguintes artigos.

Source: https://habr.com/ru/post/pt467085/


All Articles