Cómo decodificar y desensamblar shellcode
Convierte bytes de shellcode en crudo de vuelta a ensamblador — decodifica formatos hex y con escapes, desensambla con Capstone y detecta bad chars antes de ejecutar.
Nunca ejecutes bytes que no hayas leído —sobre todo bytes que no escribiste tú—. Decodificar y desensamblar el shellcode te dice qué hace realmente y saca a la luz problemas antes de que te cuesten un intento de exploit. Para contexto, mira qué es el shellcode.
Por qué decodificar el shellcode
Tres razones:
- Confianza — un ejemplo de internet podría hacer más de lo que dice.
- Depuración — tu propio payload "no funciona" y necesitas ver qué se ensambló.
- Caza de bad chars — encontrar valores de byte prohibidos antes de la entrega, no después.
Codificaciones habituales
El shellcode viaja con varias pieles. Normalmente decodificas a bytes en crudo primero:
| Formato | Aspecto |
|---|---|
| Hex con escapes | \x31\xc0\x50… |
| Array de C | 0x31, 0xc0, 0x50… |
| Hex plano | 31c05068… |
| Base64 | McBQaC8v… |
Quita el envoltorio, obtén los bytes y luego desensambla.
Desensamblar a mnemónicos
Los bytes en crudo no significan nada hasta que los conviertes de vuelta en instrucciones. Un desensamblador los decodifica a ensamblador, de modo que \x31\xc0 se lee como xor eax, eax. El conversor de Shellcodes lo hace con mnemónicos de Capstone y detecta dónde termina una instrucción y empieza la siguiente — que es como pillas un payload que hace algo distinto de lo anunciado.
Leer los bytes
El desensamblado te dice la lógica; una vista hex te habla de los bytes en sí — cadenas incrustadas, valores sospechosos y caracteres prohibidos. Qué buscar antes de copiar nada está en qué te dice el visor hex.
Una trampa que merece la pena señalar: desensambla en el modo de CPU equivocado y obtienes basura con apariencia plausible. Los mismos bytes se decodifican distinto como 32 bits y como 64 bits, así que un payload x64 leído como x86 produce instrucciones reales pero erróneas. Ajusta siempre la arquitectura al payload antes de fiarte de una sola línea de la salida.
Decodifícalo ahora
Pega un blob con escapes o en hex en el conversor de Shellcodes para normalizar el formato y desensamblarlo. Confirma que coincide con tu intención, compáralo con tu conjunto de bad chars y solo entonces ejecútalo — dentro de un laboratorio aislado que controles. Solo pruebas autorizadas: uso responsable.