@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

差分による未使用領域の抽出方法はボツ

SQLite データベースファイル内で、使われていない未使用領域の範囲を識別して、EnCase 上でその範囲をブックマークするか、未使用領域の範囲だけをまとめて一つのファイルとして抽出できないものかとあれこれ試行錯誤中です。
とりあえず、失敗したボツネタなんですが、削除領域を含む SQLite ファイルと、それに対して vacuum 処理を実行して不要な領域を削ったデータベースファイルを作成し、その差分を取ることで未使用領域を簡単に識別できないかなというものです。
まずターゲットとなる SQLite データベースファイルをコピーして、このデータベースファイルに VACCUM 処理を実行します。

VACUUM
http://www.sqlite.org/lang_vacuum.html

これで不要なのが切り詰められているはずと思い、Araxis Merge を使いバイナリの Diff を確認してみたのですが、見事に駄目ですね(笑)
というか、最初にもう少しファイルフォーマット構造や vaccum 処理の内容を調べてから考えた方がよかったかもしれませんが、SQLite のデータベースファイルはページ単位で区切られて処理されている?らしく、ページが再配置されてしまうと単純に diff とってもまぁ当然のように駄目でした。しかも今 vaccum のページを見た感じだともう少し色々とあるようで、レコードとかの再配置も考慮するとこのアプローチは全然だめだめですね...orz