解析windows预取文件的python脚本

windowsprefetch的Python项目详细描述


创建用于分析Windows预取文件的Python脚本:支持XP-Windows 10预取文件

说明

Windows应用程序预取机制是为了在启动应用程序时提供性能优势而设置的。这恰好是一个更有益的法医文物证据应用于执行以及。prefetch.py提供分析当前所有预取文件版本(17、23、26和30)的预取文件的功能。

功能

  • 指定单个预取文件或预取文件的目录
  • CSV输出支持
  • (有限)Windows 10支持-必须从Windows 8+工作站分析Windows 10预取文件
  • 按所有执行时间戳对预取文件的目录进行排序

命令行选项

目前,prefetch.py需要两个命令行选项之一:--file指定要指向脚本的单个预取。--directory指定将被解析并打印到stdout的整个预取文件目录。当使用--directory / -d时,请记住包含尾随斜杠:

dev@computer:~$ ./prefetch.py -h
usage: prefetch.py [-h] [-c] [-d DIRECTORY] [-e EXECUTED] [-f FILE]

optional arguments:
  -h, --help            show this help message and exit
  -c, --csv             Present results in CSV format
  -d DIRECTORY, --directory DIRECTORY
                    Parse all PF files in a given directory
  -e EXECUTED, --executed EXECUTED
                    Sort PF files by ALL execution times
  -f FILE, --file FILE  Parse a given Prefetch file

–文件

--file / -f开关与一个预取文件一起使用会导致以下输出:

dev@computer:~$ python prefetch.py -f CMD.EXE-4A81B364.pf

=====================
CMD.EXE-4A81B364.pf
=====================

Executable Name: CMD.EXE

Run count: 2
Last Executed: 2016-01-16 20:26:42.515108

Volume Information:
    Volume Name: \DEVICE\HARDDISKVOLUME2
    Creation Date: 2016-01-16 21:15:18.109374
    Serial Number: 88008c2f

Directory Strings:
    \DEVICE\HARDDISKVOLUME2\WINDOWS
    \DEVICE\HARDDISKVOLUME2\WINDOWS\BRANDING
    \DEVICE\HARDDISKVOLUME2\WINDOWS\BRANDING\BASEBRD
    \DEVICE\HARDDISKVOLUME2\WINDOWS\GLOBALIZATION
    \DEVICE\HARDDISKVOLUME2\WINDOWS\GLOBALIZATION\SORTING
    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32

Resources loaded:

1:    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\NTDLL.DLL
2:    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\KERNEL32.DLL
3:    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\APISETSCHEMA.DLL
4:    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\KERNELBASE.DLL
5:    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\LOCALE.NLS
6:    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\CMD.EXE
7:    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\MSVCRT.DLL
8:    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\WINBRAND.DLL
9:    \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\USER32.DLL
10:   \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\GDI32.DLL
11:   \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\LPK.DLL
12:   \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\USP10.DLL
13:   \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\IMM32.DLL
14:   \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\MSCTF.DLL
15:   \DEVICE\HARDDISKVOLUME2\WINDOWS\BRANDING\BASEBRD\BASEBRD.DLL
16:   \DEVICE\HARDDISKVOLUME2\WINDOWS\GLOBALIZATION\SORTING\SORTDEFAULT.NLS

–目录

通过调用--directory / -d标志,分析员可以一次解析整个预取文件目录。

–已执行

按执行时间对预取文件的目录进行排序。此排序将包括Windows 8+预取文件中的所有时间戳(每个文件最多8个):

dev@computer:~$ python prefetch.py -e Prefetch/

Execution Time, File Executed
2015-11-15 00:02:39.781250, WUAUCLT.EXE-399A8E72
2015-11-15 00:02:26.281250, VERCLSID.EXE-3667BD89
2015-11-15 00:02:24.343750, WMIPRVSE.EXE-28F301A9
2015-11-15 00:02:07.453124, RUNDLL32.EXE-451FC2C0
2015-11-15 00:01:50.765626, GOOGLEUPDATE.EXE-1E123D86
2015-11-15 00:01:08, NTOSBOOT-B00DFAAD
...
...
...

–csv

使用--csv / -c标志将提供csv格式的结果:

Last Executed, Executable Name, Run Count
2016-01-20 16:01:27.680128, ADOBEIPCBROKER.EXE-c8d02fab, 1
2016-01-20 16:59:42.077480, CREATIVE CLOUD UNINSTALLER.EX-216b8ea8, 1
2016-01-19 18:07:18.101626, MSIEXEC.EXE-a2d55cb6, 37237
2016-01-20 16:11:15.818394, ACRODIST.EXE-782bc2b2, 1

测试

已成功完成以下预取文件类型的测试:

  • Windows XP(版本17)
  • Windows 7(版本23)
  • Windows 8.1(版本26)
  • Windows 10(版本30)

参考文献

如果没有比我聪明得多的其他人的工作,这个项目是不可能的。预取文件格式不是由微软正式记录的,已经通过逆向工程和反复试验来理解。

此外,如果没有弗朗西斯科·毕加索在理解windows 10预取压缩方法方面的出色工作,我将无法在这里解析windows10。我在prefetch.py中使用了他的解压脚本的修改版本。弗朗西斯科的原始脚本可以在下面的链接中找到:

w10pfdecomp.py

为了更好地理解预取文件格式,请查看以下资源;它们都用作创建脚本的参考:

ForensicsWiki: Windows Prefetch File Format

Libyal Project: libscca

Zena Forensics: A first look at Windows 10 Prefetch files

python需求

  • 从argparse导入argumentparser
  • 导入Binasci
  • 导入集合
  • 导入cTypes
  • 从日期时间导入日期时间,时间增量
  • 导入json
  • 导入操作系统
  • 导入结构
  • 导入系统
  • 导入临时文件

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么Scanner类不像println方法那样使用重载的概念   java Jersey:接受枚举请求参数的整数   java如何在EclipseKepler中安装Hibernate?   java在修补servlet中的jsp文件时获取NullPointerException   java“addScript”在HSQL中是否有最大记录计数?   java Maven使用@Ignore运行单元测试   java是args[0],args[1]变量吗?   java Swing JScrollPane溢出   java与Facebook Graph Api更新机制的集成,无需实时更新   java矩形在多边形内?   java Netty句柄AnnotatedConnectionException   java Springboot JPA不自动生成表   java如何在后台或睡眠模式下采样加速度计数据   java为什么RocketMQ DefaultMQProcuderImpl在成功发送消息的情况下调用updateFaultItem   java在对象数组中计算最小值,然后在另一个计算中使用它   java重缩放JFrame内容   如何使用Netbeans在java中输入泰米尔语(swing组件)?