Skip to content
shellcodes

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.

Publié le 2 min de lecture

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 :

FormatAspect
Hexa échappé\x31\xc0\x50…
Tableau C0x31, 0xc0, 0x50…
Hexa simple31c05068…
Base64McBQaC8v…

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.

Articles associés

Des exemples de shellcode annotés pour Linux x86 et x64 — execve /bin/sh et reverse TCP — avec les octets, le désassemblage et les pièges.
Comment fonctionne un shellcode Linux — syscalls, registres et code indépendant de la position — et comment l'assembler, l'encoder et le tester sans risque.
Comparaison des façons de générer un shellcode — msfvenom, assembleur écrit à la main et générateur dans le navigateur — avec les compromis et quand utiliser chacune.