これまではデータ抹消についての記事が多かったが、本稿では、できるだけフリーのツールを使って、ハードディスクや各種メディアのデータを復元する手順を考えてみよう。以下のツールは、すべてWindows上で動作するものだ。また、本稿では物理的に破損したハードディスクからのデータ復元は対象としていない。動作は正常だが、データが削除または抹消されているハードディスクなどから、何らかのデータを復元することが目的である。
なお、Step2以降では、ディスク内データの日本語文字コードはシフトJISである、と仮定している。
基本的な事項
抹消ツールによって上書きされた部分は、ソフトウェアを使う限り、どのような方法でも復元することはできない。
ソフトウェアを使ったデータ復元は、
・普通の削除やフォーマットが行われたデータ
または
・抹消ツールを使ったが、何らかの理由で上書きされなかったデータ
に対してのみ可能ということになる。
ディスクを普通に接続して、エクスプローラで開いてみる。
何らかの事情で、使われていたそのままの状態になっているディスクもあり得る。普通にアクセスできるファイルがあれば、それをコピーした後、Step1以降(削除/フォーマット/抹消されたファイルの復元)に進む。
用意するもの
復元 [注意] 下記の「復元」についての内容は、フリーソフトであったVer.4.2.8までについてのみ正しい。
作者 加藤 高明氏(Ver.4.2.8まで)
ダウンロード 商用化に伴いフリー版のダウンロードは終了
ファイナルデータ 試用版 (無料)
AOSテクノロジーズ株式会社
ダウンロード http://www.finaldata.ne.jp/down.html
Step1-1 「復元(Ver.4.2.8まで)」でスキャンする
これで見つかり、復元できれば最もコストがかからない。
しかし、「復元」で見つけられるのは、普通に「ごみ箱から削除」されたファイルだ。ファイルのサイズ情報をゼロにされ、データが存在する先頭クラスタ番号を消された状態のファイルは、まず見つけることができない。このようなファイルは、「復元」のウィンドウにファイル名だけ表示されるが、選択して[コピーして復元]をクリックしても、サイズ0のファイルができるだけである。
正しい抹消ツールというものは、
(1)ファイルのサイズ情報をゼロにする
(2)ファイル名の領域(ディレクトリエントリ)から、データが存在する先頭クラスタ番号を削除する。ファイルのデータが格納されていたクラスタに対応するエントリを、ファイルアロケーションテーブルからも削除する。クラスタとは、OSがディスクを管理するための最小単位で、1つ以上のセクタをまとめたもの。
(3)ファイルのデータ領域をゼロや乱数などで上書きする
の3つの処理すべてを行うのだが、まれに(3)の処理を行わないものがある。そのような不完全な抹消ツールで処理したディスクは、「復元」でスキャンしても何も見つからないかもしれないが、ファイナルデータのような商用の復元ツールを使うと、削除済みデータが見つかる可能性がある(当然だが「復元」を商用パッケージにしたものでは無理だ)。さらにStep2以降の、ディスクを直接ダンプするような方法をとれば、データ領域が上書きされていないわけだから、削除済みデータは確実に見つかる。
なお、上記の(3)だけ行い、(1)と(2)の処理を行わない抹消ツールも存在する。この場合はファイル名やフォルダ名だけ復元可能だが、データ自体は上書きされていて、復元はできない。
また、ファイル名を消去したり、ランダムな名前に置き換えたりする機能は、ツールによってあったりなかったりする。
「復元(Ver.4.2.8まで)」を使って何も見つからなければ、Step1-2へ。
Step1-2 ファイナルデータ 試用版でスキャンする
試用版は、スキャン機能に限り有償版と同じである(復元機能はない)。
これで復元する価値のあるものが見つかれば、有償版を購入して復元する。
本稿のタイトルが「可能な限りフリーのツールで...」となっているのは、この段階でデータが見つかれば、有償版の復元ツールを使いなさい、という流れになっているからだ。
ファイナルデータ 試用版で何も見つからなければ、Step2へ。
ファイナルデータは、Word、Excel、PowerPoint、HTMLなどのファイルを効率的に見つけることができるが、ただのテキストについては検出能力がほとんどない。そこでStep2ではテキストのデータや、テキストの部分を持つバイナリデータが残っていないかを調べる。
用意するもの
「低空飛行」はシェアウェアだが、それ以外はすべてフリー。どれもアーカイブを適当なフォルダに解凍すれば、使えるようになる。
低空飛行 1.21 (シェアウェア 1155円)
(ディスクダンプツール。Windows NT/2000/XPでフロッピー以外のディスクをダンプ表示するなら、これが必要)
作者 太田 巧氏
ダウンロード http://www.vector.co.jp/soft/win95/hardware/se072470.html
でぃす君 Ver 1.2 (ディスクダンプツール。Windows NT/2000/XPでは、フロッピーの内容しか表示できない。Windows 95/98/Meではハードディスクの内容を表示できる)
作者 内田 明宏氏
ダウンロード http://www.vector.co.jp/soft/dos/util/se013633.html
GNU utilities for Win32 (この中のdd.exeとgrep.exeを使う)
作者 Karl M. Syring氏
ダウンロード http://unxutils.sourceforge.net/
jstrings (バイナリファイルから文字列を抽出する)
作者 たかはしもとのぶ氏
ダウンロード http://www.monyo.com/technical/products/jstrings/
Bz (バイナリエディタ)
作者 兵藤 嘉彦氏 金子 政秀氏
ダウンロード http://www.vector.co.jp/soft/win95/util/se032859.html
バイナリエディタとしては、シンプルなものでよいという人にはBz。多機能のものがよい人は、"Stirling"(後藤和重氏) http://www.vector.co.jp/soft/win95/util/se079072.html がいいかもしれない。また、ハードディスク全体のイメージファイルを作ることになった場合は"dump4w"(K.Horishima氏)http://www.vector.co.jp/soft/win95/util/se230275.html がいいかもしれない。最大64GBのファイルを扱える。
Step2-1(A) でぃす君でざっと見てみる
Windows NT/2000/XPの場合、でぃす君で調べられるのはフロッピーだけである。
Windows 95/98/Meの場合は、でぃす君でハードディスクも調べることができる。
調べるディスクがAドライブであれば、以下のコマンドを実行する。
diskun a -p
-pは256バイト(1セクタの半分)ずつ表示するオプション。スペースキーで次の256バイトに移る。気長にスペースキーを押し、ディスクがゼロ(0x00)で上書きされたものか、1(0xff)で上書きされたものか、あるいは乱数で上書きされたものか、など概要を調べる。
-pを付けなければ、ダンプ表示は画面を流れていく。それをながめてディスクの状態を判断してもよい。
Step2-2へ。
Step2-1(B) 「低空飛行」でざっと見てみる
Windows NT/2000/XPでフロッピー以外のディスクをダンプ表示するなら、「低空飛行」を使うとよい。
「低空飛行」はシェアウェアだが、以下の操作は未登録状態でもできる。
Step2-2へ。
Step2-2
ディスクのサイズが小さいか、または作業用に使えるハードディスクの空き容量が十分あれば、復元するディスクのイメージファイルを作る。ディスクに直接アクセスするよりも高速だからだ。
この作業にはGNU utilities for Win32に含まれているdd.exeを使う。dd.exeでのドライブ名の指定方法は変わっていて、普通のDOSコマンドであれば"c:"と指定するのを"\\.\c:"と指定しなければならない。
フロッピーなら
dd if=\\.\a: of=image
ハードディスク、MO、CFカードなどなら(Fドライブとすると)
dd if=\\.\f: of=image
のようにする。"image"がイメージファイルだ。ハードディスクからイメージファイルを作る場合、イメージファイルのサイズは非常に大きく(ハードディスク全体と同じサイズ)なる。作業領域の空き容量に注意すること。
Step2-3
ディスクは0x00または0xffで上書きされたものらしい場合
jstrings.exeを使って、何らかのデータが残っていないか調べる。
jstrings -l -m 1 --cp932 < image
文字コード種類に"--cp932"を指定するとシフトJIS文字列(ASCII文字列も含まれる)を抽出できる。"-l -m 1"は1文字以上マッチすれば表示するという指定。
何かありそうならStep2-4へ。検出結果が少なければ、バイナリエディタでイメージファイルを開き、検出された文字列を検索してもよい。
何も出力されなければ、あきらめる(ディスクダンプツールやバイナリエディタで、隅々まで調べてもよいが)。
ディスクは乱数で上書きされたものらしい場合
Step2-4へ。
Step2-4
grepは指定した文字列を検索するコマンドだ。以下のように実行する。
grep -a target-string image
"-a"はバイナリデータをテキストデータとして入力するというオプション。
ここでtarget-stringとは、あなたが興味を持つ文字列だ。
メールアドレスならば.jp、.comなどになる。
(注)grep.exeで"@"を指定すると、出力結果が異常になるようだ。
GNU utilities for Win32のgrepでは、シフトJISの文字列の中に結果がエラーになるものがある。わかっているものでは"ー"(長音)がある。したがって"サーバー"などを検索するとエラーになる。
幸運にも多くの文字列が検出されたなら、
grep -a target-string image > result.txt
とすればresult.txtに検出結果が保存される。
特定の種類のファイルの一部などを探すなら、以下のような文字列が「マーカー」になる。
| ファイル形式 | マーカー文字列 |
|---|---|
| Word(.doc) | Microsoft、Word、Document など |
| Excel(.xls) | Microsoft、Excel など |
| PowerPoint(.ppt) | Microsoft、PowerPoint など |
| JPEG | JFIF |
| GIF | GIF89a |
| PNG | PNG |
| BMP | BM |
一方テキスト形式のファイルの場合は、以下のような「マーカー」文字列がある。
| ファイル形式 | マーカー文字列 |
|---|---|
| RTF形式で保存した Word文書(.rtf) | \rtf ansicpg932 deflang など |
| HTML | <html、<meta、<body、<pなど、 HTMLタグの一部であればどれでも。 |
CSV形式で保存したExcelワークシート(.csv)は、保存されるのはセルのデータだけなので、「マーカー」といえるものは特にない。
あなたが興味を持つ文字列を次のようなテキストファイルにすると、効率がよくなる。ただしエラーになる可能性があるので、日本語の文字列は含めない方がよい。"@"も出力結果が異常になるようだ。
|
.jp .com Microsoft JFIF GIF86a BM : |
このファイルの名前をmarker.txtとして次のように実行する。
grep -a --file=marker.txt image > result.txt
marker.txtの文字列に一致する部分が、result.txtに保存される。
Step2-5へ。
Step2-5
Word文書らしいが普通の言語として読めないデータは、日本語のWord文書かもしれない。この場合は、その部分をバイナリエディタでコピーし、文字コード設定を[Unicode]にしたテキストエディタに貼り付けてみると、読める可能性がある。この方法でExcelもそれなりにうまくいくことがある(文字データを拾うだけだが)。
補足
以上の手順は、自分で抹消処理したディスクが、確実に抹消されているかを検証する目的にも応用できる。フリーの抹消ツールを新たに作ろうという人も、最低限この程度の検証を行ってから、公開していただきたいと思う。
Copyright (C) Cybernetic Survival Network. All Rights Reserved.