Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
xortool — Un outil pour analyser le chiffrement xor multi-byte | Kitploit
Outils/GitHubGitHub/hellman/xortool
Analyse StatiqueOutils de Chiffrement/DéchiffrementAnalyse ForensiqueCryptographieAnalyse de BinairesApprentissage et Éducation
GitHubhellman/xortool

xortool

Un outil pour analyser le chiffrement xor multi-byte

Voir le dépôt
1.5k180il y a 1 anVérifié par Kitploit

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

xortool.py

Un outil pour faire des analyses xor :

  • deviner la longueur de la clé (basée sur le nombre de caractères identiques)
  • deviner la clé (basée sur la connaissance du caractère le plus fréquent)

Avis : xortool fonctionne désormais uniquement sur Python 3. L'ancienne version Python 2 est accessible sur la branche py2. Le paquet pip a été mis à jour.

Installation

root@kitploit:~
$ pip3 install xortool

Pour le développement ou la construction de ce dépôt, poetry est nécessaire.

root@kitploit:~
poetry build
pip install dist/xortool*.whl

Usage

root@kitploit:~
xortool
  A tool to do some xor analysis:
  - guess the key length (based on count of equal chars)
  - guess the key (base on knowledge of most frequent char)

Usage:
  xortool [-x] [-m MAX-LEN] [-f] [-t CHARSET] [FILE]
  xortool [-x] [-l LEN] [-c CHAR | -b | -o] [-f] [-t CHARSET] [-p PLAIN] [-r PERCENT] [FILE]
  xortool [-x] [-m MAX-LEN| -l LEN] [-c CHAR | -b | -o] [-f] [-t CHARSET] [-p PLAIN] [-r PERCENT] [FILE]
  xortool [-h | --help]
  xortool --version

Options:
  -x --hex                          l'entrée est une chaîne hexadécimale
  -l LEN, --key-length=LEN          longueur de la clé
  -m MAX-LEN, --max-keylen=MAX-LEN  longueur maximale de clé à tester [par défaut : 65]
  -c CHAR, --char=CHAR              caractère le plus fréquent (un caractère ou code hexadécimal)
  -b --brute-chars                  forcer brutalement tous les caractères les plus fréquents possibles
  -o --brute-printable              identique à -b mais ne vérifie que les caractères imprimables
  -f --filter-output                filtrer les sorties en fonction du jeu de caractères
  -t CHARSET --text-charset=CHARSET jeu de caractères du texte cible [par défaut : imprimable]
  -p PLAIN --known-plaintext=PLAIN  utiliser un texte clair connu pour le décodage
  -r PERCENT, --threshold=PERCENT   pourcentage de validité seuil [par défaut : 95]
  -h --help                         afficher cette aide

Notes:
  Text character set:
    * Pre-defined sets: printable, base32, base64
    * Custom sets:
      - a: lowercase chars
      - A: uppercase chars
      - 1: digits
      - !: special chars
      - *: printable chars

Examples:
  xortool file.bin
  xortool -l 11 -c 20 file.bin
  xortool -x -c ' ' file.hex
  xortool -b -f -l 23 -t base64 message.enc
  xortool -b -p "xctf{" message.enc
  xortool -r 80 -p "flag{" -c ' ' message.enc

Example 1

root@kitploit:~
# xor is xortool/xortool-xor
tests $ xor -f /bin/ls -s "secret_key" > binary_xored

tests $ xortool binary_xored
The most probable key lengths:
   2:   5.0%
   5:   8.7%
   8:   4.9%
  10:   15.4%
  12:   4.8%
  15:   8.5%
  18:   4.8%
  20:   15.1%
  25:   8.4%
  30:   14.9%
Key-length can be 5*n
Most possible char is needed to guess the key!

# 00 is the most frequent byte in binaries
tests $ xortool binary_xored -l 10 -c 00
...
1 possible key(s) of length 10:
secret_key

# decrypted ciphertexts are placed in ./xortool_out/Number_<key repr>
# ( have no better idea )
tests $ md5sum xortool_out/0_secret_key /bin/ls
29942e290876703169e1b614d0b4340a  xortool_out/0_secret_key
29942e290876703169e1b614d0b4340a  /bin/ls

L'utilisation la plus courante est de passer simplement le fichier chiffré et le caractère le plus fréquent (généralement 00 pour les binaires et 20 pour les fichiers texte) - la longueur sera choisie automatiquement :

root@kitploit:~
tests $ xortool tool_xored -c 20
The most probable key lengths:
   2:   5.6%
   5:   7.8%
   8:   6.0%
  10:   11.7%
  12:   5.6%
  15:   7.6%
  20:   19.8%
  25:   7.8%
  28:   5.7%
  30:   11.4%
Key-length can be 5*n
1 possible key(s) of length 20:
an0ther s3cret \xdd key

Ici, la clé est plus longue que la limite par défaut de 32 :

root@kitploit:~
tests $ xortool ls_xored -c 00 -m 64
The most probable key lengths:
   3:   3.3%
   6:   3.3%
   9:   3.3%
  11:   7.0%
  22:   6.9%
  24:   3.3%
  27:   3.2%
  33:   18.4%
  44:   6.8%
  55:   6.7%
Key-length can be 3*n
1 possible key(s) of length 33:
really long s3cr3t k3y... PADDING

Donc, si le déchiffrement automatique échoue, vous pouvez calibrer :

  • (-m) longueur maximale pour essayer des clés plus longues
  • (-l) longueur sélectionnée pour voir des clés intéressantes
  • (-c) le caractère le plus fréquent pour produire le bon texte clair

Example 2

Nous recevons un message encodé en Base64 et XORé avec une clé inconnue.

root@kitploit:~
# xortool message.enc
The most probable key lengths:
   2:   12.3%
   4:   13.8%
   6:   10.5%
   8:   11.5%
  10:   8.6%
  12:   9.4%
  14:   7.1%
  16:   7.8%
  23:   10.4%
  46:   8.7%
Key-length can be 4*n
Most possible char is needed to guess the key!

Nous pouvons maintenant tester les longueurs de clé tout en filtrant les sorties pour ne conserver que les textes clairs correspondant au jeu de caractères Base64. Après avoir essayé quelques longueurs, nous trouvons la bonne, qui ne donne qu'un seul texte clair avec un pourcentage de caractères valides supérieur au seuil par défaut de 95%.

root@kitploit:~
$ xortool message.enc -b -f -l 23 -t base64
256 possible key(s) of length 23:
\x01=\x121#"0\x17\x13\t\x7f ,&/\x12s\x114u\x170#
\x00<\x130"#1\x16\x12\x08~!-\'.\x13r\x105t\x161"
\x03?\x103! 2\x15\x11\x0b}".$-\x10q\x136w\x152!
\x02>\x112 !3\x14\x10\n|#/%,\x11p\x127v\x143
\x059\x165\'&4\x13\x17\r{$("+\x16w\x150q\x134\'
...
Found 1 plaintexts with 95.0%+ valid characters
See files filename-key.csv, filename-char_used-perc_valid.csv

En filtrant les sorties sur le jeu de caractères Base64, nous conservons directement la seule solution.

Information

Auteur : hellman

Licence : Licence MIT

Télécharger l’outil