Найти последовательность в файлах с помощью HEX Editor

Несколько дней назад я решил дефрагментировать и оптимизировать внешний жесткий диск объемом 2 ТБ с помощью средства дефрагментации Auslogics. Теперь немного фона здесь. Раздел, который я дефрагментировал, был разделом 1,8 ТБ, зашифрованным VeraCrypt, ответвлением от TrueCrypt. После завершения дефрагментации я обнаружил, что несколько файлов были повреждены. Все файлы, в которых я мог обнаружить повреждение, были сжатыми файлами, сжатыми с использованием сжатия по умолчанию в Windows 10. Я открыл файлы в WinHex и увидел любопытную вещь: конец всех этих поврежденных файлов был блок последовательности "DF DF DF". Вот скриншот проблемы. Обратите внимание, что, хотя на рисунке показано, что это дуговой файл, он все еще был сжат сжатием Windows. Любопытно, что, хотя файлы содержали эти фрагменты DF, бинарный поиск смонтированного раздела не дал такой последовательности.

Теперь я хочу создать командный файл, который будет:

  • Создать список сжатых файлов на диске
  • Проверьте последовательность DF в конце двоичного содержимого каждого файла
  • Составьте список всех затронутых файлов

Я пытался решить эту проблему с помощью скрипта Powershell, но безуспешно. Я думаю, что подойти к проблеме на платформе Linux было бы намного проще, но я понятия не имею, как это сделать. Любая помощь или предложение будет принята с благодарностью.

Дополнительное примечание: многие говорят, что бинарный поиск смонтированного раздела был неудачным из-за того, что раздел зашифрован. Это неверно. Я смонтировал раздел перед поиском. Следовательно, поиск проводился не по RAW-данным жесткого диска, а по данным незашифрованного раздела.

Дополнительные сведения: ОС: Windows 10 Professional X64 / Ubuntu 14.04 x64 Файловая система: NTFS

2 ответа

Решение

Get-Content командлет с -Encoding Byte а также -Tail Switches дает вам то, что вы хотите сопоставить в PowerShell. Предполагая, что это то, где это вам не удается.

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)"}  }

Простой один лайнер. Основано на том, что сказал kRush. Замените $Path на правильный путь.

Другие вопросы по тегам