
更新于 2022-03-31
在事件响应(IR)工作中,需要具备分析文件系统中文件的能力。有时这些文件被操作系统(OS)锁定,因为它们正在使用中,特别是事件日志和注册表配置单元,这尤其令人沮丧。TScopy 允许以管理员权限运行的用户,通过解析文件在文件系统中的原始位置并绕过操作系统来复制锁定文件。
还有其他执行类似功能的工具,例如我们曾使用过的 RawCopy,它是本工具的基础。然而,RawCopy 存在一些缺点,促使我们开发了 TScopy,包括性能、体积以及将其集成到其他工具中的能力。
这篇博客旨在介绍 TScopy,同时也寻求帮助。所有软件开发中,工具使用得越多,就能发现更多的边缘情况。我们希望大家尝试该工具并报告任何错误。
TScopy 是一个 Python 脚本,用于解析 NTFS $MFT 文件以定位并复制特定文件。通过解析主文件表(MFT),该脚本绕过了操作系统对文件的锁定。该脚本最初基于 RawCopy 的工作。RawCopy 使用 AutoIT 编写,难以根据我们的需求进行修改。将其移植到 Python 的决定是因为需要将这一功能原生集成到我们的工具集中。
TScopy 设计为可独立运行的程序,或作为 Python 模块包含在内。Python 实现利用了位于 https://github.com/williballenthin/python-ntfs 的 python-ntfs 工具。TScopy 在 python-ntfs 的基础功能上进行了扩展,以从原始磁盘中隔离每个文件的位置。
TScopy 使用 Python 编写并组织成类,使其比 AutoIT 更易于维护和阅读。AutoIT 可能被防病毒或检测软件标记为恶意,因为某些恶意软件利用了其潜力。
TScopy 与 RawCopy 的主要区别在于能够在单次执行中复制多个文件并缓存文件结构。如下图所示,TScopy 提供了下载单个文件、多个逗号分隔的文件、目录内容、通配符路径(单个文件或目录)以及递归目录的选项。
TScopy 在遍历目标文件的完整路径时,会缓存每个目录和文件的位置。然后利用此缓存优化对其他文件的搜索,确保后续文件复制更快。这是相对于 RawCopy 的显著优势,RawCopy 为每个文件遍历整个路径。
.\TScopy_x64.exe -h
usage:
TScopy_x64.exe -r -o c:\test -f c:\users\tscopy\ntuser.dat
Description: 仅将 ntuser.dat 文件复制到 c:\test 目录
TScopy_x64.exe -o c:\test -f c:\Windows\system32\config
Description: 复制 config 目录中的所有文件,但不复制其下的子目录。
TScopy_x64.exe -r -o c:\test -f c:\Windows\system32\config
Description: 复制 config 目录中的所有文件和子目录。
TScopy_x64.exe -r -o c:\test -f c:\users\*\ntuser*,c:\Windows\system32\config
Description: 使用通配符和列表复制 users 账户下所有以 ntuser 开头的文件,并递归复制注册表配置单元。
通过解析 MFT 复制受保护文件。必须以管理员权限运行。
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE Full path of the file or directory to be copied.
Filenames can be grouped in a comma ',' seperated
list. Wildcard '*' is accepted.
-o OUTPUTDIR, --outputdir OUTPUTDIR
Directory to copy files too. Copy will keep paths
-i, --ignore_saved_ref_nums
Script stores the Reference numbers and path info to
speed up internal run. This option will ignore and not
save the stored MFT reference numbers and path
-r, --recursive Recursively copies directory. Note this only works with
directories.
有一个隐藏选项 '--debug',用于启用调试输出。
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir
将 SYSTEM 注册表复制到 e:\outputdir 新文件将位于 e:\outputdir\windows\system32\config\SYSTEM
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir -i
将 SYSTEM 注册表复制到 e:\outputdir,但忽略任何先前缓存的文件,并且不将当前缓存保存到磁盘
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM,c:\windows\system32\config\SOFTWARE -o e:\outputdir
将 SYSTEM 和 SOFTWARE 注册表复制到 e:\outputdir
TScopy_x64.exe -f c:\windows\system32\config\ -o e:\outputdir
将 config 目录的内容复制到 e:\outputdir
TScopy_x64.exe -r -f c:\windows\system32\config\ -o e:\outputdir
递归复制 config 目录的内容到 e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat -o e:\outputdir
将每位用户的 NTUSER.DAT 文件复制到 e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat* -o e:\outputdir
对于每位用户,复制所有以 NTUSER.DAT 开头的文件到 e:\outputdir
TScopy_x64.exe -f c:\users\*\AppData\Roaming\Microsoft\Windows\Recent,c:\windows\system32\config,c:\users\*\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt -o e:\outputdir
对于每位用户,复制所有跳转列表、注册表配置单元和 PowerShell 历史命令到 e:\outputdir
请在 GitHub 页面的 issues 部分报告错误。