GNU/Linux >> Tutoriels Linux >  >> Linux

Commande inverse de vidage hexadécimal

J'ai écrit un court script AWK qui inverse hexdump -C retour aux données d'origine. Utilisez comme ceci :

reverse-hexdump.sh hex.txt > data

Gère les marqueurs de répétition '*' et génère des données originales même si elles sont binaires.hexdump -C et reverse-hexdump.sh faire une paire aller-retour de données. Il est disponible ici :

  • Repo GitHub reverse-hexdump
  • Direct vers reverse-hexdump.sh

Restaurer file , étant donné uniquement la sortie de hexdump file

Si vous n'avez que la sortie de hexdump file et que vous souhaitez restaurer le fichier d'origine, notez d'abord que la sortie par défaut de hexdump dépend de l'endianité du système sur lequel vous avez exécuté hexdump !

Si vous avez accès au système qui a créé le vidage, vous pouvez déterminer son endianité à l'aide de la commande ci-dessous :

[[ "$(printf '\01\03' | hexdump)" == *0103* ]] && echo big || echo little

Inverser le vidage hexadécimal little-endian

C'est le cas le plus courant. Tous les systèmes x86/x64 sont little-endian. Si vous ne connaissez pas l'endianité du système qui a exécuté hexdump file , essayez ceci.

sed 's/ \(..\)\(..\)/ \2\1/g;$d' dump | xxd -r

Le sed partie convertit hexdump au format xxd , du moins jusqu'à présent xxd -r fonctionne.

Inverser le vidage hexadécimal big-endian

sed '$d' dump | xxd -r

Bogues connus (voir la section des commentaires)

  • Un octet nul à la fin est ajouté si le fichier d'origine était de longueur impaire (par exemple, 1, 3, 5, 7, ..., octet de long).
  • Les sections répétées du fichier d'origine ne sont pas restaurées correctement si elles étaient hexdump à l'aide d'un * .

Vous pouvez vérifier votre dump pour les cas problématiques ci-dessus en exécutant la commande ci-dessous :

grep -qE '^\*|^[0-9a-f]*[13579bdf] *$' dump && echo bug || echo ok

Meilleure alternative pour créer des hexdumps en premier lieu

Outre le non-posix (et donc pas si portable) xxd il y a od (o ctale d ump) qui devrait être disponible sur tous les systèmes de type Unix comme il est spécifié par posix :

od -tx1 -An -v

Imprimera un hex vidage décimal, regroupant les chiffres en octets uniques (-tx1 ), avec n o A préfixes d'adresse (-An , similaire à xxd -p ) et sans abréger les sections répétées en * (-v ). Vous pouvez inverser un tel vidage en utilisant xxd -r -p .


Il existe un outil similaire appelé xxd . Si vous exécutez xxd avec juste un nom de fichier, il vide les données dans un format de vidage hexadécimal assez standard :

# xxd bdata
0000000: 0001 0203 0405
......

Maintenant, si vous redirigez la sortie vers xxd avec le -r et redirigez-le vers un nouveau fichier, vous pouvez reconvertir le vidage hexadécimal en binaire :

# xxd bdata | xxd -r >bdata2
# cmp bdata bdata2
# xxd bdata2
0000000: 0001 0203 0405

Linux
  1. Comment fonctionne Hexdump

  2. Comment utiliser la commande Linux Hexdump avec des exemples pratiques

  3. Commande Linux mv

  4. Linux du command

  5. Outils d'ingénierie inverse sous Linux - chaînes, nm, ltrace, strace, LD_PRELOAD

Commande de surveillance Linux

Commande Xargs sous Linux

Commande W sous Linux

À la commande sous Linux

Tutoriel de commande Linux xxd pour les débutants (avec exemples)

commande ifconfig