2 votes

Trouver la séquence dans les fichiers en utilisant l'éditeur HEX

Il y a quelques jours, j'ai décidé de défragmenter et d'optimiser mon disque dur externe de 2 To en utilisant Auslogics Defragmenter. Maintenant, un petit contexte ici. La partition que j'ai défragmentée était une partition de 1,8 To cryptée par VeraCrypt, un fork de TrueCrypt. Après que la défragmentation a été terminée, j'ai constaté que plusieurs fichiers ont été corrompus. Les fichiers dans lesquels j'ai pu détecter la corruption étaient tous des fichiers compressés, compressés en utilisant la compression par défaut de Windows 10. J'ai ouvert les fichiers dans WinHex, et j'ai vu une chose curieuse : La fin de tous ces fichiers corrompus avait une séquence de blocs "DF DF DF". Voici la capture d'écran du problème. Veuillez noter que, bien que l'image montre qu'il s'agit d'un fichier arc, il a quand même été compressé par la compression Windows. La chose curieuse est que, même si les fichiers avaient ces blocs DF, une recherche binaire de la partition montée n'a pas donnée une telle séquence.

Maintenant, je veux créer un fichier batch qui va :

  • Créer une liste des fichiers compressés sur le disque
  • Vérifier la séquence DF à la fin du contenu binaire de chaque fichier
  • Faire une liste de tous les fichiers affectés

J'ai essayé de résoudre ce problème en utilisant un script Powershell mais sans succès. Je pense qu'aborder le problème sur la plate-forme Linux serait beaucoup plus facile, mais je n'ai aucune idée de comment le faire. Toute aide ou suggestion serait grandement appréciée.

Note supplémentaire : De nombreuses personnes ont dit que la recherche binaire de la partition montée était infructueuse en raison du fait que la partition est cryptée. C'est faux. J'ai montée la partition avant la recherche. Par conséquent, la recherche n'a pas été faite sur les données brutes du disque dur mais sur les données de la partition non cryptée.

Détails supplémentaires : OS : Windows 10 Professionnel X64 / Ubuntu 14.04 x64 Système de fichiers : NTFS

2voto

kRush Points 396

La cmdlet Get-Content avec les commutateurs -Encoding Byte et -Tail vous donne ce que vous voulez pour faire correspondre en PowerShell. En supposant que c'est là que ça échoue.

0voto

Mycroft Holmes Points 35
Get-ChildItem -recurse -file -Attributes Compressed -path $Chemin | Foreach-Object -Process { if ((Get-Content -Tail 1 -encoding String -literalpath $_.fullname).endswith("ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß")) { Write-Output "$($_.Name) `t $($_.FullName) `t $($_.length)"}  }

Simple one liner. Basically based on what kRush said. Replace $Chemin with the correct path.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X