Find The Easy Pass [Hack The Box :: Reversing Challenge] PT-BR

r4msolo
4 min readSep 3, 2019

Dando continuidade ao Hack The Box, dessa vez vou estar apresentando o Write-Up do Find The Easy Pass, da categoria de engenharia reversa. Resolvi dessa vez usar gifs que deixa tudo menos maçante, bora lá.

Bom após descompactar o arquivo eu rodei o comando ‘file’ para descobrir o tipo de dados desse arquivo, como podes ver logo abaixo.

Temos que o arquivo se trata de um executavel para windows PE32 (Portable Executable 32 bits). Aqui você poderia rodar ele em uma distro linux usando o wine tranquilamente, mas é aconselhado que tenhas uma VirtualBox instalado em seu computador com o windows para facilitar e evitar problemas com bibliotecas.

Rodei o programa para fazer o teste…

Ele pediu um password e testei com “admin”, logo em seguida retornou o erro de senha incorreta. Sabendo que a senha está nesse arquivo binário e sabendo a mensagem de erro que é rotornada já temos a direção para procurar no nosso debugger.

Eu usei o Immunity Debugger nesse exemplo mas poderia ter sido qualquer outro, bom agora que o programa já esta aberto podemos analizar melhor o comportamento. Clicando com o botão direito sobre a tela de disassembly, a do canto esquerdo superior, encontramos a opção “search for”, como mostra no gif abaixo, e então abre outra janela de opções e vamos em “All referenced Text String”.

Na nova janela com o botão direito novamente clicamos em “Search For Text” e procuramos pelo texto “Wrong Password!”.

Depois de encontrar a mensagem podemos ver o endereço de memória no qual essa mensagem sera chamada, na coluna “address”, então é só dar dois cliques em cima para seguir o endereço.

Bom para decidir entre qual mensagem será exibida ele deve comparar a nossa entrada em algum ponto e em seguida dar um “jump” para a instrução seguinte. Analizando as intruções podemos ver que acima da instrução MOV que move o texto “Good Job. Congratulations”, para o registrador EAX quando acertamos a senha, vemos acima uma instrução JNZ (Jump Not Zero), ou seja, ele vai pular para a instrução no endereço 0x00454144, onde gera a mensagem do erro, SE o valor retornado NÃO for igual a zero, acima então temos a call que chama uma função onde retornará esse valor, e pressionando ENTER nela podemos segui-lá, mas antes vamos colocar um breakpoint nessa parte da CALL, para que ao executar nosso programa, ele pare nessa chamada, no Immunity debugger é só clicar no endereço que quer e pressionar F2, assim como mostrarei abaixo.

Após marcar o breakpoint ele marcará o endereço com a cor azul, então quando seguir a call poderemos ver a comparação (CMP), onde está comparando o valor contido no registrador EAX e EDX

Agora rodamos o programa apertando F9 e então digitamos alguma coisa qualquer na senha

Agora nosso programa faz uma pausa no nosso breakpoint e se olharmos na janela dos registradores podemos ver o valor que informamos em EAX e o valor a ser comparado em EDX, junto a nossa senha “fortran!”.

Agora é só tentar com essa senha pra confirmar e…

Nossa flag fica nesse formato:

HTB{fortran!}

Sugestões de melhoria são bem vindas, caso queira falar comigo me chame no meu telegram https://t.me/r4msolo 😃

--

--