TSALVIA技術メモ

CTFのWriteupや気になったツールについて書いていきます。また、このサイトはGoogle Analyticsを利用しています。

PECmd - Windows Prefetchの解析

Windows Prefetch について

Windows Prefetchは、アプリケーションの起動の高速化のために導入された機能です。 Prefetchファイルには、下記のような情報が含まれています。

  • 実行ファイル名(最大29文字)
  • アプリケーションの実行回数
  • ボリュームパスやボリュームシリアル番号などのボリューム関連情報
  • アプリケーションの起動に使用されたファイルとディレクト
  • アプリケーションが最後に実行された時刻

Prefetchファイルには、上記の情報が含まれているので、 解析することでプログラムの実行痕跡などが得られる可能性があります。

なお、Prefetchファイルは、下記のディレクトリに「~.pf」という拡張子で格納されています。

C:\Windows\Prefetch

PECmd(Prefetchファイルの解析ツール)

Prefetchファイルの解析ツールは、色々とありますが、今回はPECmdというコマンドラインのツールを紹介します。 PECmdは、Prefetchファイルをパースすることで、下記の項目を抽出することができます。

PECmdは、こちら(Eric Zimmerman's tools)のページでダウンロードできます。

※ ただし、Windows 8以下のバージョンでは、Windows 10のPrefetchファイルを解析できないので、注意してください。

使い方

基本

  • Prefetchファイルを直接指定する(-f オプション)
PECmd.exe -f "NOTEPAD.EXE-B28CC291.pf"
  • Prefetchファイルが格納されているディレクトリを指定する(-d オプション)
    指定したディレクトリ内に存在するPrefetchファイルを再帰的に読み込みます。
PECmd.exe -d "C:\Windows\Prefetch"

実行例(Prefetchファイルを直接指定する)

今回は、例として C:\Users\TEST\Desktop\test.txtnotepad.exe で開いたときに生成されたPrefetchファイルを解析してみます。下記が解析結果より、実行時間や参照したファイルなどが確認できます。

C:\Windows\Prefetch>PECmd.exe -f NOTEPAD.EXE-B28CC291.pf
PECmd version 1.3.0.0

Author: Eric Zimmerman (saericzimmerman@gmail.com)
https://github.com/EricZimmerman/PECmd

Command line: -f NOTEPAD.EXE-B28CC291.pf

Keywords: temp, tmp

Processing 'NOTEPAD.EXE-B28CC291.pf'

Created on: 2019-02-24 04:55:17
Modified on: 2019-02-24 04:54:06
Last accessed on: 2019-02-24 05:02:51

Executable name: NOTEPAD.EXE
Hash: B28CC291
File size (bytes): 50,472
Version: Windows 10

Run count: 2
Last run: 2019-02-24 04:54:03
Other run times: 2019-02-24 04:11:39

Volume information:

#0: Name: \VOLUME{01d4cbf353a8246d-f25451a4} Serial: F25451A4 Created: 2019-02-24 03:45:04 Directories: 17 File references: 103

Directories referenced: 17

00: \VOLUME{01d4cbf353a8246d-f25451a4}\PROGRAMDATA
01: \VOLUME{01d4cbf353a8246d-f25451a4}\PROGRAMDATA\MICROSOFT
02: \VOLUME{01d4cbf353a8246d-f25451a4}\PROGRAMDATA\MICROSOFT\WINDOWS
03: \VOLUME{01d4cbf353a8246d-f25451a4}\PROGRAMDATA\MICROSOFT\WINDOWS\CACHES
04: \VOLUME{01d4cbf353a8246d-f25451a4}\USERS
05: \VOLUME{01d4cbf353a8246d-f25451a4}\USERS\TEST
06: \VOLUME{01d4cbf353a8246d-f25451a4}\USERS\TEST\DESKTOP
07: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS
08: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\FONTS
09: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\GLOBALIZATION
10: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\GLOBALIZATION\SORTING
11: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32
12: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME
13: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME\IMEJP
14: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME\SHARED
15: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\JA-JP
16: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\WINSXS\AMD64_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_6.0.17763.107_NONE_05B63884071E656E

Files referenced: 81

00: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\NTDLL.DLL
01: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\NOTEPAD.EXE
02: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\KERNEL32.DLL
03: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\KERNELBASE.DLL
04: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\LOCALE.NLS
05: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\ADVAPI32.DLL
06: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\MSVCRT.DLL
07: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\SECHOST.DLL
08: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\RPCRT4.DLL
09: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\GDI32.DLL
10: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\GDI32FULL.DLL
11: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\MSVCP_WIN.DLL
12: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\UCRTBASE.DLL
13: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\USER32.DLL
14: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\WIN32U.DLL
15: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\COMBASE.DLL
16: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\BCRYPTPRIMITIVES.DLL
17: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\COMDLG32.DLL
18: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\SHCORE.DLL
19: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\SHLWAPI.DLL
20: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\SHELL32.DLL
21: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\CFGMGR32.DLL
22: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\WINDOWS.STORAGE.DLL
23: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\PROFAPI.DLL
24: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\POWRPROF.DLL
25: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\KERNEL.APPCORE.DLL
26: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\CRYPTSP.DLL
27: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\WINSXS\AMD64_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_6.0.17763.107_NONE_05B63884071E656E\COMCTL32.DLL
28: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\PROPSYS.DLL
29: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\OLEAUT32.DLL
30: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\WINSPOOL.DRV
31: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\BCRYPT.DLL
32: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\URLMON.DLL
33: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IPHLPAPI.DLL
34: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IERTUTIL.DLL
35: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\CRYPTBASE.DLL
36: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IMM32.DLL
37: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\JA-JP\NOTEPAD.EXE.MUI
38: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\WINDOWSSHELL.MANIFEST
39: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\OLE32.DLL
40: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\RPCSS.DLL
41: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\UXTHEME.DLL
42: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\CLBCATQ.DLL
43: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\MRMCORER.DLL
44: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\MSCTF.DLL
45: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\DWMAPI.DLL
46: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\CRYPT32.DLL
47: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\MSASN1.DLL
48: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\FONTS\STATICCACHE.DAT
49: \VOLUME{01d4cbf353a8246d-f25451a4}\$MFT
50: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\EFSWRT.DLL
51: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\MPR.DLL
52: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\WINTYPES.DLL
53: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\TWINAPI.APPCORE.DLL
54: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\RMCLIENT.DLL
55: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\GLOBALIZATION\SORTING\SORTDEFAULT.NLS
56: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\OLEACC.DLL
57: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\OLEACCRC.DLL
58: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\C_1252.NLS
59: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\TEXTINPUTFRAMEWORK.DLL
60: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\COREUICOMPONENTS.DLL
61: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\COREMESSAGING.DLL
62: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\NTMARTA.DLL
63: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME\IMEJP\IMJPTIP.DLL
64: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\VERSION.DLL
65: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME\IMEJP\IMJPAPI.DLL
66: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME\SHARED\IMJKAPI.DLL
67: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\POLICYMANAGER.DLL
68: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\MSVCP110_WIN.DLL
69: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME\IMEJP\IMJPPRED.DLL
70: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME\SHARED\IMETIP.DLL
71: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\DUI70.DLL
72: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME\SHARED\IMECFM.DLL
73: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\WER.DLL
74: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\JA-JP\MSCTF.DLL.MUI
75: \VOLUME{01d4cbf353a8246d-f25451a4}\USERS\TEST\DESKTOP\TEST.TXT
76: \VOLUME{01d4cbf353a8246d-f25451a4}\PROGRAMDATA\MICROSOFT\WINDOWS\CACHES\CVERSIONS.2.DB
77: \VOLUME{01d4cbf353a8246d-f25451a4}\PROGRAMDATA\MICROSOFT\WINDOWS\CACHES\{6AF0698E-D558-4F6E-9B3C-3716689AF493}.2.VER0X0000000000000001.DB
78: \VOLUME{01d4cbf353a8246d-f25451a4}\PROGRAMDATA\MICROSOFT\WINDOWS\CACHES\{DDF571F2-BE98-426D-8288-1A9A39C3FDA2}.2.VER0X0000000000000001.DB
79: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\JA-JP\PROPSYS.DLL.MUI
80: \VOLUME{01d4cbf353a8246d-f25451a4}\WINDOWS\SYSTEM32\IME\SHARED\IMESEARCHDLL.DLL

---------- Processed 'NOTEPAD.EXE-B28CC291.pf' in 0.02787400 seconds ----------

追加オプション

出力先指定

  • json形式で出力する(--json オプション)
    • --json オプションには、出力先のディレクトリ名を指定します。
    • --pretty オプションを付けると、Human Readableな形式で出力されます。
PECmd.exe -f NOTEPAD.EXE-B28CC291.pf --json "jsonOutput"
PECmd.exe -f NOTEPAD.EXE-B28CC291.pf --json "jsonOutput" --pretty
  • csv形式で出力する(--csv オプション)
    • --csv オプションには、出力先のディレクトリ名を指定します。
    • 出力先のディレクトリに下記の2つのファイルが生成されます。
      • Prefetchファイルのパース結果
      • 実行ファイルのタイムライン
PECmd.exe -d "C:\Windows\Prefetch" --csv "csvOutput"
PECmd.exe -d "C:\Windows\Prefetch" --html "C:\Users\TEST\Desktop\htmlOutput"

日時表示形式の指定

  • 時刻表示を現地時刻にする(--local オプション)
PECmd.exe -f NOTEPAD.EXE-B28CC291.pf --local
  • 日時表示形式を変更する(--dt オプション)
PECmd.exe -f NOTEPAD.EXE-B28CC291.pf --dt "yyyy/MM/dd HH:mm:ss"
  • 時刻表示の精度を上げる(--mp オプション)
    • 0.1マイクロ秒まで表示する。
      (例:2019-02-24 04:54:03 → 2019-02-24 04:54:03.3462456)
PECmd.exe -f NOTEPAD.EXE-B28CC291.pf --mp

その他

  • 特定のキーワードをハイライトする(-k オプション)
    • 指定したキーワードに該当する行が赤字でハイライトされます。
    • デフォルトのキーワードとして、tempとtmpが設定されています。
PECmd.exe -f NOTEPAD.EXE-B28CC291.pf -k "USERS"
  • 出力を抑制モードにする(-q オプション)
    • jsoncsvなどの形式で出力する場合に使用する。
    • ディスプレイ表示を抑制して、処理を高速化させる。
PECmd.exe -f NOTEPAD.EXE-B28CC291.pf --json "jsonOutput" -q

参考情報

Windows Prefetchについて

PECmd関連