发布于2022年11月8日2年前 0x00 前言 在上一篇文章《渗透技巧——Windows系统文件执行记录的获取与清除》中,我们整理了Windows主机(Win7及以上)常见文件执行记录的位置,尝试获取并清除单个记录,分析了利用思路,总结了防御方法。 作为后续,本文详细介绍了清除RecentFileCache.bcf和Amcache.hve的单个记录的方法 0x01 简介 RecentFileCache.bcf的格式分析 编写一个程序来清除RecentFileCache.bcf的单个记录 Amcache.hve的格式分析 编写一个程序来清除Amcache.hve的单个记录 0x02 RecentFileCache.bcf格式分析 简介 它用于跟踪应用程序和不同可执行文件之间的兼容性,并可以记录应用程序执行的历史。 Win7(支持Win8(不支持Win8和更高版本的系统),位置: c:\ Windows \ app compat \ Programs \ recentfile cache . BCF 格式分析 没有资料介绍RecentFileCache.bcf的文件格式,不过好在格式规则比较简单。 前20个字节是文件头。 前16个字节是固定格式,如下图所示 接下来是每条记录的内容,固定格式如下: 前4个字节表示Unicode记录的长度。 录制的内容(Unicode格式) 结束标志,0x0000 注: 每个Unicode字符占用2个字节。 下面的c程序用于解析RecentFileCache.bcf文件。 定义结构 typedef struct _BCF_HEADER { ULONG64 Flag1 ULONG64 Flag2 ULONG未知; } BCFHEADER,* PBCFHEADER typedef struct _BCF_RECORD { ULONG大小; } BCFRECORD,* PBCFRECORD 注: ULONG64为8字节,ULONG为4字节。 逐个解析每条记录,通过固定的变量大小确定记录的长度,然后读取每条记录的内容。 完整的实现代码已经开源,地址如下: https://github . com/3g student/home-of-C-Language/blob/master/listrecentfile cache . CPP 该代码实现了读取RecentFileCache.bcf文件并显示所有记录。 0x03 RecentFileCache.bcf文件的单条记录清除 最简单的方法是用字符0x00覆盖要删除的记录,但会打乱原来的文件格式。 所以需要删除要删除的记录的内容,后续的记录要填空。 在程序实现中,使用一个新的数组来存储修改后的内容。 完整的实现代码已经开源,地址如下: https://github . com/3g student/home-of-C-Language/blob/master/deleterenctfilecache . CPP 代码实现了修改指定的RecentFileCache.bcf文件,删除指定的记录,并将新文件保存为NewRecentFileCache.bcf 0x04 Amcache.hve格式分析 简介 Windows系统用Amcache.hve替换RecentFileCache.bcf,可以记录创建时间、最后修改时间、SHA1和一些PE文件头信息。 Win8和更高版本的系统使用Amcache.hve而不是RecentFileCache.bcf Win7安装KB2952664后也会支持Amcache.hve,也就是说RecentFileCache.bcf和Amcache.hve都包含文件执行记录。 Amcache.hve以注册表格式存储信息。 注册表文件的格式可以参考: http://www . sentinel chicken . com/data/thewindowsnregistryfileformat . pdf 附录包括对文件格式的详细介绍,可为程序实现提供参考。 为了提高开发效率,我们可以在Windows系统下使用regedit.exe来分析记录。 通过regedit.exe加载Amcache.hve可以查看和修改Amcache.hve的信息。该方法如下: 选择HKEY_LOCAL_MACHINE,选择文件-加载配置单元.并指定一个名称来加载Amcache.hve 检查注册表后,发现文件执行记录以明文保存。 要在regedit.exe修改Amcache.hve的注册表信息,需要使用系统权限。修改后可以通过选择导出保存Amcache.hve。 检查位于以下地址的Amcache.hve文件中记录的开源powershell脚本: https://github . com/Yoda 66/getam cache/blob/master/Get-am cache . PS1 脚本过程如下: 通过reg load加载Amcache.hve 枚举注册表并显示记录信息。 通过reg unload卸载Amcache.hve。 0x05 Amcache.hve文件的单条记录清除 删除思路 要删除指定记录的信息,需要删除该记录对应的注册表父项。 删除方法 1、通过regedit.exe的界面操作 用系统权限打开regedit.exe,加载Amcache.hve,编辑注册表,最后选择导出,导出一个新的Amcache.hve. 2、脚本实现 流程如下: 使用系统权限通过reg load加载Amcache.hve 枚举注册表以匹配要删除的记录。 获取记录的注册表父项,并删除整个注册表项值。 导出注册表并保存Amcache.hve 通过reg unload卸载Amcache.hve。 脚本实现的详细信息: 确定当前权限是否为系统权限: $output='whoami ' if($ output-not match ' nt authority \ \ system ') { Write-Error“脚本必须以nt authority\system身份运行”-错误操作停止 } 加载注册表: reg load HKLM \ am cache c:\ Windows \ app compat \ Programs \ am cache . hve 导出注册表: reg.exe拯救HKLM\amcache 'new.hve' /y 卸载注册表: reg.exe卸载HKLM\amcache 完整的实现代码已经开源,地址如下: https://github . com/3g student/home-of-Powershell/blob/master/Delete-am cache . PS1 该代码实现了删除指定名称的记录,并能自动删除多条重复记录,最终生成一个新文件new.hve 0x06 小结 本文介绍了RecentFileCache.bcf和Amcache.hve单记录的清理方法和程序实现细节。 从取证的角度来说,RecentFileCache.bcf和Amcache.hve的记录不能盲目相信。 留下回复
创建帐户或登录后发表意见