hfindでデータベースを使う前に、-iオプションによるインデックスファイルが作成されていなければならない。
このツールは効率化のために必要とされる。多くのテキストベースのデータベースは固定長のエントリを持たず、ソートされていないこともある。hfindはソートされた固定長エントリのインデックスファイルを作成する。この処理によりgrepのようなリニアサーチのかわりにバイナリサーチを用いた高速な参照を可能とする。
結果となるインデックスファイル名はデータベースファイル名に基づく。この名前はオリジナルの名前にハッシュタイプ(sha1またはmd5)が続き、.idxが付加される形式となる。例えばNIST NSRLのMD5ハッシュであればNSRLFile.txt-md5.idx、SHA-1であればNSRLFile.txt-sha1.idxという名前でインデックスファイルが作成される。
このファイルは2つのカラムをもつ。各エントリは最初のカラムであるハッシュ値によりソートされる。第2カラムはオリジナルのファイルで対応するエントリのバイトオフセットとなる。よってインデックスファイル内でハッシュが見つかれば、オフセットが記録されてhfindはオリジナルのデータベースから対応するエントリを探す。
以下の入力形式が有効である。NSRLでは'nsrl-md5'と'nsrl-sha1'を使うことができる。これはインデックスがどちらのハッシュ値でソートしているかの違いである。md5sumの値もソートに使用でき、"ホームメード"のデータベースをインデックスすることができる。hfindは両方のフォーマットをとる。
MD5 (test.txt) = 76b1f4de1522c20b67acc132937cf82e
76b1f4de1522c20b67acc132937cf82e test.txt
# hfind -i nsrl-md5 /usr/local/hash/nsrl/NSRLFile.txt
NSRLから値を検索する。
# hfind /usr/local/hash/nsrl/NSRLFile.txt 76b1f4de1522c20b67acc132937cf82e
76b1f4de1522c20b67acc132937cf82e Hash Not Found
SHA-1とMD5両方を指定することもできる。
# hfind -i nsrl-sha1 /usr/local/hash/nsrl/NSRLFile.txt
# hfind /usr/local/hash/nsrl/NSRLFile.txt
76b1f4de1522c20b67acc132937cf82e 80001A80B3F1B80076B297CEE8805AAA04E1B5BA
76b1f4de1522c20b67acc132937cf82e Hash Not Found
80001A80B3F1B80076B297CEE8805AAA04E1B5BA thrdcore.cpp
信頼できるシステムの重要バイナリファイルのデータベースを作成するためには、md5sumを用いる。
# md5sum /bin/* /sbin/* /usr/bin/* /usr/bin/* /usr/local/bin/* /usr/local/sbin/* > system.md5
# hfind -i md5sum system.md5
エントリの検索において、以下の形式で動作する。
# hfind system.md5 76b1f4de1522c20b67acc132937cf82e
76b1f4de1522c20b67acc132937cf82e Hash Not Found
または
# md5sum -q /bin/* | hfind system.md5
928682269cd3edb1acdf9a7f7e606ff2 /bin/bash
<...>
または
# md5sum -q /bin/* > bin.md5
# hfind -f bin.md5 system.md5
928682269cd3edb1acdf9a7f7e606ff2 /bin/bash
<...>
ドキュメントの更新情報は<doc-updates at sleuthkit dot org>に送信してください。