Impacket esentutl.py
ローカルの ESE/ESENT データベースからカタログ、ページ、テーブル行を読み取ります。
| 項目 | 内容 |
|---|---|
| 実装 | examples/esentutl.py |
| カテゴリ | 秘密情報 / DPAPI / レジストリ / ファイル解析 |
| 規模 | 111 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”オプションの最新の定義は python examples/esentutl.py -h で確認できます。
subcommand: dump、info、export
| 引数 | 説明 |
|---|---|
databaseFile | ESE to open |
-debug | Turn DEBUG output ON |
-ts | Adds timestamp to every logging output |
-page | page to open |
-table | table to dump(必須) |
詳細な処理フロー
Section titled “詳細な処理フロー”database file を ESENT_DB で開き、info は catalog を、dump は指定 page を structure として、export は指定 table を cursor で順次読み出して表示します。remote I/O や認証は行いません。
仕組みの詳細
Section titled “仕組みの詳細”ESE database は固定 page と B-tree、catalog metadata からなります。
ESENT_DB は header から page size/version を読み、catalog table を辿って
table、column、index の schema を構築します。CLI の info はこの catalog を
表示するため、raw page dump より高い層の構造を見ています。
dump は page number から file offset を計算し、page header、tag、record を
構造体として表示します。export は catalog で table を解決し、cursor で
record を順に辿り、column type に応じて fixed/variable/tagged data を
decode します。削除 record、NULL、long value は通常の scalar と同じ扱いに
できません。
この CLI は parser の薄い front-end なので、page layout や B-tree traversal
の修正は impacket.ese 側の責務です。壊れた database を入力できる tool として、
page number、tag offset、record length を file size 内で検証し、一つの不正
record で別 page を誤って読むことを防ぎます。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
dumpPage() | 31 | モジュール関数 |
exportTable() | 35 | モジュール関数 |
main() | 59 | モジュール関数 |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket.examples | logger |
impacket | version |
impacket.ese | ESENT_DB |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- 主処理はローカルファイルの解析です。入力を信頼せず、offset、length、形式識別子を検証してからデータを参照してください。
- オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
失敗経路と後始末
Section titled “失敗経路と後始末”- 入力ファイルがない場合、壊れている場合、読み取りが途中で終わる場合、未対応の形式だった場合を区別します。
実装を変更するとき
Section titled “実装を変更するとき”impacket.ese.ESENT_DB のみにほぼ集約されます。dumpPage() と exportTable() は薄い表示層です。page/table の parse を修正する場合は CLI ではなく impacket/ese.py と tests/misc/test_ese.py を中心に変更します。
- 構文:
python -m py_compile examples/esentutl.py - CLI:
python examples/esentutl.py -h - 関連テスト:
tests/misc/test_ese.py

