Suchen Sie die Sequenz in Dateien mit dem HEX-Editor

566
Sabyasachi Mukherjee

Vor ein paar Tagen habe ich mich entschlossen, meine externe 2-TB-Festplatte mit Auslogics Defragmenter zu defragmentieren und zu optimieren. Nun ein kleiner Hintergrund hier. Die von mir defragmentierte Partition war eine 1,8-TB-Partition, die mit VeraCrypt, einem Zweig von TrueCrypt, verschlüsselt wurde. Nachdem die Defragmentierung abgeschlossen war, stellte ich fest, dass mehrere Dateien beschädigt waren. Die Dateien, in denen ich die Beschädigung feststellen konnte, waren alle komprimierte Dateien, die mit der Standardkomprimierung von Windows 10 komprimiert wurden. Ich habe die Dateien in WinHex geöffnet, und ich habe eine merkwürdige Sache gesehen: Das Ende all dieser beschädigten Dateien hatte einen Block von "DF DF DF" -Sequenz. Hier ist der Screenshot des Problems.Bitte beachten Sie, dass das Bild zwar eine Bogendatei ist, diese jedoch durch die Windows-Komprimierung komprimiert wurde. Das Merkwürdige ist, dass, obwohl die Dateien diese DF-Chunks hatten, eine binäre Suche der gemounteten Partition keine solche Sequenz ergab.

Nun möchte ich eine Batch-Datei erstellen, die:

  • Erstellen Sie eine Liste komprimierter Dateien auf der Festplatte
  • Überprüfen Sie die DF-Sequenz am Ende des binären Inhalts jeder Datei
  • Erstellen Sie eine Liste aller betroffenen Dateien

Ich habe versucht, das Problem mit dem Powershell-Skript zu lösen, war aber nicht erfolgreich. Ich denke, es wäre viel einfacher, das Problem in der Linux-Plattform anzugehen, aber ich habe keine Ahnung, wie es geht. Jede Hilfe oder Anregung wäre sehr dankbar.

Zusätzliche Anmerkung: Viele haben gesagt, dass die binäre Suche der gemounteten Partition nicht erfolgreich war, da die Partition verschlüsselt ist. Das ist falsch. Ich habe die Partition vor der Suche gemountet. Daher wurde nicht nach RAW-Daten der Festplatte gesucht, sondern nach den Daten der unverschlüsselten Partition.

Zusätzliche Details: Betriebssystem: Windows 10 Professional X64 / Ubuntu 14.04 x64 Dateisystem: NTFS

2
Ich kann dir nur raten. In Hex DF ist das Zeichen 233, in einem _codepage_ (set) der Buchstabe "Ú". Es sagte wenige. Wenn Sie es binär sehen, scheint das Muster `DF` =` 11011111` eines der Muster zu sein, das zum sicheren Löschen der Festplatte verwendet wird. Wenn etwas nicht stimmt und dieses Segment aus Sicherheitsgründen überschrieben wurde ... Versuchen Sie trotzdem zu verstehen, wie das Defragmentierungsprogramm funktioniert, das Sie auf einer verschlüsselten Partition verwendet haben. Viel Glück. Hastur vor 7 Jahren 0
Ich denke, PerfectDisk lief bereits im Hintergrund und als ich einen zweiten Defragmentierer ausführte, gab es irgendwie einen Konflikt zwischen den beiden Defragmentierern, und die komprimierten Dateien bekamen die Hauptlast davon. Sabyasachi Mukherjee vor 7 Jahren 0

2 Antworten auf die Frage

2
kRush

Das Get-ContentCmdlet mit den Schaltern -Encoding Byteund zeigt -TailIhnen, gegen was Sie in PowerShell abgleichen möchten. Angenommen, hier versagt es Ihnen.

Hier ist ein Link (http://stackoverflow.com/questions/10672092/read-parse-binary-files-with-powershell), der mich von der Verwendung des -Encoding-Byte-Schalters abschreckte. Kann dieses [Werkzeug] (https://sourceforge.net/projects/grepwin/) dieselbe Aufgabe erfüllen? Sabyasachi Mukherjee vor 7 Jahren 0
Wäre es hilfreich, wenn ich Ihnen sagen würde, dass der Microsoft MVP mit 250.000 Wiedergaben seinen Hintern ausredet? Das Tool sieht so aus, als würde es _could_ tun, es sei denn, Sie versuchen tatsächlich etwas und geben an, wo es Ihnen fehlschlägt. Ich bin hier raus, vor allem, weil dies im Grunde ein Betrug Ihrer eigenen älteren Frage ist. kRush vor 7 Jahren 0
Nun, ich habe die Partition im schreibgeschützten Modus bereitgestellt und das Cmdlet `Get-Content` ausprobiert. Das hat funktioniert! In Bezug auf die Frage, dass es sich um eine Dupe-Frage handelt, war die vorherige Frage die Wiederherstellung von Daten, und dies betrifft lediglich die Suche nach beschädigten Dateien. Sabyasachi Mukherjee vor 7 Jahren 0
@SabyasachiMukherjee Ich nehme an, dass Sie jetzt sogar die Antwort bestätigen können ... :-) ... Nicht alle Leute wollen ein [unsungierter Held] sein (http://superuser.com/help/badges/59/unsung- Held) :-) Hastur vor 7 Jahren 0
Ich habe nicht die erforderlichen Reputationspunkte, um eine öffentliche Aufwertung zu erzielen. Es tut uns leid. Sabyasachi Mukherjee vor 7 Jahren 0
0
Mycroft Holmes
Get-ChildItem -recurse -file -Attributes Compressed -path $Path | Foreach-Object -Process { if ((Get-Content -Tail 1 -encoding String -literalpath $_.fullname).endswith("ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß")) { Write-Output "$($_.Name) `t $($_.FullName) `t $($_.length)"} } 

Einfach ein Liner. Grundsätzlich basiert auf dem, was kRush gesagt hat. Ersetzen Sie $ Path durch den richtigen Pfad.