windows 改变文件大小 函数_Windows程序执行证据分析(一):Prefetch

ec9bdc6fa45e361974aafbfa2515a4fd.png

自学者和学生的区别,不在于知识的广度,而在于生命力和自信心的差异。by 米兰·昆德拉

”0 1 Prefetch 简介

Prefetch(严格来说称为“Prefetcher”),在Windows XP引入,用于监视应用执行的前10秒。使用prefetch的目的是通过将应用加载需要的文件和资源缓存到内存,提升应用后续加载的速度,降低磁盘访问的需求。

缓存管理器会监视每个应用或进程引用的文件和目录,然后将这些内容映射到.pf文件。被监控的应用包括GUI程序,命令行程序,.com程序等。

在XP和Vista/Win7,Prefetch目录限制保存128个文件,在Windows 8和Windows 10,增加为1024个文件。从Windows 10开始,Prefetch文件被进行了压缩。在Prefetch目录,旧的文件首先会被移除。

Prefetch文件的命名规则为可执行程序的文件名,然后跟破折号,然后是hash值,如CMD.EXE-0BD30981.pf。Prefetch文件位于C:\Windows\Prefetch目录。需要注意的是dllhost.exe,mmc.exe及rundll32.exe,这些可执行程序的命令行参数也包含在hash计算中。参数和路径中的空格也会影响hash的计算。

Prefetch hash计算过程如下:

1. 确定文件的完整路径(如:C:\Windows\NOTEPAD.EXE)

2. 路径转换为Unicode字符串

3. 路径转换为设备字符(如:\DEVICE\HARDDISKVOLUMEX\WINDOWS\NOTEPAD.EXE)

4. 调用计算hash的函数生成hash

5. 创建Prefetch文件名(如:NOTEPAD.EXE-xxxxxxxx.pf)

Prefetch默认仅在Windows工作站启用,服务器版本未启用。在Windows XP/2003/Vista/Win7 默认设置boot prefetching来减小启动时间。在SSD磁盘上运行的Windows 7默认未启用Prefetch,所有不存在Prefetch目录。

Prefetch文件包含应用执行的次数,执行时的原始路径,首次执行时间,最后一次执行时间等信息。

要禁用Prefetch,可通过修改注册表来实现,启用也一样:

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters

名称: EnablePrefetcher

类型: REG_DWORD

值: 0 (0为禁用)

EnablePrefetcher可设置为下面的值:

0 = Disabled

1 = Application launch prefetching enabled

2 = Boot prefetching enabled

3 = Application launch and boot enabled

下面介绍具体如何分析Prefetch文件。

02 Prefetch分析 -  首次/最后执行

下面以lycoris_x64.exe程序的运行结果为例进行分析,可以看到生成的prefetch文件名为LYCORIS_X64.EXE-A232FF77.pf:

c1296b030eeb61526a05e6d40661d63f.png

.pf文件的创建日期为2020/12/2 22:33,说明程序lycoris_x64.exe首次执行时间大概为2020/12/2 22:33(实际执行时间约早10秒左右)。

.pf文件的修改日期为2020/12/2 22:36,说明lycoris_x64.exe的最后一次执行时间约为2020/12/2 22:26左右(实际时间可能早10秒左右)。准确的时间需要通过分析.pf文件获得。Windows 8和Windows 10在.pf文件里存储最近8次执行时间记录。

要分析.pf文件,可使用工具PECmd.exe,可将文件复制下来离线分析,也可以在运行的系统直接分析,下面演示在运行的系统直接分析。

PECmd.exe -f "c:\Windows\Prefetch\LYCORIS_X64.EXE-A232FF77.pf" -vss

上面命令中,-f指定分析的文件,-vss指定处理卷影副本,运行结果如下(注意时间加8小时):

2b559af8e74183e81b222e8a20586a0d.png

在程序的运行结果中,可以看到程序运行了7次,第一次运行时间为2020-12-02 22:32:51,比创建.pf文件创建时间早10秒。最后一次运行时间为2020-12-02 22:36:26,比.pf文件的修改时间早11秒。

此外,还可以看到其他几次运行的时间,程序引用的文件和目录,程序的完整路径等信息。

如果要分析C:\Windows\prefetch\目录下的所有文件,并将结果保存到csv文件,可用命令:

 PECmd.exe -d "C:\Windows\Prefetch" -csv "c:\prefetch_parser_output" -vss

需要注意的是,从Winodws 8开始,才包含能够解压Windows 10 prefetch文件的Windows API。因为PECmd.exe依赖Windows API解压Windows 10创建的prefetch文件,所以必须在Windows 8及以上系统运行程序处理Windows 10的prefetch文件。

此外,图形界面的工具WinPrefetchView也可用来分析prefetch文件,下载地址为:

https://www.nirsoft.net/utils/win_prefetch_view.html

由于使用比较简单,这里就不作说明。

03 内存分析Prefetch

有时候可能会遇到攻击者删除了C:\Windows\Prefetch目录下的所有文件,此时,如果我们提取了系统内存,也可通过分析内存中的prefetch文件,对程序执行证据进行分析。

这里使用volatility的插件prefetchparser。首先下载插件到本地:

curl -O https://raw.githubusercontent.com/superponible/volatility-plugins/master/prefetch.py

在使用时,可用参数--plugins指定插件目录,但需要注意的是,--plugins参数必须紧跟在vol.py后面:

7002f30e2b9d3aaceaad06d8c88e5931.png

如果出现上面的错误,说明我们没有解压windows 10创建的prefetch文件的库,安装过程如下:

git clone https://github.com/coderforlife/ms-compress.git

./build.sh

0299e6a0cc8d74f66c223987fc12e3c9.png

将生成的.so文件复制的系统动态链接库的目录:

cp libMSCompressino.so /usr/lib/

再次运行程序,如果出现下面错误,是因为没有指定prefetch文件的dump目录,可用--mam-dir参数指定:

8269e3536ca308c067c6f3455bb37f84.png

创建dump文件的目录并运行程序:

mkdir dumpdir

./vol_lin64 --plugins=./plugins/  -f ../OA-win10_x64_18363.dmp  --profile=Win10x64 prefetchparser  --mam-dir=./dumpdir

07a9c55b08d2440fb22873ae11f60874.png

在终端中只会输出一部分内容,可以看到部分prefetch的文件名,执行时间为最后一次运行时间,运行次数,及文件大小。

虽然在终端只会显示一部分内容,但插件会将内存中所有prefetch文件都dump到我们指定的目录,这些文件可用PECmd.exe等工具进行分析:

16eac410dced862de6ba4a31a068980b.png

使用PECmd.exe对dump的prefetch文件进行分析:

PECmd.exe -d dumpdir --csv .

程序运行的部分输出如下,虽然程序处理过程会提示错误,但结果仍包含一些有价值的信息:

499b1b58efa441ddd905abb4d9667f37.png

程序运行完后,会在当前目录生成2个文件:

6cb7a70829b697640107de700686ac17.png

使用TimelineExplorer.exe查看结果,也能看到程序运行时间,运行次数,之前几次的运行时间等信息:

c9275a9c71f7a8bc4a79d5a4303902c8.png

另一个输出文件按照时间线对运行过的程序进行了排序:

a56f9022731670ae0bcb932aafbabaef.png

04 总结

上面对windows prefetch文件进行了简单的介绍,然后介绍了使用文件系统和内存分析2种方式,通过对prefetch文件进行分析,来获得系统程序执行的相关信息,如执行过的程序名称,目录,运行次数,运行时间等信息。

希望本篇文章的内容对大家有所帮助,如有任何疑问,可在后台留言或者发送邮件。

参考资料

https://www.nirsoft.net/utils/win_prefetch_view.html

https://github.com/superponible/volatility-plugins

https://ericzimmerman.github.io/

https://github.com/coderforlife/ms-compress

http://www.hexacorn.com/blog/2012/03/

ff94252f361f53453538c7abec4dde8b.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值