Comment décoder et désassembler un shellcode
Retransformer des octets de shellcode bruts en assembleur — décoder les formats hexa et échappés, désassembler avec Capstone et repérer les bad chars avant d'exécuter.
N'exécute jamais des octets que tu n'as pas lus — surtout des octets que tu n'as pas écrits. Décoder et désassembler un shellcode te dit ce qu'il fait vraiment et révèle les problèmes avant qu'ils ne coûtent une tentative d'exploit. Pour le contexte, voir qu'est-ce qu'un shellcode.
Pourquoi décoder un shellcode
Trois raisons :
- Confiance — un exemple trouvé sur internet peut faire plus qu'annoncé.
- Débogage — ton propre payload « ne marche pas » et tu dois voir ce qui s'est assemblé.
- Chasse aux bad chars — trouver les valeurs d'octets interdites avant la livraison, pas après.
Encodages courants
Le shellcode voyage sous plusieurs habits. On décode généralement d'abord en octets bruts :
| Format | Aspect |
|---|---|
| Hexa échappé | \x31\xc0\x50… |
| Tableau C | 0x31, 0xc0, 0x50… |
| Hexa simple | 31c05068… |
| Base64 | McBQaC8v… |
Retire l'enveloppe, récupère les octets, puis désassemble.
Désassembler en mnémoniques
Des octets bruts ne veulent rien dire tant qu'on ne les retransforme pas en instructions. Un désassembleur les décode en assembleur, si bien que \x31\xc0 se lit xor eax, eax. Le convertisseur Shellcodes le fait avec les mnémoniques Capstone et repère où une instruction se termine et où la suivante commence — c'est ainsi qu'on attrape un payload qui fait autre chose que ce qu'il annonce.
Lire les octets
Le désassemblage te donne la logique ; une vue hexa te renseigne sur les octets eux-mêmes — chaînes embarquées, valeurs suspectes et caractères interdits. Ce qu'il faut regarder avant de copier quoi que ce soit est dans ce que la vue hexa te révèle.
Un piège à signaler : désassemble dans le mauvais mode CPU et tu obtiens un charabia d'apparence plausible. Les mêmes octets se décodent différemment en 32 bits et en 64 bits, donc un payload x64 lu en x86 produit des instructions réelles mais fausses. Règle toujours l'architecture pour qu'elle corresponde au payload avant de faire confiance à une seule ligne de la sortie.
Décode-le maintenant
Colle un blob échappé ou hexa dans le convertisseur Shellcodes pour normaliser le format et le désassembler. Confirme qu'il correspond à ton intention, vérifie-le contre ton jeu de bad chars, et seulement ensuite exécute-le — dans un lab isolé que tu contrôles. Tests autorisés uniquement : usage responsable.