元ファイル 00000000 3C 68 74 6D 6C 3E 0D 0A 6D 69 6E 69 66 69 6C 65 ; <html>..minifile 00000010 0D 0A 3C 2F 68 74 6D 6C 3E 0D 0A ; ..</html>..上記内容を持つファイルを0で1024バイト上書きするとファイルは0に書き換えられます。
上書き後ファイル 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................ 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................ ..... 000003F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................しかしデータはディスクに残っています。一方がMFT内のデータで、もう一方がトランザクションログと思われます。
ディスクのダンプ 003F49A0 57 00 00 00 00 00 00 00 3C 68 74 6D 6C 3E 0D 0A ; W.......<html>.. 003F49B0 6D 69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C ; minifile..</html 003F49C0 3E 0D 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 ; >............... 003F7DA0 1B 00 00 00 18 00 00 00 3C 68 74 6D 6C 3E 0D 0A ; ........<html>.. 003F7DB0 6D 69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C ; minifile..</html 003F7DC0 3E 0D 0A 00 00 00 00 00 B9 15 88 00 00 00 00 00 ; >.......ケ......
検証用コード #include <stdio.h> char buf[1024]; int main(int argc,char **argv) { FILE *fp; fp = fopen(argv[1],"r+b"); fwrite(buf, 1, 1024, fp); fclose(fp); return 0; }その他、NTFSでは代替データストリーム、リパースポイント(によるマウントボリュームなど)、スパースファイル、暗号化、圧縮にも注意が必要です。それ以外にファイル名そのもの、ファイルのタイムスタンプ、アトリビュート、ACLも削除すべきかもしれません。ファイルの削除は未使用領域のクリアよりも考慮すべき点は多いのです。ディスクの未使用領域を消去する場合にもいえますが、データサイズがクラスタサイズの倍数ではない場合、ファイルの最終クラスタの未使用部分は以前のファイルの残骸の可能性があります。また、ディレクトリの未使用エントリに削除したファイル名が残っている可能性があります。
正しい抹消ツールというものは、引用終わり
(1)ファイルのサイズ情報をゼロにする
(2)ファイル名の領域(ディレクトリエントリ)から、データが存在する先頭クラスタ番号を削除する。ファイルのデータが格納されていたクラスタに対応するエントリを、ファイルアロケーションテーブルからも削除する。クラスタとは、OSがディスクを管理するための最小単位で、1つ以上のセクタをまとめたもの。
(3)ファイルのデータ領域をゼロや乱数などで上書きする
の3つの処理すべてを行うのだが、まれに(3)の処理を行わないものがある。そのような不完全な抹消ツールで処理したディスクは、「復元」でスキャンしても何も見つからないかもしれないが、ファイナルデータのような商用の復元ツールを使うと、削除済みデータが見つかる可能性がある(当然だが「復元」を商用パッケージにしたものでは無理だ)。さらにStep2以降の、ディスクを直接ダンプするような方法をとれば、データ領域が上書きされていないわけだから、削除済みデータは確実に見つかる。
ディスクのダンプ 0000AD00 00 00 18 00 00 00 01 00 1B 00 00 00 18 00 00 00 ; ................ 0000AD10 3C 68 74 6D 6C 3E 0D 0A 6D 69 6E 69 66 69 6C 65 ; <html>..minifile 0000AD20 0D 0A 3C 2F 68 74 6D 6C 3E 0D 0A 00 00 00 00 00 ; ..</html>....... 00530320 57 00 00 00 00 00 00 00 3C 68 74 6D 6C 3E 0D 0A ; W.......<html>.. 00530330 6D 69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C ; minifile..</html 00530340 3E 0D 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 ; >...............
上書き後ディスクのダンプ 0000AD00 00 00 18 00 00 00 01 00 01 00 00 00 18 00 00 00 ; ................ 0000AD10 2A 68 74 6D 6C 3E 0D 0A FF FF FF FF 82 79 47 11 ; *html>......ZG. 0000AD20 0D 0A 3C 2F 68 74 6D 6C 3E 0D 0A 00 00 00 00 00 ; ..</html>....... 00530320 57 00 00 00 00 00 00 00 3C 68 74 6D 6C 3E 0D 0A ; W.......<html>.. 00530330 6D 69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C ; minifile..</html 00530340 3E 0D 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 ; >............... 00534710 57 00 00 00 00 00 00 00 68 74 6D 6C 3E 0D 0A 6D ; W.......html>..m 00534720 69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C 3E ; inifile..</html> 00534730 0D 0A 00 00 00 00 00 00 E7 8E B2 00 00 00 00 00 ; ........邇イ.....
検証用コード #include <stdio.h> int main(int argc,char **argv) { FILE *fp; fp = fopen(argv[1],"r+b"); fwrite("*", 1, 1, fp); chsize(fileno(fp),1); fclose(fp); return 0; }ファイルを復元できなくする目的で、ファイルを削除したりディスクの未使用領域を消去するソフトウェアを利用する場合、利用者はそのソフトウェアがNTFSのMFT内に収まるサイズのファイルへの対応を行っているかを確認しておくべきです。代替データストリーム、リパースポイント、スパースファイルへの対応も確認しておくべきです。必要ならファイルの最終クラスタの未使用部分、ディレクトリの未使用エントリへの対応も確認しておくべきです。ファイル名、ファイルサイズ、タイムスタンプ、ACLについても必要なら対応を確認すべきです。ベクターでのダウンロードの人気と削除処理の確実性とは無関係です。NTFS固有の機能について言及していないフリーソフトはほとんどの場合未対応です。英語でよければEraserがお勧めのようです。日本語の完全削除version 1.36cはMFT内に収まるファイルには対応するものの代替データストリーム等には未対応とのことで次点となります。
リンク
NTFS 2000 に対するプログラマの見方:暗号化、スパース、リパース ポイント
NTFS Documentation 英語
タイムストンプと$FILE_NAME属性
NTFSフォーマットの場合引用終わり
NTFSフォーマットの未使用領域を確実に抹消するフリーソフトは、Eraserとcipher.exe以外、今のところない。
リンク
フリーソフトによるデータ抹消・復元大全 ディスクの削除済みデータ(未使用領域)の抹消
ページング ファイルを消去する方法 Windows XP , Windows 2000