コンテンツにスキップ

Impacket esentutl.py

カテゴリ目次へ戻る / コマンド全体目次へ戻る

ローカルの ESE/ESENT データベースからカタログ、ページ、テーブル行を読み取ります。

項目内容
実装examples/esentutl.py
カテゴリ秘密情報 / DPAPI / レジストリ / ファイル解析
規模111 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

オプションの最新の定義は python examples/esentutl.py -h で確認できます。

subcommand: dump、info、export

引数説明
databaseFileESE to open
-debugTurn DEBUG output ON
-tsAdds timestamp to every logging output
-pagepage to open
-tabletable to dump(必須)

database file を ESENT_DB で開き、info は catalog を、dump は指定 page を structure として、export は指定 table を cursor で順次読み出して表示します。remote I/O や認証は行いません。

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 を誤って読むことを防ぎます。

シンボル位置責務を追う入口
dumpPage()31モジュール関数
exportTable()35モジュール関数
main()59モジュール関数
モジュール使用する主な名前
impacket.exampleslogger
impacketversion
impacket.eseESENT_DB
  • 主処理はローカルファイルの解析です。入力を信頼せず、offset、length、形式識別子を検証してからデータを参照してください。
  • オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
  • 入力ファイルがない場合、壊れている場合、読み取りが途中で終わる場合、未対応の形式だった場合を区別します。

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