Minha Casa Minha Vida

Fui tentar acessar o sistema da minha casa, porém não me lembro da senha. Você pode inspecionar para mim?

Ao acessar o site, podemos ver que ele possui um campo de senha, onde diz que a senha deve conter 12 caracteres.

Página principal do site

Podemos inspecionar o código fonte da página. Podemos perceber que quando o usuário clica para verificar a senha, o site chama uma função chamada validatePassword(), e também há um script ofuscado que parece ser o responsável por validar a senha.

Código fonte da página

Deobfuscando o código com deobfuscate.io, achamos a função validatePassword().

Podemos dividir a função em 3 partes:

  1. Verifica se a senha tem 12 caracteres.

  1. Divide a senha em 4 partes, e faz algumas operações em cada parte.

  1. Verifica se a senha gerada é igual a F4#:}cMVUzIBk e envia uma requisição para uma rota com a senha.

Podemos trocar o nome das variáveis para facilitar a leitura do código.

A senha que enviamos é dividida em 4 partes, e cada parte passa por uma transformação diferente. Vamos analisar cada parte:

  • Parte 1: passwordParts[0].split('').reverse().join('') - Inverte a string.

  • Parte 2: passwordParts[1].split('').map(char => String.fromCharCode(char.charCodeAt(0) + 2)).join('') - Adiciona 2 ao valor ASCII de cada caractere.

  • Parte 3: btoa(passwordParts[2]) - Codifica a string em Base64.

  • Parte 4: passwordParts[3].split('').map((char, index) => String.fromCharCode(char.charCodeAt(0) + index + 1)).join('') - Adiciona o índice + 1 ao valor ASCII de cada caractere.

Depois disso, as 4 partes são concatenadas e comparadas com a string F4#:}cMVUzIBk. Sendo assim, podemos montar a senha original com base nas operações que foram feitas:

Rodando o código, obtemos a senha original: #4F8{a1U3H@h.

Agora, podemos enviar a senha para o site e obter a flag.

hawk{t0p_10_c4s4s_m41s_s3gur4s}

Flag do desafio

Atualizado