Reconocer codificaciones a ojo y los límites de Magic
Una codificación se delata por qué caracteres usa, cuánto mide y cómo empieza. Eso mismo es lo que su script preguntará en cada vuelta.
Reconocer una capa a ojo
| Codificación | Alfabeto | Largo | Pista visual |
|---|---|---|---|
| Hexadecimal | 0-9 y a-f | par | ninguna letra después de la f |
| Base32 | A-Z y 2-7, en mayúscula | múltiplo de 8 | hasta seis = al final |
| Base64 | A-Z, a-z, 0-9, +, / | múltiplo de 4 | cero, uno o dos = al final |
| zlib en base64 | el de base64 | múltiplo de 4 | empieza con eJ (bytes 78 9c) |
| gzip en base64 | el de base64 | múltiplo de 4 | empieza con H4sI (bytes 1f 8b) |
El orden importa. Un texto hexadecimal también es base64 válido: decodificado como base64 da basura y ningún error. Yo pruebo de lo más estrecho a lo más ancho: hex, base32, base64.
Memorice dos inicios más: TVqQ es un ejecutable de Windows (MZ) en base64, y lo que sigue a powershell -enc es base64 de UTF-16, lleno de A: SQBFAFgA es IEX con un byte cero tras cada letra.
Ficha de base64 y xxd
base64 se llama como la codificación: 64 símbolos de 6 bits. xxd no es sigla; es el volcado hexadecimal que viene con Vim.
base64 [-d] [-w COLUMNAS] [ARCHIVO]
xxd [-r] [-p] [-l BYTES] [ARCHIVO]| Opción | Qué hace | Ejemplo |
|---|---|---|
base64 -d | decodifica | base64 -d capa.txt |
base64 -w 0 | no corta la salida en líneas de 76 | base64 -w 0 archivo |
xxd -r -p | hex plano a bytes | xxd -r -p capa.hex |
xxd -l 16 | muestra solo los primeros 16 bytes | xxd -l 16 datos.bin |
Dos capas, base64 por fuera y hex adentro:
$ echo 'NzI2NTc1NmU2OTZmNmUyMDY1NmUyMDQzNjE3Mjc0NjE2NzZmMjA2MTIwNmM2MTczMjAzNzBhCg==' | base64 -d
7265756e696f6e20656e204361727461676f2061206c617320370a
$ echo 'NzI2NTc1NmU2OTZmNmUyMDY1NmUyMDQzNjE3Mjc0NjE2NzZmMjA2MTIwNmM2MTczMjAzNzBhCg==' | base64 -d | xxd -r -p
reunion en Cartago a las 7El 0a final es el salto de línea.
Errores frecuentes
$ echo 'aG9sYQ=' | base64 -d
holabase64: invalid inputFalta un =. GNU base64 decodifica lo que puede, lo pega a la salida y se queja al final; Python dice binascii.Error: Incorrect padding. Antes de agregar = hasta callar el error, confirme que copió la capa entera: casi siempre falta un pedazo del final.
CyberChef y su Magic
CyberChef corre en el navegador, también sin internet. Su operación Magic prueba decodificaciones sola y propone la receta que da algo con más pinta de texto.
| Parámetro de Magic | Qué hace |
|---|---|
| Depth | cuántas operaciones encadena como máximo (3 por defecto) |
| Intensive mode | prueba más operaciones en cada nivel, más lento |
| Crib | texto o regex que espera encontrar, como secwing |
Para la primera mirada es excelente. En una cebolla larga choca con dos límites. Tres niveles no alcanzan para 50 capas, y subir la profundidad dispara el tiempo. Y si el autor marca capas con un prefijo propio o aplica ROT13 sobre el base64, el resultado sigue pareciendo base64 y Magic no tiene cómo saberlo.