誰かが私のUSBドライブを使用し、それを私に返したところ、削除できないautorun.inf
を見つけました。 Hのみ(システムファイルとして設定されていない)のファイル属性を変更しようとしましたが、アクセスが拒否されましたと表示され続けます。
USBはFAT32に設定されており、友人に尋ねると、彼は使用していると言っていました パンダUSBワクチン
彼らはこれをどのように行うのですか?ディスクセクターエディタを使用しようとしていますが、この種のファイルを作成して再度削除可能にするためにどの16進ファイルを変更するのかわかりません。ドライブをフォーマットするとドライブが削除されますが、そのような種類のファイル属性を設定する方法について知りたいです。
パンダは、基本的に 隠すことによるセキュリティ であるため、理解できる「ワクチン」の正確なメカニズムを明らかにしていないようです。それがどのように機能するかを知っていれば、効果を逆転させることができ、「ワクチン」は役に立たなくなります。
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
を検索しました。
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
ここで、ビットA
、D
、V
、S
、H
、およびR
は1
です。ファイルがアーカイブされている場合に限り、ディレクトリ、ボリュームID1、システムファイル、非表示または読み取り専用。 H
がAUTORUN.INF
に設定されているため、1
は非表示になっています。
ビットX
とY
は予約されており、両方とも0
である必要があります。ただし、USBワクチンはY
を1
に設定します。
属性バイトの上位2ビットは予約されており、ファイルの作成時には常に0に設定し、その後は変更したり調べたりしないでください。
さらに、ディレクトリの内容の検証をお勧めします。
これらのガイドラインは、ディスク保守ユーティリティがディレクトリ構造の将来の拡張機能との互換性を維持しながら、個々のディレクトリエントリの「正確性」を検証できるようにするために提供されています。
DO NOTreservedとマークされたディレクトリエントリフィールドの内容を確認し、ゼロ以外の値の場合は「不良」であると想定します。
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
が実際のファイルではなく、読み取りや書き込みができないデバイスであると想定させます。
ファイルシステムに直接アクセスできる場合は、Y
を0
に設定して(バイト42
を02
に変更して)、ファイルを再度削除可能にするだけで十分です。ディレクトリエントリの最初のバイトをE5
に設定して、ファイルを削除済みとして直接マークすることもできます。3
別のオプションは、別のドライバーを使用することです。たとえば、Ubuntu 12.04は、問題なくファイルを削除できます。実際には、ディレクトリエントリを読み取るときに自動的に「修正」します。4
1 この属性は、ボリュームラベルやフォルダシステムボリューム情報などに使用されます。
2確かに、X
を1
に設定しても効果はないようです。
3C:\vaccinated.img
の対応するバイトを16進エディターで変更し、次のコマンドを使用して変更したイメージをフラッシュドライブに書き込むことにより、これを確認しました。
dd if=C:\vaccinated.img of=\\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
4 仕様からの露骨な逸脱ですが、考え抜かれたもののようです。 Ubuntuは、1
に設定されている場合、害を及ぼさないため、X
をそのまま残します。 Y
ビットを1
に設定すると、悪意のあるアプリケーションによって簡単に悪用される可能性があります。たとえば、ドライブの空き領域全体を占める削除できないファイルを作成するなどです。
これは、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で予約名のファイルを削除する方法
典型的なWin32
CreateFile
メカニズムを使用してファイルへのハンドルを開く場合、特定のファイル名は古いスタイルのDOSデバイス用に予約されています。下位互換性のために、これらのファイル名は許可されておらず、通常のWin32ファイル呼び出しを使用して作成することはできません。ただし、この問題はNTFSの制限ではありません。Win32プログラムを使用すると、
MAX_PATH
よりも深いフォルダーをトラバースするために使用するのと同じ手法を使用して、ファイルの作成(または削除)時に実行される一般的な名前チェックをバイパスできる場合があります。さらに、一部のPOSIXツールはこれらの名前チェックの対象ではありません。