web-dev-qa-db-ja.com

USBドライブでファイルを削除できないようにするにはどうすればよいですか?

誰かが私のUSBドライブを使用し、それを私に返したところ、削除できないautorun.infを見つけました。 Hのみ(システムファイルとして設定されていない)のファイル属性を変更しようとしましたが、アクセスが拒否されましたと表示され続けます。

USBはFAT32に設定されており、友人に尋ねると、彼は使用していると言っていました パンダUSBワクチン

彼らはこれをどのように行うのですか?ディスクセクターエディタを使用しようとしていますが、この種のファイルを作成して再度削除可能にするためにどの16進ファイルを変更するのかわかりません。ドライブをフォーマットするとドライブが削除されますが、そのような種類のファイル属性を設定する方法について知りたいです。

15
MegaNairda

試験方法

パンダは、基本的に 隠すことによるセキュリティ であるため、理解できる「ワクチン」の正確なメカニズムを明らかにしていないようです。それがどのように機能するかを知っていれば、効果を逆転させることができ、「ワクチン」は役に立たなくなります。

Panda USB Vaccine をダウンロードしてインストールし、フラッシュドライブに「ワクチン接種」し、コマンドを使用してフラッシュドライブのパーティションを dd for windows でダンプしました。

dd --list

dd if=\\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} of=C:\vaccinated.img

ここで、xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxは最初のコマンドで提供されるGUIDで、16進エディターでc:\vaccinated.imgを開き、AUTORUNを検索しました。

USBワクチンの機能

AUTORUN.INFのエントリは、次の12バイトで始まります。

41 55 54 4F 52 55 4E 20 49 4E 46 42

最初の11バイトはスペースが埋め込まれています 8.3ファイル名AUTORUN INF

最後のバイトはファイルの属性を指定し、そのバイナリ表現は次のとおりです。

01000010

Microsoft EFI FAT32ファイルシステム仕様 によると、この最後のバイトは次の形式のビットフィールドです。

XYADVSHR

ここで、ビットADVSH、およびR1です。ファイルがアーカイブされている場合に限り、ディレクトリ、ボリュームID1、システムファイル、非表示または読み取り専用。 HAUTORUN.INFに設定されているため、1は非表示になっています。

ビットXYは予約されており、両方とも0である必要があります。ただし、USBワクチンはY1に設定します。

仕様の内容

属性バイトの上位2ビットは予約されており、ファイルの作成時には常に0に設定し、その後は変更したり調べたりしないでください。

さらに、ディレクトリの内容の検証をお勧めします。

これらのガイドラインは、ディスク保守ユーティリティがディレクトリ構造の将来の拡張機能との互換性を維持しながら、個々のディレクトリエントリの「正確性」を検証できるようにするために提供されています。

  1. DO NOTreservedとマークされたディレクトリエントリフィールドの内容を確認し、ゼロ以外の値の場合は「不良」であると想定します。

  2. DO NOTreservedとマークされたディレクトリエントリフィールドの内容がゼロ以外の値を含む場合(「不良」であると想定して)、ゼロにリセットします。ディレクトリエントリフィールドは、must-be-zeroではなく、reservedで指定されます。それらはアプリケーションによって無視されるべきです。これらのフィールドは、ファイルシステムの将来の拡張を目的としています。それらを無視することにより、ユーティリティはオペレーティングシステムの将来のバージョンで実行し続けることができます。

実際に何が起こるか

CHKDSKは確かに仕様に従い、FAT32ドライバーが理解できないAUTORUN.INFエントリを無視しますが、Windows自体は仕様の要件に準拠していないようです予約済みビットを二度と見ない = :(ファイルとその属性の一覧表示以外の)あらゆる種類のアクセスが拒否されます。

たとえば、コマンド

DIR /A /Q

AUTORUN.INFの所有者は...であると述べています。 FAT32はファイルの所有権をサポートしていないため、\Allと記載する必要があります。

この予期しない動作の理由は、 FAT32-Wikipedia#ディレクトリエントリ によると、WindowsはビットYを内部的に使用して、文字デバイス名(CON、PRN、AUX、CLOCK)を通知するためです。 $、NUL、LPT1、COM1など)。ストレージデバイスには存在しないでください。2

ある意味で、USBワクチンは、Windowsをだまして、AUTORUN.INFが実際のファイルではなく、読み取りや書き込みができないデバイスであると想定させます。

ファイルを削除する方法

ファイルシステムに直接アクセスできる場合は、Y0に設定して(バイト4202に変更して)、ファイルを再度削除可能にするだけで十分です。ディレクトリエントリの最初のバイトをE5に設定して、ファイルを削除済みとして直接マークすることもできます。3

別のオプションは、別のドライバーを使用することです。たとえば、Ubuntu 12.04は、問題なくファイルを削除できます。実際には、ディレクトリエントリを読み取るときに自動的に「修正」します。4


1 この属性は、ボリュームラベルやフォルダシステムボリューム情報などに使用されます。

2確かに、X1に設定しても効果はないようです。

3C:\vaccinated.imgの対応するバイトを16進エディターで変更し、次のコマンドを使用して変更したイメージをフラッシュドライブに書き込むことにより、これを確認しました。

dd if=C:\vaccinated.img of=\\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

4 仕様からの露骨な逸脱ですが、考え抜かれたもののようです。 Ubuntuは、1に設定されている場合、害を及ぼさないため、Xをそのまま残します。 Yビットを1に設定すると、悪意のあるアプリケーションによって簡単に悪用される可能性があります。たとえば、ドライブの空き領域全体を占める削除できないファイルを作成するなどです。

16
Dennis

これは、Win32名前空間の予約名を悪用する巧妙なファイルシステムのトリックです。 Panda USB Vaccineがこれを行う方法の詳細はここに概説されています

基本的に、ソフトウェアはautorun.infという名前のフォルダーを作成し(これにより、同じ名前のファイルがそこに作成されなくなります)、そのフォルダーにLTP1という名前のファイルが作成されます。 DOSでは、LPT1はプリンタポ​​ートを指し、Windowsは下位互換性のためにこれをサポートしています。そのため、LPT1という名前のファイルを要求すると、Windowsはプリンタポ​​ートを開こうとしますが、これにより、フォルダが正常に削除されなくなります。

ドライブをフォーマットせずにフォルダ/ファイルを削除する方法については、 このマイクロソフトサポート技術情報の記事 にいくつかのヒントがあります。

原因5:ファイル名のWin32ネームスペースに予約名が含まれています

ファイル名のWin32ネームスペースに予約名(「lpt1」など)が含まれている場合、ファイルを削除できない場合があります。この問題を解決するには、Win32以外のプログラムを使用してファイルの名前を変更します。 POSIXツールまたは適切な内部構文を使用するその他のツールを使用してファイルを使用できます。

さらに、特定の構文を使用してファイルのパスを指定する場合は、いくつかの組み込みコマンドを使用して、通常のWin32予約名チェックをバイパスできる場合があります。たとえば、WindowsXPでDelコマンドを使用する場合、次の特別な構文を使用してファイルの絶対パスを指定すると、「lpt1」という名前のファイルを削除できます。

del \\?\c:\path_to_file\lpt1

WindowsNTおよびWindows2000で予約された名前のファイルを削除する方法の詳細については、次の記事番号をクリックして、マイクロソフトナレッジベースの記事を表示してください。

120716 Windowsで予約名のファイルを削除する方法

Windows XPで予約名のファイルを削除する方法の詳細については、次の記事番号をクリックして、マイクロソフトサポート技術情報の記事を参照してください。

15226 WindowsXPで予約名のファイルを削除する方法

典型的なWin32CreateFileメカニズムを使用してファイルへのハンドルを開く場合、特定のファイル名は古いスタイルのDOSデバイス用に予約されています。下位互換性のために、これらのファイル名は許可されておらず、通常のWin32ファイル呼び出しを使用して作成することはできません。ただし、この問題はNTFSの制限ではありません。

Win32プログラムを使用すると、MAX_PATHよりも深いフォルダーをトラバースするために使用するのと同じ手法を使用して、ファイルの作成(または削除)時に実行される一般的な名前チェックをバイパスできる場合があります。さらに、一部のPOSIXツールはこれらの名前チェックの対象ではありません。

6
Lèse majesté