Reverse e depois ROT: Desfazendo a Inversão de String e o ROT13
O desafio
Um crackme imprime esta string embaralhada quando você digita a chave errada. A desmontagem mostra que ele constrói o valor real invertendo uma string armazenada e depois aplicando ROT13 às letras. Desfaça os dois passos na bancada e envie o flag (HDNA{...}).
O que você vai aprender
- Reconhecer o ROT13 pelos caracteres que ele deixa intactos
- Entender por que o ROT13 e a inversão de string são cada um sua própria inversa
- Ordenar corretamente duas transformações simétricas para recuperar o texto puro
- Descartar base64 e hexadecimal quando a entrada não tem essa estrutura
- Explicar por que embaralhamento sem chave não é criptografia
Habilidades testadas
Pré-requisitos
- Saber o que o ROT13 e a inversão de string fazem
- Familiaridade básica com a leitura da saída de um crackme
Como funciona
O ROT13 rotaciona cada letra 13 posições no alfabeto. Como o alfabeto tem 26 letras, aplicá-lo duas vezes retorna o original - então o ROT13 é sua própria inversa e não precisa de chave. A inversão de string segue a mesma ideia: inverta duas vezes e você volta ao ponto de partida. Crackmes e 'proteções' leves adoram isso porque parecem ofuscadas mas não custam nada para aplicar.
O indício de que se trata de uma rotação de letras e não de uma cifra de bytes é o que ela deixa intocado. O ROT só desloca a-z e A-Z; dígitos, chaves e sublinhados passam direto. Na string embaralhada você já consegue ver {, } e _ entre as letras, só que nos lugares errados porque tudo também foi invertido. Isso descarta base64 (sem padding, estrutura de maiúsculas e minúsculas) e hexadecimal (nem todos os caracteres são hexadecimais), e aponta diretamente para reverse mais ROT.
A ordem importa ao desfazer transformações empilhadas: desfaça primeiro o que foi feito por último. O crackme inverteu a string e depois aplicou ROT13, então desfaça na ordem contrária - adicione Reverse, depois ROT com o deslocamento padrão de 13. A flag aparece em tempo real. As outras operações (atbash, base64, hexadecimal, Vigenere, XOR, URL-decode) são distrações; atbash é a armadilha mais próxima, mas mapeia cada letra para seu espelho em vez de rotacionar em 13, então produz um texto sem sentido aqui.
Erros comuns
- Recorrer a base64 ou hexadecimal. A string não é um base64 ou hexadecimal válido - essas operações só produzem lixo.
- Usar atbash em vez de ROT. O atbash espelha o alfabeto; o ROT13 rotaciona em 13. Só o ROT13 recupera a flag aqui.
- Mudar o deslocamento do ROT. ROT13 é o padrão e o correto - outros deslocamentos não vão gerar texto legível.
- Aplicar os passos na ordem errada. Reverse e ROT13 comutam nesses dados, mas como hábito, desfaça primeiro a última transformação aplicada.
Como se proteger
Para defensores e engenheiros reversos, a lição é que embaralhamento sem chave como ROT13 e inversão é recreativo - ele esconde uma string de uma olhada rápida e nada além disso. Se um crackme ou um binário real 'protege' um valor dessa forma, trate o valor como texto puro e leia diretamente.
- Nunca use ROT13, inversão ou qualquer transformação sem chave para esconder segredos no código - elas não protegem nada.
- Ao fazer engenharia reversa, reconheça rotações de letras instantaneamente pelos caracteres não alfabéticos que permanecem intactos.
- Tente primeiro as transformações mais baratas (reverse, ROT, atbash) antes de supor que se trata de uma cifra real.
- Armazene segredos reais fora do binário, obtidos com autenticação adequada, e não embutidos de forma ofuscada.