Saltar al contenido
Lectura8 minPreview

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ónAlfabetoLargoPista visual
Hexadecimal0-9 y a-fparninguna letra después de la f
Base32A-Z y 2-7, en mayúsculamúltiplo de 8hasta seis = al final
Base64A-Z, a-z, 0-9, +, /múltiplo de 4cero, uno o dos = al final
zlib en base64el de base64múltiplo de 4empieza con eJ (bytes 78 9c)
gzip en base64el de base64múltiplo de 4empieza 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ónQué haceEjemplo
base64 -ddecodificabase64 -d capa.txt
base64 -w 0no corta la salida en líneas de 76base64 -w 0 archivo
xxd -r -phex plano a bytesxxd -r -p capa.hex
xxd -l 16muestra solo los primeros 16 bytesxxd -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 7

El 0a final es el salto de línea.

Errores frecuentes

$ echo 'aG9sYQ=' | base64 -d
holabase64: invalid input

Falta 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 MagicQué hace
Depthcuántas operaciones encadena como máximo (3 por defecto)
Intensive modeprueba más operaciones en cada nivel, más lento
Cribtexto 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.