web-dev-qa-db-ja.com

HEXエディターを使用してファイル内のシーケンスを検索する

数日前、AuslogicsDefragmenterを使用して2TBの外付けハードディスクを最適化することにしました。さて、ここに少し背景があります。私がデフラグしたパーティションは、TrueCryptのフォークであるVeraCryptによって暗号化された1.8TBのパーティションでした。最適化が完了した後、いくつかのファイルが破損していることがわかりました。破損を検出できたファイルはすべて、Windows10のデフォルトの圧縮を使用して圧縮された圧縮ファイルでした。 WinHexでファイルを開いたところ、奇妙なことがわかりました。これらの破損したファイルの最後には、「DF DF DF」シーケンスのブロックがありました。 スクリーンショットは次のとおりです)問題の。 写真はそれがアークファイルであることを示していますが、それはまだWindows圧縮によって圧縮されていることに注意してください。不思議なことに、ファイルにそれらがあったとしてもDFチャンク、マウントされたパーティションのバイナリ検索では、そのようなシーケンスは生成されませんでした。

次に、次のようなバッチファイルを作成します。

  • ディスク上の圧縮ファイルのリストを作成します
  • 各ファイルのバイナリコンテンツの最後にあるDFシーケンス)を確認します
  • 影響を受けるすべてのファイルのリストを作成します

Powershellスクリプトを使用してこれを解決しようとしましたが、失敗しました。 Linuxプラットフォームで問題に取り組む方がはるかに簡単だと思いますが、どうすればよいかわかりません。どんな助けや提案も大歓迎です。

追記:多くの人が、パーティションが暗号化されているため、マウントされたパーティションのバイナリ検索が失敗したと言っています。それは間違っている。検索前にパーティションをマウントしました。したがって、検索はHDDのRAWデータではなく、暗号化されていないパーティションのデータで行われました。

追加の詳細:OS:Windows 10 Professional X64/Ubuntu 14.04 x64ファイルシステム:NTFS

Get-Contentコマンドレットと-Encoding Byteおよび-Tailスイッチは、PowerShellで照合したいものを提供します。これがあなたを失敗させるところだと仮定します。

2
kRush
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を正しいパスに置き換えます。

0
Mycroft Holmes