Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Harald — Un CPU minimal en mémoire pour la création de protocoles à la volée et agnostiques | Kitploit
Outils/GitHubGitHub/gmh5225/harald
ExploitationÉvasion IDS/IPSScripting et AutomatisationSécurité RéseauTests d'IntrusionCommandement et ContrôleUtilitaires et FrameworksRed TeamingDéveloppement de Charges Utiles
GitHubgmh5225/harald

Harald

Un CPU minimal en mémoire pour la création de protocoles à la volée et agnostiques

17il y a 1 anPas encore vérifié
Voir le dépôt

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Harald CPU

Harald est un minuscule CPU de haut niveau en mémoire, capable de traiter un ensemble d'instructions pour générer des protocoles de couche applicative à utiliser sur un protocole réseau donné (TCP/UDP).

Harald consomme un flux d'OPCODES et applique différentes transformations à la charge utile pour qu'elle soit adaptée au protocole de couche applicative défini.

[!TIP] Pourquoi Harald ? Vous connaissez peut-être Harald Gormsson, roi du Danemark, pour son surnom : Blátǫnn, ou comme on le prononce aujourd'hui, Bluetooth. La technologie a été nommée d'après le surnom de Harald car il connectait les royaumes danois et viking à l'époque. J'ai donc nommé ceci d'après son prénom.

Diagramme

Harald se comporte comme un CPU. Il suit un ensemble d'OPCODES qui définissent des actions. Un PROTOCOLE. Harald exécute les opérations requises pour créer le protocole requis à la volée.

Une fois le PROTOCOLE fourni, Harald itère sur la PAYLOAD à envoyer en parcourant l'intégralité du PROTOCOLE une fois pour chaque fragment. C'est-à-dire : si la payload devait être découpée en plusieurs fragments, Harald utilisera le même protocole pour chaque fragment, en exécutant chaque action définie dans le protocole contre le fragment de payload courant.

Harald maintient un certain nombre de registres à utiliser par le protocole pour stocker des valeurs. Ces registres peuvent être utilisés pour effectuer de multiples opérations, telles que l'addition, la soustraction, l'encodage et le décodage... etc.

Harald alloue dynamiquement un tableau de résultats où le protocole peut stocker les réponses à chaque requête effectuée lors de l'envoi d'un fragment de payload.

Diagramme de haut niveau de Harald

Opcodes

Harald prend en charge une variété d'Opcodes à fournir en tant que protocole. Harald effectue un ensemble d'opérations de haut niveau à la réception d'un Opcode donné. Chaque Opcode attend un ensemble prédéfini d'arguments avec une longueur prédéfinie.

OPCODE::NºDescriptionARGS::Size
H_F_APPEND::0x01Ajoute les N octets suivants à la fin de la payloadSize::4, NBytes::N
H_F_PREPEND::0x02Ajoute les N octets suivants au début de la payloadSize::4, NBytes::N
H_F_SPLIT::0x03Découpe la Payload en fragments de la taille donnéeSize::4
H_F_PAYLOAD_INJECT::0x04Injecte le fragment de Payload dans la End Payload-
H_F_SOCK_INIT::0x05Initialise la connexion socketIsIPAddress:1, SSL_Enabled::1, TCP/UDP::1, [(HostLen::4,HostName:N)/IPAddress::4], Port::2
H_F_SEND::0x06Envoie la End Payload construite-
H_F_RECV::0x07Reçoit jusqu'à N octetsSize::4
H_F_CLOSE::0x08Ferme le socket et nettoie-
H_F_INJECT::0x09Injecte le registre demandé dans la End PayloadReg::1
H_F_ENCODE_STR::0x0AEncode un champ de Payload en sa représentation chaîneIsReg::1, [(Payload::1, Field::1)/Reg::1], Format::1
H_F_DECODE_STR::0xA0Décode le contenu d'un registre en sa représentation numériqueReg::1
H_F_ENCODE_STRB64::0x0BEncode un champ de Payload en sa représentation chaîne B64Payload::1, Field::1
H_F_COMPUTE_FRAG_LENGTH::0x0DCalcule la longueur du prochain fragment à envoyer-
H_F_SEARCH::0x0ERecherche un motif d'octets donné de taille N donnée dans un registre donnéReg::1, Size::4, NBytes::N
H_F_SEEK::0x0FDéplace le curseur dans une payload donnée d'un nombre d'octets donnéPayload::1, Offset::4
H_F_PUSH::0x10Pousse un nombre d'octets ou le contenu d'un registre dans un autre registreIsReg::1, [Size::4, NBytes::N]/SrcReg::1, DstReg::2
H_F_ADD::0x12Additionne deux registres ou un nombre à un registreIsReg::1, [Size::4, NBytes::N]/SrcReg::1, DstReg::2
H_F_SUBSTRACT::0x13Soustrait deux registres ou un nombre à un registreIsReg::1, [Size::4, NBytes::N]/SrcReg::1, DstReg::2
H_F_READ::0x14Lit depuis un registre donné jusqu'à la longueur stockée dans un autre registreFromReg::1, SizeReg::1
H_F_STORE::0x15Stocke une valeur de registre dans le Storage de HaraldReg::1

Exemple HTTP

Le flux d'Opcodes suivant générera les données requises à envoyer pour qu'une communication soit comprise comme du HTTP. Il initiera, modifiera la payload pour qu'elle ressemble à du trafic HTTP, l'enverra sur une connexion SSL/TLS, et fermera la connexion à la fin.

H_F_SPLIT, 0x00, 0x00, 0x00, 0xFF,                         // Splits the Payload
H_F_APPEND, 0x00, 0x00, 0x00, 0x46,                           // Appends...
  'P', 'O', 'S', 'T', ' ', '/', ' ',                              // POST / 
  'H', 'T', 'T', 'P', '/', '1', '.', '1', '\r', '\n',             // HTTP/1.1
  'H', 'o', 's', 't', ':', ' ',                                   // Host: 
    'd', 'o', 'm', 'a', 'i', 'n', '.', 'c', 'o', 'm', '\r', '\n', // domain.com
  'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', ':', ' ',     // Connection: 
    'c', 'l', 'o', 's', 'e', '\r', '\n',                          // close
  'C', 'o', 'n', 't', 'e', 'n', 't', '-',                         // Content-
    'L', 'e', 'n', 'g', 't', 'h', ':', ' ',                       // Length: 
H_F_COMPUTE_FRAG_LENGTH,                                 // Next Fragment's size
H_F_ENCODE_STR, H_PAY_END_PAYLOAD, H_PAY_FRAGMENT_SIZE, 'u',  // FragSize encode
H_F_INJECT, H_REG_RET,                   // Inject the Fragment Size encoded str
H_F_APPEND, 0x00, 0x00, 0x00, 0x04, '\r', '\n', '\r', '\n', // Append Body begin
H_F_PAYLOAD_INJECT,                                        // Inject the Payload
H_F_SOCK_INIT, 0x01, 0x01, 0x7F, 0x00, 0x00, 0x01, 0x04, 0xD2,    // Init Socket
H_F_SEND,                                    // Send the Payload over the socket
H_F_CLOSE                                        // Close the socket and cleanup 
Télécharger l’outil