Trabalhando com o Cutter - Reverse Basics. Revertendo problemas resolvendo com r0ot-mi. Parte 3

imagem


Neste artigo, vamos entender como descompilar arquivos ELF no Cutter usando o exemplo de tarefas leves. Introdução às



partes reversas: Parte 1: descompilação C, C ++ e DotNet - Fundamentos reversos

Parte 2: MIPS Reverse e Golang - Fundamentos reversos



Informação organizacional
, - , :



  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.


, , , .



, , Telegram . , , .



. , - , .



Instruções falsas







Esta é a oitava tarefa nesta categoria, e estamos sendo informados de que existem instruções falsas. Vamos começar examinando as informações do arquivo.







Abro o programa no Cutter - uma GUI para radare2 com um descompilador ghidra embutido que tem a capacidade de emular e, mais recentemente, depurar. E imediatamente obtemos uma lista interessante de funções.







Vamos passar para a função principal e descompilá-la.







No início, o canário é inicializado e o número de argumentos é verificado. Depois disso, bytes 0x1f são alocados, onde a string constante especificada é copiada, o endereço é salvo na variável iVar3 e, em seguida, bytes individuais dessa string são alterados. Em seguida, as transformações ocorrem com a string s1, que não é do nosso interesse. A função WPA também é inicializada, e a senha inserida é gravada no endereço auStack50 e passada junto com a string iVar3 convertida para a função WPA, após o que o valor canário é verificado e o programa encerrado.



Vamos passar para o recurso WPA.







A linha anteriormente inserida no programa é alterada novamente, após o que as duas linhas são comparadas. Se forem iguais, a função blowfish () será chamada, o que nos mostrará a senha correta para alteração, caso contrário, a função RS4 () será chamada.







Visto que ocorre a descriptografia dos valores inseridos anteriormente, podemos depurar o programa e alterar o resultado da comparação. Vamos ver onde as strings são comparadas e definir um ponto de interrupção.







Agora vamos começar a depurar - F9, e inserir os argumentos do programa.







Clique no botão mais adiante na barra de navegação até chegarmos ao nosso breakpoint. O resultado da comparação de strings usando a função strcmp () será escrito no registrador EAX, que será verificado. Como as strings não são iguais, este registro contém o valor 1.







Vamos alterá-lo para 0 para alterar a ramificação do comportamento do programa e continuar executando. Após o preenchimento no console do Cutter, veremos a resposta correta, que deverá ser enviada no site.







Ptrace







Baixe o programa e confira.







Nada extravagante, você precisa encontrar uma senha. Mas há um pouco de proteção contra depuração (ptrace) e transições que precisam ser editadas manualmente. É assim que o gráfico mostra no IDA Pro.







Também faremos essa tarefa no Cutter, ele corrigirá automaticamente todas as transições.







Vamos prosseguir para a descompilação da função principal.







E a senha correta são as 4 letras correspondentes da string especificada no início.







ARM ELF







Este é um binar para a arquitetura ARM, nós o jogamos no Cutter e selecionamos a função principal. No gráfico de funções, vemos com o que estamos lidando e, provavelmente, esta é uma comparação símbolo por símbolo.







Abrimos o descompilador e analisamos o programa.







Em primeiro lugar, a presença do argumento do programa e seu comprimento são verificados, deve ser igual a 6.







Portanto, a variável var_14h atua como um índice e assume o valor 0. E então ocorrem várias comparações, as quais consideraremos como condições:



str [0] == str [5]

str [0] + 1 == str [1]

str [3] + 1 == str [0]

str [2] + 4 == str [5]

str [4] + 2 == str [2]

0 == str [3] ^ 0x72



Vamos implementar o algoritmo e obter a senha.







E obtemos a senha necessária. É tudo por agora.



Você pode se juntar a nós emTelegram . Lá você pode encontrar materiais interessantes, cursos que vazaram e software. Vamos reunir uma comunidade, na qual haverá pessoas versadas em várias áreas de TI, para que possamos sempre ajudar uns aos outros em quaisquer questões de TI e segurança da informação.



All Articles