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

516
Sabyasachi Mukherjee

Несколько дней назад я решил дефрагментировать и оптимизировать внешний жесткий диск объемом 2 ТБ с помощью программы Auslogics Defragmenter. Теперь немного фона здесь. Раздел, который я дефрагментировал, был разделом 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
Я могу дать вам только предположение. В Hex DF это символ 233, в некоторой _codepage_ (set) буква `Ú`. Сказано мало. Если вы видите это в двоичном виде, шаблон `DF` =` 11011111`, кажется, является одним из шаблонов, используемых для безопасного стирания жесткого диска. Если что-то пошло не так и этот сегмент был перезаписан по соображениям безопасности ... Тем не менее, попытайтесь понять, как работает инструмент дефрагментации, который вы использовали в зашифрованном разделе. Удачи. Hastur 7 лет назад 0
Я думаю, что PerfectDisk уже работал в фоновом режиме, и когда я запустил второй дефрагментатор, каким-то образом возник конфликт между двумя дефрагментаторами, и сжатые файлы получили главный удар по нему. Sabyasachi Mukherjee 7 лет назад 0

2 ответа на вопрос

2
kRush

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

Вот [ссылка] (http://stackoverflow.com/questions/10672092/read-parse-binary-files-with-powershell), которая помешала мне использовать переключатель -Encoding Byte. Может ли этот [инструмент] (https://sourceforge.net/projects/grepwin/) выполнить ту же задачу? Sabyasachi Mukherjee 7 лет назад 0
Поможет ли вам, если я скажу вам, что Microsoft MVP из 250 тысяч представителей говорит о своей заднице? Инструмент выглядит так, как будто он мог бы сделать это, но если вы на самом деле не попробуете что-то и не предоставите подробности, где это вам не удастся, я ухожу отсюда, особенно если посмотреть, как это, по сути, обман вашего старого вопроса. kRush 7 лет назад 0
Ну, я смонтировал раздел в режиме только для чтения и попробовал командлет `Get-Content`, и это сработало! Что касается вопроса о том, что этот вопрос является дурацким, то предыдущий вопрос касался восстановления данных, а это просто вопрос поиска поврежденных файлов. Sabyasachi Mukherjee 7 лет назад 0
@SabyasachiMukherjee Полагаю, теперь вы можете даже поддержать ответ ... :-) ... Не все люди хотят быть [незамеченными героями] (http://superuser.com/help/badges/59/unsung- герой) :-) Hastur 7 лет назад 0
У меня нет необходимых очков репутации для публичного голосования. Сожалею. Sabyasachi Mukherjee 7 лет назад 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)"} } 

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